简单更新集postgres存储过程

Simple update set postgres stored procedure

我在尝试使我的存储过程正常工作时遇到问题。

这是我的问题:
我有一个 table,其中有一列叫做 a,在这一列中有电话号码。

如果数字以 1830 开头,我必须添加 0039(如果不是,则保留原样) 并将新数字存储在列 b.

这是我的代码:

    CREATE OR REPLACE FUNCTION upg_table() RETURNS void AS $$ 
BEGIN
IF (substring(a from 0 for 2)!='00') 
  AND (substring( a from 0 for 1)='3') 
  OR (substring(a from 0 for 1)='0') 
  OR (substring(a from 0 for 1)='1') 
  OR ( substring(a from 0 for 1)='8') 
THEN 
UPDATE cdr 
SET
     b = '0039'||a;
ELSE
UPDATE cdr 
SET
  b = a;
END IF;
END; 
$$ LANGUAGE plpgsql;

错误是:

ERROR: the column "a" does not exist
ROW 1: SELECT substring(a from 0 for 2)!='00' AND ...

您的代码有两个错误:

  • 您不能像引用列 a 那样引用它是一个(不存在的)plpgsql 变量。你也必须循环。你的方法根本行不通
  • operator precedence 错了。 ANDOR.
  • 之前绑定

但最重要的是,您不需要 plpgsql 函数。一个普通的 UPDATE 就可以完成这项工作:

UPDATE cdr
SET    b = CASE WHEN left(a, 1) IN ('0', '1', '3', '8')
                 AND left(a, 2) <> '00'
           THEN '0039' || a ELSE a END;

这会更新 所有 行中的 b,但只有一些 a.

行发生了变化