oracle - ORA-01008: 并非所有变量都绑定 - “并非所有变量都绑定”
问题描述
这是我的 plsql 块,动态 SQL。我找不到为什么会出现错误“没有 ORA-01008:并非所有变量都绑定 ORA-06512:在第 23 行”的原因。
我在 EXECUTE IMMEDIATE 语句中找不到错误。
DECLARE
form_name VARCHAR2(225) := 'MUST AS';
ad_no VARCHAR2(225) := :ad_no;
sql_stmt VARCHAR2(4000);
sql_output VARCHAR2(4000);
db_table VARCHAR(225) := inp_reminder_pkg.form_db_table(form_name);
col_id VARCHAR(225) := inp_reminder_pkg.get_col_id(form_name);
BEGIN
sql_stmt := '
SELECT :1
FROM @tableName
WHERE advno = :2
AND created = ( SELECT MAX(CREATED)
FROM @tableName
WHERE advno = :2 )'
;
sql_stmt := replace(sql_stmt, '@tableName', db_table);
EXECUTE IMMEDIATE sql_stmt
INTO sql_output
USING col_id, ad_no;
dbms_output.put_line(sql_output);
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line('no-data');
END;
让我知道我错过了什么。感谢您
解决方案
有三个绑定变量(即使两个具有相同的名称),您需要在execute immediate
语句中为它们发送 3 个参数。
请注意,您可能并不意味着将列名作为绑定变量输入,如果您想选择变量列,则必须动态执行此操作。
推荐阅读
- reactjs - React backgroundImage 无法始终如一地工作
- javascript - 在打字稿中查找泛型函数的类型参数
- javascript - 如何在 JavaScript 中从数组制作键:数组映射
- javascript - 使用组时,JavaScript 替换仅在正则表达式完全匹配时执行
- linux-kernel - tun0: 未找到设备
- c++ - C++ 最佳实践:通过 const 引用或转发引用(又名通用引用)将仅使用(未存储)的 lambda 参数传递给函数
- jquery - 使用 jquery 更改子 div 上的类
- .htaccess - 通过 Accept-Language 标头重定向并保留 URL 路径
- f# - 为什么不满足条件时调用bot函数?
- kubectl - Ingress DNS 在容器外不起作用