おやすみ。オラクルのEXECUTE IMMEDIATEに問題があります。他のトピックを調べましたが、役に立たなかった回答がありました。これはコードです: まず、トリガーの中に挿入する必要があるテーブル...
create global temporary table TEMP_PK (COL_NAME VARCHAR(100), COL_TYPE VARCHAR(100), ROW_VALUE VARCHAR(100)) on commit preserve rows;
さあ、私の引き金
CREATE OR REPLACE TRIGGER ICidade AFTER
INSERT ON Cidade FOR EACH ROW DECLARE TYPE EmpCurTyp IS REF CURSOR;
emp_cv EmpCurTyp;
col_name_aux VARCHAR(100);
col_type_aux VARCHAR(100);
stm VARCHAR(4000):='';
BEGIN
-- Pegando as PKS
FOR j IN
(SELECT d.Column_Name coluna,
d.DATA_TYPE tipo
FROM user_cons_columns ucc,
user_constraints uc,
(SELECT COLUMN_NAME,DATA_TYPE FROM ALL_TAB_COLUMNS WHERE TABLE_NAME='CIDADE'
) d
WHERE uc.constraint_name=ucc.constraint_name
AND uc.constraint_type ='P'
AND uc.table_name = 'CIDADE'
AND d.COLUMN_NAME =ucc.Column_Name
)
LOOP
stm := concat
(
stm, 'INSERT INTO TEMP_PK VALUES ('
)
;
stm := concat(stm, j.coluna);
stm := concat(stm,', ');
stm := concat(stm, j.tipo);
stm := concat(stm,', ');
stm := concat(stm, ':NEW.');
stm := concat(stm,j.coluna);
stm := concat(stm,')');
EXECUTE IMMEDIATE stm;
stm:='';
END LOOP;
END ICidade;
/
コンパイルは良好です。問題は、テーブル「Cidade」にエントリを追加するときです。たとえば、次のように挿入しようとします。
Insert into Cidade Values (11,'Alegre','ES');
印刷機能を使用して、即時実行なしで実行すると、次の結果が得られます。
TEMP_PK 値に挿入 (CODCIDADE、NUMBER、:NEW.CODCIDADE);
EXECUTE IMMEDIATE を使用すると、次のエラーが発生します。
行から始まるエラー: コマンドの 62 - Cidade 値 (11,'Alegre','ES') に挿入 エラー レポート - SQL エラー: ORA-00936: 式がありません ORA-06512: "PAULA.ICIDADE"、行 34 ORA -04088: トリガー 'PAULA.ICIDADE' 00936 の実行中にエラーが発生しました。00000 - 「式がありません」
おそらくばかげたエラーですが、見つかりません。
誰でも私を助けることができますか?これから、よろしくお願いします。