我是PL / pgSQL的新手,并且不知道如何在SELECT
语句中引用变量。
在以下函数中,SELECT INTO
始终返回NULL
:
$body$
DECLARE
r RECORD;
c CURSOR FOR select name from t_people;
nb_bills integer;
BEGIN
OPEN c;
LOOP
FETCH c INTO r;
EXIT WHEN NOT FOUND;
RAISE NOTICE 'name found: %', r.name;
SELECT count(bill_id) INTO nb_bills from t_bills where name = r.name;
END LOOP;
END;
$body$
RAISE NOTICE
允许我验证我的CURSOR
运行正常:名称已正确检索,但由于某些原因我仍然不知道,未正确传递给SELECT INTO
语句。< / p>
出于调试目的,我尝试用SELECT INTO
替换常量值中的变量并且它有效:
SELECT count( bill_id) INTO nb_bills from t_bills where name = 'joe';
我不知道如何在r.name
声明中引用SELECT INTO
。
我尝试了r.name
,我尝试创建另一个包含引号的变量,它总是返回NULL
我被卡住了。如果有人知道......
答案 0 :(得分:0)
SELECT INTO
总是返回NULL
未正确传递给
SELECT INTO
语句。
总是返回NULL。
这一切都没有意义。
在PL / pgSQL中, SELECT
语句本身不会 返回 。您必须将结果分配给变量,或使用其中一个可用的RETURN
变体显式返回结果。
SELECT INTO
仅 用于变量赋值,也不返回任何内容。不要与普通SQL中的SELECT INTO
混淆 - 通常不鼓励:
我们不清楚你的例子应该返回什么。您没有透露函数的返回类型,并且您实际上没有返回任何内容。
首先阅读手册中的Returning From a Function章节。 以下是一些相关答案和示例:
可能存在与参数名称的命名冲突。除非您发布完整的函数定义,否则我们无法判断。
也就是说,只有在极少数情况下才需要显式游标。通常,FOR
循环的隐式游标更易于处理且更便宜:
大多数时候你根本不需要任何游标或循环。基于集合的解决方案通常更简单,更快捷。