powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / использование :NEW внутри for по курсору
2 сообщений из 2, страница 1 из 1
использование :NEW внутри for по курсору
    #32086147
Фотография Oleg Afanasiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот голову ломаю над проблемой:
нужно вести историю изменения значений некоторых столбцов
тех, что указаны в таблице 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
использование :NEW внутри for по курсору
    #32086151
Фотография Oleg Afanasiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё один комментарий
Если я в строке 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
2 сообщений из 2, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / использование :NEW внутри for по курсору
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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