我试图完成这项工作,并且我在没有两个artikli_racun更新的情况下对其进行了测试,但它确实有效。因此,如果我只有cena(价格)它将起作用,它将需要2美元,但显然在这里它说的是" artikel"不存在,我不知道该怎么做。这需要1美元,我需要一个解决方案,为什么它需要这个变量......
NAPAKA: stolpec "artikel" ne obstaja
KONTEKST: SQL statement "UPDATE artikli_racun SET id_artikla=(SELECT id FROM artikli WHERE ime=$1 ) WHERE artikel= $1 "
PL/pgSQL function "racun123" line 6 at SQL statement
CREATE OR REPLACE FUNCTION racun123(integer,varchar) RETURNS
BOOLEAN AS
$$
BEGIN
IF (SELECT zaloga FROM artikli WHERE ime=$2)>0 THEN
INSERT INTO racun1(id,artikel) VALUES($1,$2);
UPDATE racun1 SET cena=(SELECT prodajna_cena FROM artikli WHERE
ime=$2) WHERE artikel=$2;
UPDATE artikli_racun SET id_artikla=(SELECT id FROM artikli WHERE
ime=$2) WHERE artikel=$2;
UPDATE artikli_racun SET id_racuna=(SELECT id FROM racun1 WHERE
ime=$2) WHERE artikel=$2;
UPDATE artikli set zaloga=zaloga-1 WHERE ime=$2;
RETURN true;
ELSE RETURN false;
END IF;
END;
$$LANGUAGE plpgsql;
答案 0 :(得分:0)
根据错误消息表artikli_racun
缺少列artikel
。
顺便说一句,有多个更新语句在同一个表上运行 - 它们可以合并为一个。
答案 1 :(得分:0)
错误消息中的位置参数 $1
是函数正文中位置参数$1
和$2
的完全独立 。同样的符号。
如果在函数中用命名参数替换$ 1和$ 2,您仍会在错误消息中看到$1
和$2
,它们在预准备语句的上下文中使用:PL / pgSQL在内部执行每个语句作为预准备语句并缓存查询计划。
CREATE OR REPLACE FUNCTION racun123(_param1 integer, _param2 varchar)
RETURNS ...
...
UPDATE artikli_racun
SET id_artikla = (SELECT id FROM artikli WHERE ime = _param2)
WHERE artikel = _param2;
...
错误消息仍然会说:
SQL statement "UPDATE artikli_racun
SET id_artikla=(SELECT id FROM artikli WHERE ime=$1 ) WHERE artikel= $1
除此之外:您的功能可以改进,但最佳解决方案取决于您的实际表格定义和要求。