代码之家  ›  专栏  ›  技术社区  ›  Daniel Luyo

火鸟常数

  •  4
  • Daniel Luyo  · 技术社区  · 16 年前

    我想定义一个常数,比如:

    • 插入常数=2
    • 删除常数=3

    然后在触发器中使用它,例如:

    CREATE TRIGGER AD_PRJ_PROJECTS FOR PRJ_PROJECT
    ACTIVE AFTER DELETE
    POSITION 1
    AS
    BEGIN
       EXECUTE PROCEDURE SP_ADD_HISTORY 'PRJ_PROJECT', DELETE_CONSTANT;
    END;
    
    4 回复  |  直到 11 年前
        1
  •  2
  •   msrd0 Gordon Linoff    11 年前

    SET GENERATOR DELETE_CONSTANT TO 3;
    
    ...
    
    EXECUTE PROCEDURE SP_ADD_HISTORY 'PRJ_PROJECT', GEN_ID(DELETE_CONSTANT, 0);
    

    更新 :是的,使用发电机进行此操作是危险的,因为发电机可以更换。 Grants access on generators .

        2
  •  2
  •   msrd0 Gordon Linoff    11 年前

    我可以为用户定义的函数创建自己的DLL,并为每个常量创建一个函数。

    但您可以创建一个“局部常量”,使代码更具可读性:

    CREATE TRIGGER AD_PRJ_PROJECTS FOR PRJ_PROJECT
    ACTIVE AFTER DELETE
    POSITION 1
    AS
      DECLARE VARIABLE DELETE_CONSTANT INTEGER;
    BEGIN
       DELETE_CONSTANT = 1;
       EXECUTE PROCEDURE SP_ADD_HISTORY 'PRJ_PROJECT', DELETE_CONSTANT;
    END;
    
        3
  •  0
  •   alvaroc    12 年前

    使用带有触发器的单行表,以防止插入和删除。必须从中读取肯定不会使代码更清晰,但它有助于实现这些“常量”。还可以从除sysdba之外的所有人删除写入权限

        4
  •  0
  •   msrd0 Gordon Linoff    11 年前

    您可以实现一些简单的脚本预处理器,将常量转换为值。。

    triggers.presql

    @DELETE_CONSTANT = 1
    CREATE TRIGGER AD_PRJ_PROJECTS FOR PRJ_PROJECT
    ACTIVE AFTER DELETE
    POSITION 1
    BEGIN
       EXECUTE PROCEDURE SP_ADD_HISTORY 'PRJ_PROJECT', DELETE_CONSTANT;
    END;
    

    触发器.sql

    CREATE TRIGGER AD_PRJ_PROJECTS FOR PRJ_PROJECT
    ACTIVE AFTER DELETE
    POSITION 1
    BEGIN
       EXECUTE PROCEDURE SP_ADD_HISTORY 'PRJ_PROJECT', 1;
    END;