0

ユーザーが入力する挿入ステートメントを表示する方法を理解しようとしています。「挿入ステートメントを更新してください」というテキストが印刷された後に表示したい。オンラインでたくさんのことを読んだところ、「/」記号を入力し、このクエリを実行することで、Oracleで入力した前のコマンドを表示できることがわかりました 'SELECT * FROM gv$sql WHERE SQL_ID = IDENT_CURRENT('gv $sql')'. dbms_output.put_line(/) を使用し、単に t0_char('/'); を使用して、トリガーで execute immediately ステートメントを使用してみました。以下に示すように、クエリで。任意のヒント?

set serveroutput on
CREATE or REPLACE trigger before_insert_t
before insert on reservations
for each row

DECLARE
rooms_remaining number(5,2);

BEGIN

select roooms_rem into rooms_remaining from reservations where roomno=:new.roomno;

if rooms_remaining = 0 then

    dbms_output.put_line('Insertion now allowed because room ' || :new.roomno || ' is booked!' );
dbms_output.put_line('Please update the insert statement');
--  to_char('/');
    dbms_output.put_line('insert into reservations values ' || :new.roomno  );
--  EXECUTE IMMEDIATE sql_stmt;
end if;
END;
/
show errors
insert into reservations values (99,9);
4

1 に答える 1

0
CREATE or REPLACE trigger before_insert_t
before insert on TEST_TAB1
for each row    
DECLARE
  sql_insert varchar2(1000);    
BEGIN    
  select sql_text into sql_insert 
    from (select sql_text 
            from v$sql 
            where upper(sql_text) like 'INSERT INTO TEST_TAB1%'
            order by first_load_time desc)
   where rownum=1;  
  dbms_output.put_line('Inserting into table SQL is '||sql_insert);    
END;
/

SQL> set serveroutput on
SQL> insert into TEST_TAB1 values ('Hello');
1 rows inserted.
Inserting into table SQL is insert into TEST_TAB1 values (:"SYS_B_0")

並べ替えて降順で並べ替え、複数のが存在する場合にFIRST_LOAD_TIME最新のステートメントとなる最初の行を選択します。INSERTINSERT

于 2012-12-12T19:49:21.043 に答える