postgresql - 如何在 for 循环中处理 SELECT 的两个选项
问题描述
我在函数中有以下代码...
CREATE FUNCTION blah(
p_task_id INTEGER
)
RETURNS BOOLEAN AS $$
DECLARE
v_name CHAR(30);
v_age INTEGER;
v_select_string TEXT;
BEGIN
...
IF v_name = '' AND v_age = 0 THEN
v_select_string = 'SELECT * FROM my_table
WHERE id = p_id';
ELSE
v_select_string = 'SELECT * FROM my_table
WHERE name = ' || v_name || '
AND age = ' || v_age || '
AND id = p_id';
END IF;
FOR s1 IN (
v_select_string
)
LOOP
...
END LOOP;
......但我得到这个......
ERROR: syntax error at or near "v_select_string"
有没有办法解决这个问题?循环的内容很大,所以我宁愿不要在循环中复制循环IF / ELSE
解决方案
您不能只将字符串传递给 FOR 循环。您需要使用关键字将其作为动态 SQL运行。execute
FOR s1 IN EXECUTE v_select_string
LOOP
...
END LOOP;
推荐阅读
- vue.js - Vue JS Checkbox 全选 使用嵌套数组
- sql - 设置一个局部变量并在整个查询批处理中使用?
- python - 如何使用 pymongo 在文档 db 中插入/更新复杂的 dict 列表?
- nativescript - 如何在 iOS 中使用 NativeScript camera-plus 制作全屏相机?
- java - iText PDF 在 android 中显示马拉地语、印地语和不同语言
- r - 如何在R中的Spark数据框连接中用变量表示列名?
- c# - 当我想保存我的表时,db.savechanges() 会给出一个错误,因为该数据之前已被使用过
- ios - 向 Heathkit 提示授权请求失败
- java - 如何使用 Java 代码登录 Google 表格?
- html - 为什么我的锚文本堆叠在一起,我该如何解决?