0
テーブル名を指定してプロシージャを作成しようとしていますが、シーケンス名と自動インクリメントトリガが作成されます。テーブル内にトリガーを作成するためのOracleプロシージャ/関数
コード:
CREATE OR REPLACE procedure CREATE_SEQUENTIAL_TR(table_name VARCHAR)
is -- Tried using declare but it wouldn't accept
coluna_cod varchar(100 char);
begin
--Finding the cod column name for this table first
--They start with "PK_CD"
select
COLUMN_NAME
into
coluna_cod
from
ALL_TAB_COLUMNS
where
TABLE_NAME=table_name
and COLUMN_NAME like "PK_CD%";
--Creating the sequence obj
drop sequence "cod" || table_name;
create sequence "cod" || table_name;
--Now creating the trigger
create or replace trigger "cod" || table_name || "tr"
before
UPDATE or INSERT on table_name
for each row
declare
cod number := coluna_cod;
tr_name varchar(100 char) := "cod" || table_name
begin
if UPDATING then
if :new.cod != :old.cod then
:new.cod := :old.cod;
end if;
else -- inserting
:new.cod := tr_name.nextval();
end if;
end;
end;
これの複雑さはかなり私の知識の範囲の外になってしまいました。
現時点ではdrop sequence "cod" || table_name
(予期しないDROPシンボルが見つかりました)にエラーが発生していますが、他のエラーが発生している可能性があります。
誰かがこの論理を理解する手助けができますか?
あなたは、PL/SQLブロックでのDDL文を実行することはできません。 execute immediateを使用するか、スクリプトを作成してsqlplusを実行する必要があります – OldProgrammer