简单更新集postgres存储过程
Simple update set postgres stored procedure
我在尝试使我的存储过程正常工作时遇到问题。
这是我的问题:
我有一个 table,其中有一列叫做 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;
错误是:
ERROR: the column "a" does not exist
ROW 1: SELECT substring(a from 0 for 2)!='00' AND ...
您的代码有两个错误:
- 您不能像引用列
a
那样引用它是一个(不存在的)plpgsql 变量。你也必须循环。你的方法根本行不通。
- 你 operator precedence 错了。
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
.
行发生了变化
我在尝试使我的存储过程正常工作时遇到问题。
这是我的问题:
我有一个 table,其中有一列叫做 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;
错误是:
ERROR: the column "a" does not exist
ROW 1: SELECT substring(a from 0 for 2)!='00' AND ...
您的代码有两个错误:
- 您不能像引用列
a
那样引用它是一个(不存在的)plpgsql 变量。你也必须循环。你的方法根本行不通。 - 你 operator precedence 错了。
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
.