[英]plpgsql : how to reference variable in sql statement
我是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
語句。
出於調試目的,我嘗試將SELECT INTO
的變量替換為常數,並且該變量有效:
SELECT count( bill_id) INTO nb_bills from t_bills where name = 'joe';
我不知道如何在SELECT INTO
語句中引用r.name
。 我嘗試了r.name
,我試圖創建另一個包含引號的變量,它總是返回NULL
。
我被卡住了。 如果有人知道......
SELECT INTO
始終返回NULL
沒有正確傳遞給
SELECT INTO
語句。
它總是返回NULL。
這些都沒有意義。
SELECT
語句本身在PL / pgSQL中不返回任何內容。 您必須將結果分配給變量,或者使用可用的RETURN
變體之一顯式返回結果。
SELECT INTO
僅用於變量分配,也不返回任何內容。 不要與純SQL中的SELECT INTO
混淆-通常不建議這樣做:
目前尚不清楚您的示例應該返回什么。 您沒有公開該函數的返回類型,並且實際上沒有返回任何內容。
首先閱讀手冊中的“ 從函數返回”一章。 以下是一些與示例相關的答案:
並且可能存在與參數名稱的命名沖突。 除非您發布完整的函數定義,否則我們無法判斷。
也就是說,僅在極少數情況下才需要顯式游標。 通常, FOR
循環的隱式游標更易於處理且更便宜:
在大多數情況下,您甚至根本不需要任何游標或循環。 基於集合的解決方案通常更簡單,更快。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.