我在尝试使存储过程正常工作时遇到了问题。
这是我的问题:
我有一个名为a
的列表,在此列中有电话号码。
如果号码以0039
,1
,8
或3
开头,我必须添加0
(如果不是,则必须保留原样)将新号码存储在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;
错误是:
错误:列“a”不存在 第1行:选择子字符串(a为0表示2)!='00'和...
答案 0 :(得分:0)
您的代码有两个错误:
a
,就像它是一个(不存在的)plpgsql变量一样。你也必须循环。您的方法根本不起作用。AND
在OR
之前绑定。但最重要的是,您不需要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
。