Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Преобразование типа long / 22 сообщений из 22, страница 1 из 1
30.11.2010, 12:36
    #36985707
Ленни
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типа long
Есть таблица.
В ней столбец типа long.
Там лежит что-то типа to_Date().

Как можно получить дату?
Вроде SQL это не поддерживает...
...
Рейтинг: 0 / 0
30.11.2010, 16:52
    #36986705
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типа long
ЛенниЕсть таблица.
В ней столбец типа long.
Там лежит что-то типа to_Date().

Как можно получить дату?
Вроде SQL это не поддерживает...
залезли вы наровном месте просто в задницу
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Connected to:
Oracle Database 11g Enterprise Edition Release  11 . 2 . 0 . 1 . 0  - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> create table a_lo (a long);

Table created.

SQL> insert into a_lo select to_char(sysdate,'dd.mm.yyyy') from dual;

 1  row created.

SQL> select to_date(sys.dbms_metadata_util.long2varchar( 4000 ,user||'.A_LO','A',rowid),'dd.mm.yyyy') 
   2     from a_lo;

D
---------
 30 -NOV- 10 
...
Рейтинг: 0 / 0
14.12.2010, 16:06
    #37013871
Savelyev Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типа long
dbms_metadata_util.long2varchar

слава богу нашел зацепку... хоть и не в хорошем месте.... ;)
...
Рейтинг: 0 / 0
04.02.2011, 18:47
    #37098583
Valergrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типа long
Код: plaintext
select * from v$version;

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64biPL/SQL Release 10.2.0.4.0 - ProductionCORE 10.2.0.4.0 ProductionTNS for Linux: Version 10.2.0.4.0 - ProductionNLSRTL Version 10.2.0.4.0 - Production

Код: plaintext
1.
select  dbms_metadata_util.long2varchar( 1000 ,'sys.dba_tab_partitions', 'high_value', rowid) 
from sys.dba_tab_partitions;

ORA-00904: "DBMS_METADATA_UTIL"."LONG2VARCHAR": invalid identifier

Как сделать правильно?
...
Рейтинг: 0 / 0
04.02.2011, 19:02
    #37098610
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типа long
Valergrad..

Как сделать правильно?

Код: plaintext
SYS.DBMS_METADATA_UTIL..
...
Рейтинг: 0 / 0
04.02.2011, 20:29
    #37098734
Valergrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типа long
orawish, пробовал.
...
Рейтинг: 0 / 0
07.02.2011, 02:42
    #37101274
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типа long
Valergradorawish, пробовал.
desc SYS.DBMS_METADATA_UTIL
1) от вашего пользователя
2) от sys
3) гранты?
...
Рейтинг: 0 / 0
07.02.2011, 17:40
    #37102791
Valergrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типа long
Действительно, не было прав.
...
Рейтинг: 0 / 0
07.02.2011, 17:41
    #37102794
Valergrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типа long
orawish, спасибо!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
11.02.2015, 18:00
    #38877299
Besenok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типа long
Доброго времени суток.

Набрела на данную тему в поисках возможности извлечь данные из sys.all_tab_columns.data_default без создания функций.

При выполнении запроса
Код: plsql
1.
2.
select  sys.dbms_metadata_util.long2varchar(1000,'sys.dba_tab_partitions', 'high_value', rowid) 
from sys.dba_tab_partitions;


возвращается:
Код: plsql
1.
ORA-01446: cannot select ROWID from, or sample, a view with DISTINCT, GROUP BY, etc.



Если в запросе использовать sys.all_tab_columns вместо sys.dba_tab_partitions , то ошибка

Код: plsql
1.
ORA-01445: cannot select ROWID from, or sample, a join view without a key-preserved table



Подскажите, пожалуйста, есть ли способ обойти эти ошибки, без создания функций.
К сожалению, в интернете не нашла ответа.
Заранее спасибо.
...
Рейтинг: 0 / 0
11.02.2015, 18:13
    #38877311
oragraf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типа long
Besenok,

мне просто интересно, зачем это нужно? Мне кажется, что велосипед на подходе...
...
Рейтинг: 0 / 0
11.02.2015, 18:20
    #38877314
Besenok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типа long
oragraf,

чтобы при пересоздании таблицы перенеслись не только колонки и данные, но и установленные значения по умолчанию.
Возможно велосипед уже есть, вот только я его не вижу
...
Рейтинг: 0 / 0
11.02.2015, 18:32
    #38877322
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типа long
Besenok,

Тяжело искать черную кошку в темной комнате особенно когда её там нет . У VIEWs ROWID нет по определению. И data dictionary views не включают в себя ROWID используемых таблиц.

SY.
...
Рейтинг: 0 / 0
11.02.2015, 18:38
    #38877326
eev
eev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типа long
Besenok..чтобы при пересоздании ... но и установленные значения по умолчанию.
оно?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SQL> create table test_ddl (id number default 0);
 
Table created
 
SQL> select dbms_metadata.get_ddl(object_type => 'TABLE',name => 'TEST_DDL') from dual;
 
