Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / использование :NEW внутри for по курсору / 2 сообщений из 2, страница 1 из 1
03.01.2003, 13:40
    #32086147
Oleg Afanasiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование :NEW внутри for по курсору
Вот голову ломаю над проблемой:
нужно вести историю изменения значений некоторых столбцов
тех, что указаны в таблице dir
Я создаю триггер:
Код: plaintext
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.
create or replace trigger col_hist
	before insert or update or delete
	on test for each row
begin

declare
 sqltext varchar2( 1000 );
    cursor_name INTEGER;
         rows_processed INTEGER;
   сursor c1 is select col,tabl from dir where upper(tabl)='TEST';
   cursor c2 is select * from dual;
begin
open c2;
    for i in c1 LOOP
           if UPDATING(i.col) then

sqltext:='insert into col_history values(to_date('''||SYSDATE||''',''dd.mm.yy hh24:mi:ss''),''UPDATE'','||:NEW.i.col||','''||i.col||''','''||ora_login_user||''',''refref'','''||i.tabl||''')';


    cursor_name := dbms_sql.open_cursor;
    DBMS_SQL.PARSE(cursor_name,sqltext,dbms_sql.native);
    rows_processed := dbms_sql.execute(cursor_name);
    DBMS_SQL.close_cursor(cursor_name);

end IF;
end LOOP;
close c2;
end;
END;




Проблема в том что я не могу получить новое значение нужного мне столбца
Не проходит конструкция :NEW.i.col
А i.col это как раз и есть имя нужного мне столбца.
Что посоветуете?
...
Рейтинг: 0 / 0
03.01.2003, 13:54
    #32086151
Oleg Afanasiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование :NEW внутри for по курсору
Ещё один комментарий
Если я в строке sqltext напишу не
:NEW.i.col ,а
...,':NEW.'||i.col||',...

На парсинг подаётся строка

insert into col_history values(to_date('03/01/03','dd.mm.yy hh24:mi:ss'),'UPDATE',:NEW.t1,'t1','OLEG','refref','test')

Которую нормально можно выполнить внутри триггера.
Но при парсинге динамическим sql-ем он говорит что
(Error): ORA-01008: not all variables bound ORA-06512: at "SYS.DBMS_SYS_SQL", line 1118 ORA-06512: at "SYS.DBMS_SQL", line 316 ORA-06512: at "OLEG.COL_HIST", line 19 ORA-04088: error during execution of trigger 'OLEG.COL_HIST'
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / использование :NEW внутри for по курсору / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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