使用 EXECUTE 执行查询时如何在 postgres 中打印多行值?
How to print multiple row values in postgres when query executed using EXECUTE?
我有以下程序,我的第二个 select 查询 returns 多条记录,
我应该如何打印所有值.. 目前它只打印第一个值。
你能推荐一下吗?
例如。实际输出:
123
890
4599
当前输出:
123
DO $$
<<script>>
DECLARE
student_rec RECORD;
sqlquery text;
v_nk RECORD;
BEGIN
FOR student_rec IN
select nk from course_table;
-- open loop for cursor above
LOOP
sqlquery := 'SELECT col FROM section where rec_nk = ' || '''' ||student_rec.nk ||'''' ;
EXECUTE sqlquery into v_nk;
raise notice 'Value: %', v_nk;
END LOOP;
EXCEPTION when others then
raise notice 'Script execution failed.'
'Transaction was rolled back.';
raise notice '% %', SQLERRM, SQLSTATE;
END script $$;
您已经在循环查询结果:
[ <<label>> ]
FOR target IN query LOOP
statements
END LOOP [ label ];
还有FOR-IN-EXECUTE
:
[ <<label>> ]
FOR target IN EXECUTE text_expression [ USING expression [, ... ] ] LOOP
statements
END LOOP [ label ];
见documentation on Looping Through Query Results。
你的情况是:
FOR v_nk IN EXECUTE sqlquery LOOP
raise notice 'Value: %', v_nk;
END LOOP;
即使您已将 v_nk 声明为 RECORD,当在 PL/pgSQL 的上下文中使用时,select 确实会 select 将值转换为标量值。参见:https://www.postgresql.org/docs/9.6/static/sql-selectinto.html
如果你想打印所有带有raise notice的记录你可以这样循环:
sqlquery := 'SELECT col FROM section where rec_nk = ' || '''' ||student_rec.nk ||'''' ;
for v_nk in EXECUTE sqlquery
loop
raise notice 'Value: %', v_nk;
end loop;
我有以下程序,我的第二个 select 查询 returns 多条记录, 我应该如何打印所有值.. 目前它只打印第一个值。 你能推荐一下吗?
例如。实际输出:
123
890
4599
当前输出: 123
DO $$
<<script>>
DECLARE
student_rec RECORD;
sqlquery text;
v_nk RECORD;
BEGIN
FOR student_rec IN
select nk from course_table;
-- open loop for cursor above
LOOP
sqlquery := 'SELECT col FROM section where rec_nk = ' || '''' ||student_rec.nk ||'''' ;
EXECUTE sqlquery into v_nk;
raise notice 'Value: %', v_nk;
END LOOP;
EXCEPTION when others then
raise notice 'Script execution failed.'
'Transaction was rolled back.';
raise notice '% %', SQLERRM, SQLSTATE;
END script $$;
您已经在循环查询结果:
[ <<label>> ]
FOR target IN query LOOP
statements
END LOOP [ label ];
还有FOR-IN-EXECUTE
:
[ <<label>> ]
FOR target IN EXECUTE text_expression [ USING expression [, ... ] ] LOOP
statements
END LOOP [ label ];
见documentation on Looping Through Query Results。
你的情况是:
FOR v_nk IN EXECUTE sqlquery LOOP
raise notice 'Value: %', v_nk;
END LOOP;
即使您已将 v_nk 声明为 RECORD,当在 PL/pgSQL 的上下文中使用时,select 确实会 select 将值转换为标量值。参见:https://www.postgresql.org/docs/9.6/static/sql-selectinto.html
如果你想打印所有带有raise notice的记录你可以这样循环:
sqlquery := 'SELECT col FROM section where rec_nk = ' || '''' ||student_rec.nk ||'''' ;
for v_nk in EXECUTE sqlquery
loop
raise notice 'Value: %', v_nk;
end loop;