如何执行存储在 table 中的 SQL 查询

How to execute SQL query stored in a table

我有一个 table 具有存储 SQL 查询的列之一。

create table test1
(
    name varchar(20),
    stmt varchar(500)
);

insert into test1 (name, stmt) 
values ('first', 'select id from data where id = 1;')

数据 table 就像:

create table data
(
    id number,
    subject varchar(500)
);

insert into data (id, subject) values (1, 'test subject1');
insert into data (id, subject) values (2, 'test subject2');
insert into data (id, subject) values (3, 'test subject2');

现在每次在 test1 中插入时,我都需要执行插入到 test1stmt 列中的查询,并将查询的数据插入结果 table :

create table result
(
    id number,
    subject varchar(500)
);

为此,我正在编写一个触发器,它在 test1 中的每个插入时执行,如下所示:

create or replace TRIGGER  "TEST_AFTER_INSERT" 
BEFORE INSERT or UPDATE ON test1
FOR EACH ROW
DECLARE
sql_stmt VARCHAR2(500);
BEGIN
select stmt into sql_stmt from data where name = :NEW.name;
insert into result(id, subject)
select id,subject from data where id in ('stmt');
END; 

你能告诉我如何实现这个吗,上面的触发器抛出我无法理解的错误。

考虑直接插入:

CREATE OR REPLACE TRIGGER "TEST_AFTER_INSERT"
  BEFORE INSERT or UPDATE ON test1
  FOR EACH ROW
DECLARE
BEGIN
  insert into result(id, subject)
  select id, subject from data where name = :NEW.name;
END;

您可以在触发器中使用动态查询,如下所示:

CREATE OR REPLACE TRIGGER "TEST_AFTER_INSERT" AFTER  -- CHANGED IT TO AFTER AS NAME SUGGESTS
    INSERT OR UPDATE ON TEST1
    FOR EACH ROW -- REMOVED DECLARE SECTION
BEGIN
    EXECUTE IMMEDIATE 'INSERT INTO result
    SELECT ID, SUBJECT FROM DATA WHERE ID IN ('
                      || RTRIM(:NEW.STMT, ';')
                      || ')';
     -- SINGLE QUERY TO INSERT THE DATA
     -- USED RTRIM AS STMT HAS ; AT THE END
END;

干杯!!