powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Преобразование типа long
22 сообщений из 22, страница 1 из 1
Преобразование типа long
    #36985707
Ленни
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица.
В ней столбец типа long.
Там лежит что-то типа to_Date().

Как можно получить дату?
Вроде SQL это не поддерживает...
...
Рейтинг: 0 / 0
Преобразование типа long
    #36986705
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛенниЕсть таблица.
В ней столбец типа 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
Преобразование типа long
    #37013871
Savelyev Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_metadata_util.long2varchar

слава богу нашел зацепку... хоть и не в хорошем месте.... ;)
...
Рейтинг: 0 / 0
Преобразование типа long
    #37098583
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Преобразование типа long
    #37098610
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valergrad..

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

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

Набрела на данную тему в поисках возможности извлечь данные из 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
Преобразование типа long
    #38877311
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Besenok,

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

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

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

SY.
...
Рейтинг: 0 / 0
Преобразование типа long
    #38877326
eev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Преобразование типа long
    #38877942
Besenok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
eev,

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

Но неужели не существует способа вытащить данные из поля типа Long, без создания функций и промежуточных таблиц?
...
Рейтинг: 0 / 0
Преобразование типа long
    #38877977
moishamiem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Преобразование типа long
    #38878024
eev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Besenok,
автор...создать ...пересоздать...
путаете сами себя себя.
Для изменения таблицы - ALTER. Для хранения скриптов - система контроля версий. Для переноса между базами - самое простое exp\imp.
Для изысканных случаев - всевозможные комбинации возможных средств\инструментов\тулз и хотелок. Была тема, например, про SVN и метаданные.

авторНо неужели не существует способа вытащить данные из поля типа Long если это вопрос изыскания, то вы уперлись в ограничение использования данной функции.
...
Рейтинг: 0 / 0
Преобразование типа long
    #38878060
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Преобразование типа long
    #38878812
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Besenokeev,

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

Но неужели не существует способа вытащить данные из поля типа Long, без создания функций и промежуточных таблиц?
разумеется, существуют.
причем давным-издааавно. например в OCI они есть и были от века
другое дело, что развивать их (по мнению вендора) нет резона
...
Рейтинг: 0 / 0
Преобразование типа long
    #38878885
varlamovvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Период между сообщениями больше года.
Преобразование типа long
    #39513616
frais
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Из 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
Период между сообщениями больше года.
Преобразование типа long
    #39964437
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот хорошая статья

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

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


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