DBMS_METADATA.GET_DDL(OBJECT_T
--------------------------------------------------------------------------------
 
  CREATE TABLE "TEST_DDL"
   (	"ID" NUMBER DEFAULT 0
   ) ....
...
Рейтинг: 0 / 0
12.02.2015, 13:12
    #38877942
Besenok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типа long
eev,

рассматривала такой вариант, но мне кажется, что он не подходит, т.к. полученный скрипт позволяет создать новую пустую таблицу, а не пересоздать существующую со всеми данными и характеристиками (мне так кажется).
Хотя наверно, можно создать таблицу этим запросом, затем перенести данные из старой таблицы.

Но неужели не существует способа вытащить данные из поля типа Long, без создания функций и промежуточных таблиц?
...
Рейтинг: 0 / 0
12.02.2015, 13:28
    #38877977
moishamiem
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типа long
Besenok,

Во-первых, rowid нет у системных вьюх, а вот у базовых таблиц, на которых строятся эти вью, rowid есть:

Код: plsql
1.
2.
select  sys.dbms_metadata_util.long2varchar(1000,'sys.tabpartv$', 'HIBOUNDVAL', rowid) 
from sys.tabpartv$;



Во-вторых, лучше покопайтесь в dbms_metadata, потому-что через нее решить вашу задачу можно более эффективно. К примеру, данный пакет позволяет сравнить структуру двух таблиц, и выдать набор alter'ов для устранения разницы.
...
Рейтинг: 0 / 0
12.02.2015, 13:56
    #38878024
eev
eev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типа long
Besenok,
автор...создать ...пересоздать...
путаете сами себя себя.
Для изменения таблицы - ALTER. Для хранения скриптов - система контроля версий. Для переноса между базами - самое простое exp\imp.
Для изысканных случаев - всевозможные комбинации возможных средств\инструментов\тулз и хотелок. Была тема, например, про SVN и метаданные.

авторНо неужели не существует способа вытащить данные из поля типа Long если это вопрос изыскания, то вы уперлись в ограничение использования данной функции.
...
Рейтинг: 0 / 0
12.02.2015, 14:25
    #38878060
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типа long
Besenokбез создания функций.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
SQL> with
  2    function GetColDef(aOwn varchar2, aTab varchar2, aCol varchar2) return varchar2
  3    is
  4    begin
  5      for cCol in
  6      ( select data_default from all_tab_columns
  7          where owner = aOwn
  8            and table_name = aTab
  9            and column_name = aCol
 10      ) loop
 11        return cCol.data_default;
 12      end loop;
 13    end GetColDef;
 14  select owner, table_name, column_name, def
 15    from
 16    ( select c.*, GetColDef(owner, table_name, column_name) as def
 17        from all_tab_columns c
 18        where data_default is not null
 19    )
 20    where lower(def) like '%sysdate%'
 21      and rownum <= 5
 22  /

OWNER                TABLE_NAME           COLUMN_NAME               DEF
-------------------- -------------------- ------------------------- --------------------
ORDDATA              ORDDCM_DOCS_WRK      CREATE_DATE               SYSDATE
ORDDATA              ORDDCM_DOCS_TMP      CREATE_DATE               SYSDATE
ORDDATA              ORDDCM_DOCS          CREATE_DATE               SYSDATE
GSMADMIN_INTERNAL    GSM_REQUESTS         CHANGE_DATE               SYSDATE
SYSTEM               REPCAT$_FLAVORS      CREATION_DATE             SYSDATE

Код: plsql
1.
2.
3.
4.
Elic@elic12>; disc
Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
Elic@elic12>; 

...
Рейтинг: 0 / 0
13.02.2015, 10:43
    #38878812
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типа long
Besenokeev,

рассматривала такой вариант, но мне кажется, что он не подходит, т.к. полученный скрипт позволяет создать новую пустую таблицу, а не пересоздать существующую со всеми данными и характеристиками (мне так кажется).
Хотя наверно, можно создать таблицу этим запросом, затем перенести данные из старой таблицы.

Но неужели не существует способа вытащить данные из поля типа Long, без создания функций и промежуточных таблиц?
разумеется, существуют.
причем давным-издааавно. например в OCI они есть и были от века
другое дело, что развивать их (по мнению вендора) нет резона
...
Рейтинг: 0 / 0
13.02.2015, 11:26
    #38878885
varlamovvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типа long
Besenok,
списал с форума, активно пользую :)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
select
  owner,
  table_name,
  column_name,
  data_type,
  xmlquery( 'for $i in //*
              return $i/text()' passing DBMS_XMLGEN.GETXMLTYPE(
                'select data_default from all_tab_columns where table_name like '''
                || table_name
                || ''' and owner = '''
                || owner
                || ''' and column_name = '''
                || column_name
                || ''''
              ) returning content 
          ).getClobVal() as data_default
from all_tab_columns t
where t.table_name like 'LENNY%' and owner='LENNY_ORA'
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
31.08.2017, 18:20
    #39513616
frais
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типа long
Из all_tab_partitions значение колонки high_value можно вытянуть, например, так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select nvl(
           sys.dbms_metadata_util.long2varchar(4000, 'SYS.TABPART$', 'HIBOUNDVAL', tp.rowid),
           sys.dbms_metadata_util.long2varchar(4000, 'SYS.TABCOMPART$', 'HIBOUNDVAL', tpp.rowid)
       ) as high_value
  from all_tab_partitions t, sys.obj$ o, sys.tabcompart$ tpp, sys.tabpart$ tp
 where o.name = t.table_name
   and o.subname = t.partition_name
   and o.obj# = tp.obj#(+)
   and o.obj# = tpp.obj#(+);
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
30.05.2020, 18:00
    #39964437
Правильный Вася
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типа long
Вот хорошая статья

Несколько разных способов преобразования LONG во что-то более удобное.
Сам долго искал, а там человеческим языком подробно расписано.

И вообще очень полезный сайт (не сочтите за рекламу).
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Преобразование типа long / 22 сообщений из 22, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]