在Oracle PL / SQL中扩展触发器中的变量(IF:new.variable_name IS NULL THEN

时间:2017-04-21 17:55:20

标签: sql oracle plsql triggers

我想在定义触发器时在Oracle(PL / SQL)中执行以下操作:


    DECLARE
        pk_column_name VARCHAR(50) := 'id';
    BEGIN
    EXECUTE IMMEDIATE 'CREATE OR REPLACE TRIGGER table_a_trigger
        BEFORE INSERT ON table_a
        FOR EACH ROW
        BEGIN
            IF :new.pk_column_name IS NULL THEN       /* here */
                SELECT table_a_sequence.nextval
                INTO :new.pk_column_name              /* and here */
                FROM DUAL;
            END IF;
        END;';
    END;

我希望变量pk_column_name(包含字符串' id')为"展开"所以我可以像上面的例子一样写出来:


    IF :new.pk_column_name  ....

而不是......


    IF :new.id  ....

我尝试过很多东西:


    :new."pk_column_name"
    :new.&pk_column_name
    :new.:pk_column_name

有人可以帮助我吗?

谢谢,最诚挚的问候,

1 个答案:

答案 0 :(得分:0)

我明白了!


    ... IF :new.' || pk_column_name || ' IS NULL THEN ...


    ... INTO :new.' || pk_column_name || '
    FROM DUAL;