![](/img/trans.png)
[英]constraint c for table t does not exist on PostgreSQL even though it's there
[英]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.