【发布时间】:2015-03-31 15:51:08
【问题描述】:
我在尝试使我的存储过程工作时遇到问题。
这是我的问题:
我有一个表,其中有一个名为a 的列,此列中有电话号码。
如果号码以1、8、3 或0 开头,我必须添加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;
错误是:
错误:“a”列不存在
ROW 1: SELECT substring(a from 0 for 2)!='00' AND ...
【问题讨论】:
-
乍一看,您的布尔逻辑看起来不正常。你应该在你的想法周围加上括号。喜欢
(sub1 AND sub2) OR (sub3 AND sub4) -
您的错误来自您没有从任何地方声明或拉取
a的事实。我认为您需要将 if 语句更改为select case。 -
在您的
if语句中,您只能引用变量或参数。但是您既没有名为a的变量,也没有名为a的参数
标签: sql postgresql stored-procedures sql-update plpgsql