簡體   English   中英

plpgsql:如何在sql語句中引用變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM