Гость
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как перевести LONG в CLOB / 25 сообщений из 66, страница 1 из 3
27.08.2013, 08:59
    #38378106
Scw
Scw
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести LONG в CLOB
В базе 11g присутствует LONG
SEARCH_CONDITION LONG
При тестировании непосредственно объекта DBMV_TRIGGERS выдает
Error at line 6, column 2:
ORA-00932: inconsistent datatypes: expected - got LONG
Я так понимаю надо long перевести в clob.
Подскажите каким способом это возможно сделать.
...
Рейтинг: 0 / 0
27.08.2013, 12:25
    #38378432
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести LONG в CLOB
Scw,

sql(dml) функцией to_lob
...
Рейтинг: 0 / 0
27.08.2013, 12:44
    #38378479
Scw
Scw
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести LONG в CLOB
Ругается на to_lob

select
TRIGGER_NAME,
TABLE_NAME,
DESCRIPTION,
WHEN_CLAUSE,
to_lob(TRIGGER_BODY) SOURCE
^
from USER_TRIGGERS
...
Рейтинг: 0 / 0
27.08.2013, 12:51
    #38378496
KoTTT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести LONG в CLOB
Код: plsql
1.
2.
3.
4.
create table user_triggers_lob as
select trigger_name, table_name, description, when_clause, to_lob (trigger_body) source from user_triggers;

select * from user_triggers_lob;
...
Рейтинг: 0 / 0
27.08.2013, 12:54
    #38378505
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести LONG в CLOB
Scw,

а вы документацию откройте - там всё написано (и про dml, в частности)
...
Рейтинг: 0 / 0
27.08.2013, 13:09
    #38378533
--Eugene--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести LONG в CLOB
orawish,

нет, ну Вы расскажите как получить колонку TRIGGER_BODY из USER_TRIGGERS в читабельном виде (например, в виде CLOB), если знаете как
...
Рейтинг: 0 / 0
27.08.2013, 13:18
    #38378550
tru55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести LONG в CLOB
--Eugene--нет, ну Вы расскажите как получить колонку TRIGGER_BODY из USER_TRIGGERS в читабельном виде (например, в виде CLOB), если знаете как

Код: 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.
DECLARE
  v_TrigText   varchar2(32000);
  v_TrigName   varchar2(30);
  v_TableName  varchar2(30);
  
  v_SearchStr  varchar2(100):= '%xyz%';

  CURSOR C1
  IS
  SELECT *
  FROM dba_triggers
  WHERE owner = ...
  ;
BEGIN
  for R1 in C1 loop
  
    v_TrigText:= R1.trigger_body;
    
    if v_TrigText LIKE v_SearchStr then
    
      v_TrigName := R1.trigger_name;
      v_TableName:= R1.table_name;
      
      dbms_output.put_line('table= '|| v_TableName || '     trigger= '|| v_TrigName);
    end if;
  end loop;
END;  
...
Рейтинг: 0 / 0
27.08.2013, 13:29
    #38378563
--Eugene--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести LONG в CLOB
Scw,

Похоже, они хотят сказать, что просто так с помощью SELECT LONG-колонку не сконвертить в читабельный вид. Нужно использовать DML. В DML оператор TO_LOB ругаться не будет (как ругается в обычном запросе)
...
Рейтинг: 0 / 0
27.08.2013, 13:32
    #38378569
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести LONG в CLOB
--Eugene--orawish,

нет, ну Вы расскажите как получить колонку TRIGGER_BODY из USER_TRIGGERS в читабельном виде (например, в виде CLOB), если знаете как
варианты:
1) воспользоваться клиентсайдовским (например OCI) функционалом, который не имеет проблем с select лонг фром ляля,
(например, как то реализовано в sqlplus)
2) CTAS c to_lob внутри
3) sys.dbms_metadata_util.long2clob
4) java серверная
..
...
Рейтинг: 0 / 0
27.08.2013, 13:36
    #38378575
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести LONG в CLOB
orawish,

а что касается не просто лонгов, а объектов словаря (таких как триггеры), то они доступны и через *_source
а также и через dbms_metadata
...
Рейтинг: 0 / 0
27.08.2013, 13:45
    #38378594
Scw
Scw
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести LONG в CLOB
KoTTT
Код: plsql
1.
2.
3.
4.
create table user_triggers_lob as
select trigger_name, table_name, description, when_clause, to_lob (trigger_body) source from user_triggers;

select * from user_triggers_lob;



Это я уже делал не помогло.
...
Рейтинг: 0 / 0
27.08.2013, 13:49
    #38378602
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести LONG в CLOB
ScwKoTTT
Код: plsql
1.
2.
3.
4.
create table user_triggers_lob as
select trigger_name, table_name, description, when_clause, to_lob (trigger_body) source from user_triggers;

