簡體   English   中英

sql在循環中多次調用函數。 Postgres 8.3

[英]sql call function multiple times in a loop. postgres 8.3

我有一個以“key”變量作為參數的函數。

我想為一系列鍵值調用此函數。

我試過這個,沒有用...

BEGIN
for i IN 773..775 LOOP
  test_count(i);
end LOOP;
end;

SQL 錯誤:錯誤:“for”第 2 行或附近的語法錯誤:for i IN 773..775 LOOP

@Mihai 已經解釋過您不能使用DO在函數或匿名代碼塊之外運行過程元素。

您的語法仍然會失敗,因為您無法在不處理返回值的情況下在任何地方調用函數。 如果您想丟棄可能的返回值,請在這樣的函數中使用PERFORM (適用於 PostgreSQL 8.3):

CREATE OR REPLACE FUNCTION foo()
  RETURNS void LANGUAGE plpgsql AS
$BODY$
BEGIN

FOR i IN 773 .. 775
LOOP
   PERFORM test_count(i);
END LOOP;

END;
$BODY$;

PostgreSQL 8.3 無法運行匿名過程/函數或在過程/函數之外創建變量。

9.0版開始,添加了DO構造作為對匿名過程的支持。

您應該在一個函數內運行您的代碼。 因為您收到的錯誤消息指出FOR是全局上下文中的意外關鍵字。

為您的密鑰使用記錄類型

DO $BODY$
DECLARE tmp_row record;
BEGIN

  FOR tmp_row IN (SELECT key from my_keys_table)
   LOOP
     PERFORM test_function(tmp_row.key);
  END LOOP;

END;
$BODY$;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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