В основном я получаю код TRIGGER, как показано ниже.
dbms_metadata.get_ddl('TRIGGER', 'trigger_name');
Вывод вышеуказанной строки выглядит примерно так:
CREATE OR REPLACE EDITIONABLE TRIGGER "owner"."trigger_name" BEFORE DELETE ON roles FOR EACH ROW
BEGIN
DBMS_APPLICATION_INFO.read_client_info (acct_utils.trigger_enabled);
IF acct_utils.trigger_enabled <> 'F' THEN
INSERT INTO qatable (ID,KEY, OBJECT, KEYTYPE, TYPE, OBJ_DEF_ID, WHENCREATED, WHENDELETED, DELETEDBY) VALUES(
:old.cny#,
:old.record#,
'roles',
null,
:old.name,
null,
:old.whencreated,
(CURRENT_TIMESTAMP AT TIME ZONE 'GMT'),
SYS_CONTEXT('TMCtx', 'USERKEY')
);
END IF;
END trigger_name;
ALTER TRIGGER "owner"."trigger_name" ENABLE
Я пытаюсь получить только вставку в qatable"оператор, использующий следующий оператор
select substr(dbms_metadata.get_ddl('TRIGGER', 'trigger_name'),
instr(upper(dbms_metadata.get_ddl('TRIGGER', 'trigger_name')), 'INSERT INTO qatable ('),
instr(dbms_metadata.get_ddl('TRIGGER', 'trigger_name'), ';', instr(upper(dbms_metadata.get_ddl('TRIGGER', 'trigger_name')), 'INSERT INTO qatable'), 1) -
instr(upper(dbms_metadata.get_ddl('TRIGGER', 'trigger_name')), 'INSERT INTO qatable') + 1) from dual;
Результатом вышеупомянутого запроса является оператор вставки либо
INSERT INTO qatable (ID,KEY, OBJECT, KEYTYPE, TYPE, OBJ_DEF_ID, WHENCREATED, WHENDELETED, DELETEDBY) VALUES(
:old.ID,
:old.KEY,
'roles',
null,
:old.type,
null,
:old.whencreated,
(CURRENT_TIMESTAMP AT TIME ZONE 'GMT'),
SYS_CONTEXT('TMCtx', 'USERKEY')
);
ИЛИ
INSERT INTO qatable (ID,KEY, KEYTYPE, TYPE, OBJ_DEF_ID, WHENCREATED, WHENDELETED, DELETEDBY) VALUES(
:old.ID,
:old.KEY,
null,
:old.type,
null,
:old.whencreated,
(CURRENT_TIMESTAMP AT TIME ZONE 'GMT'),
SYS_CONTEXT('TMCtx', 'USERKEY')
);
в зависимости от имени триггера.
Для немногих триггеров значение в поле TYPE равно нулю, а для других значение получает проходы.У меня есть требование, например, если какое-либо значение вставляется в 'Type', я должен сохранить его в массиве или списке и отправить обратно через процедуру.
desc qatable;дает следующий результат
Name Null? Type
----------- -------- ------------
ID NOT NULL NUMBER(15)
KEY NOT NULL NUMBER(15)
OBJECT NOT NULL VARCHAR2(30)
KEYTYPE CHAR(2)
TYPE VARCHAR2(60)
OBJ_DEF_ID NUMBER(8)
WHENDELETED DATE
DELETEDBY NUMBER(8)
WHENCREATED DATE
RECORDNO NOT NULL NUMBER