簡體   English   中英

表變量不存在,即使它在 PostgreSQL 中明確定義

[英]Table variable doesn't exist even though it clearly defined in PostgreSQL

我試圖從表變量創建循環。

do
$$
DECLARE 
    modified IDType;
BEGIN
    INSERT into modified (id) 
    SELECT i.id FROM item i WHERE i.id in ('55D6F516-7D8F-4DF3-A4E5-1E3F505837A1', 'FFE2A4D3-267C-465F-B4B4-C7BB2582F1BC');

    for p in select id from modified
    loop    
        raise notice (p.id);
    end loop;
end; 
$$ LANGUAGE plpgsql;

問題是有一個錯誤說:

SQL Error [42P01]: ERROR: relation "modified" does not exist
  Where: PL/pgSQL function inline_code_block line 5 at SQL statement

我所期望的是該變量可用於循環並正常運行。

這是您可以嘗試的完整查詢: http://sqlfiddle.com/#!17/9caba/3我在 DBEAVER 應用程序中進行了查詢,它會有一些不同的錯誤消息。 我建議您可以在 sqlfiddle 之外進行試驗。

Postgres 中沒有“表變量”之類的東西。 您可以定義具有表類型但完全不同的記錄

即使idtype是表的名稱或記錄類型,它仍然包含單個值(如果是記錄,它將是具有多個字段的單個記錄)

為什么您希望標量變量在循環中可用? 你在找一個數組嗎?

要遍歷數組,請使用foreach

SELECT 似乎也很奇怪。 您可以直接為數組賦值。

raise notice的參數需要是一個字符串。 如果要“打印”變量,則需要在字符串中使用占位符

所以也許你正在尋找:

do
$$
DECLARE 
    modified idtype[];
    id idtype;
BEGIN
    modified := array['55D6F516-7D8F-4DF3-A4E5-1E3F505837A1', 'FFE2A4D3-267C-465F-B4B4-C7BB2582F1BC'];

    foreach id in array modified
    loop    
        raise notice '%', id;
    end loop;
end; 
$$ LANGUAGE plpgsql;

暫無
暫無

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

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