select * from user_triggers_lob;



Это я уже делал не помогло.
что, так и сказал сервер?
- нэ помогу
...
Рейтинг: 0 / 0
27.08.2013, 13:51
    #38378607
Как перевести LONG в CLOB
Походу, fixed in 12c :)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SQL> create table drop_scw as select to_lob(trigger_body) tb from dba_triggers where rownum<=10;

Table created.

SQL> select to_lob(trigger_body) tb from dba_triggers where rownum<=10;
select to_lob(trigger_body) tb from dba_triggers where rownum<=10
       *
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected - got LONG


SQL> select banner from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
PL/SQL Release 12.1.0.1.0 - Production
CORE    12.1.0.1.0      Production
TNS for 64-bit Windows: Version 12.1.0.1.0 - Production
NLSRTL Version 12.1.0.1.0 - Production
...
Рейтинг: 0 / 0
27.08.2013, 13:58
    #38378620
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести LONG в CLOB
ora_советник,

чё фиксед то? отродясь той to_lob (в oracle 8/8i) всегда так и работала.
...
Рейтинг: 0 / 0
27.08.2013, 14:02
    #38378625
Scw
Scw
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести LONG в CLOB
в 10 это тоже не считалось ошибкой, а вот в 11 считается.
...
Рейтинг: 0 / 0
27.08.2013, 14:04
    #38378630
Dnipro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести LONG в CLOB
orawish--Eugene--orawish,

нет, ну Вы расскажите как получить колонку TRIGGER_BODY из USER_TRIGGERS в читабельном виде (например, в виде CLOB), если знаете как
варианты:
1) воспользоваться клиентсайдовским (например OCI) функционалом, который не имеет проблем с select лонг фром ляля,
(например, как то реализовано в sqlplus)
2) CTAS c to_lob внутри
3) sys.dbms_metadata_util.long2clob
4) java серверная
..+ в PL/SQL лонги до 32к нормально обрабатываются, иначе - "PL/SQL: numeric or value error: Bulk Bind: Truncated Bind"
Код: plsql
1.
2.
3.
4.
begin
   for i in (select trigger_body from dba_triggers where trigger_name = '...')
   loop dbms_output.put_line(i.trigger_body); end loop;
end;

+ dbms_xmlgen.getxmltype (до 4000)
Код: plsql
1.
select extractvalue(dbms_xmlgen.getxmltype('select trigger_body from dba_triggers where trigger_name = ''...'''),'//ROW/*') dummy from dual
...
Рейтинг: 0 / 0
27.08.2013, 14:09
    #38378640
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести LONG в CLOB
Scwв 10 это тоже не считалось ошибкой, а вот в 11 считается.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
Присоединен к:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> create table drop_scw as select to_lob(trigger_body) tb from dba_triggers w
here rownum<=10;

Таблица создана.
...
Рейтинг: 0 / 0
27.08.2013, 14:12
    #38378644
Scw
Scw
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести LONG в CLOB
Все создалось, но ничего не изменилось, объект как был не валидным так и остался.
...
Рейтинг: 0 / 0
27.08.2013, 14:13
    #38378647
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести LONG в CLOB
Scw,

ошибки, разумеется, возможны и в любой версии сервера. самое простое - нет прав.
ну дак вы же (как юный партизан ) молчите же в тряпочку
...
Рейтинг: 0 / 0
27.08.2013, 14:14
    #38378650
Scw
Scw
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести LONG в CLOB
Почему нет прав? Есть.
...
Рейтинг: 0 / 0
27.08.2013, 14:17
    #38378656
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести LONG в CLOB
ScwВсе создалось, но ничего не изменилось, объект как был не валидным так и остался.
а вы считали, что если прочтёте его текст, то он исправится ?
...
Рейтинг: 0 / 0
27.08.2013, 14:20
    #38378666
Scw
Scw
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести LONG в CLOB
Думал что при проверке не будет не валидных объектов.
...
Рейтинг: 0 / 0
27.08.2013, 14:29
    #38378689
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести LONG в CLOB
ScwДумал что при проверке не будет не валидных объектов.
увы, секрет как лечить по фотографии в оракле утерян

используйте
alter trigger ляля compile
...
Рейтинг: 0 / 0
27.08.2013, 14:41
    #38378708
Scw
Scw
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести LONG в CLOB
alter trigger DBMV_TRIGGERS compile
ERROR at line 1:
ORA-04080: trigger 'DBMV_TRIGGERS' does not exist
...
Рейтинг: 0 / 0
27.08.2013, 14:45
    #38378714
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести LONG в CLOB
Scw,

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


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