【问题标题】:Trigger doesn't work and doesn't show any errors触发器不起作用并且不显示任何错误
【发布时间】:2021-12-19 12:03:07
【问题描述】:

我正在尝试创建一个触发器,将名称和中间名缩短为首字母。 这就是我所拥有的:

CREATE OR REPLACE FUNCTION myfunc() RETURNS TRIGGER AS $$
DECLARE nm VARCHAR(50);
DECLARE mdnm VARCHAR(50);
BEGIN
   nm = LEFT(NEW.name, 1);
   mdnm = LEFT(NEW.middle_name, 1);
   SET NEW.name = nm;
   SET NEW.middle_name = mdnm;
   RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER table_before_insert BEFORE INSERT OR UPDATE ON table1
FOR EACH ROW EXECUTE PROCEDURE myfunc();

但由于某些原因它不起作用,它会是什么?

【问题讨论】:

    标签: postgresql triggers


    【解决方案1】:

    由于documented in the manual 变量分配有:==。但不是使用 SET 命令 - 它会更改配置属性。您也不需要为每个变量使用单独的 DECLARE 块:

    所以你的触发函数应该是这样的:

    CREATE OR REPLACE FUNCTION myfunc() RETURNS TRIGGER AS $$
    DECLARE 
       nm VARCHAR(50);
       mdnm VARCHAR(50);
    BEGIN
       nm := LEFT(NEW.name, 1);
       mdnm := LEFT(NEW.middle_name, 1);
       NEW.name := nm;
       NEW.middle_name := mdnm;
       RETURN NEW;
    END;
    $$ LANGUAGE plpgsql;
    

    你甚至不需要变量:

    CREATE OR REPLACE FUNCTION myfunc() RETURNS TRIGGER AS $$
    BEGIN
       NEW.name := LEFT(NEW.name, 1);
       NEW.middle_name := LEFT(NEW.middle_name, 1);
       RETURN NEW;
    END;
    $$ LANGUAGE plpgsql;
    

    【讨论】:

      猜你喜欢
      • 2019-12-04
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多