我正在使用动态sql和pl / sql,我的想法是至少为小型表行创建通用打印过程。为了使程序起作用,我需要找到某些列的值,所以我涉及动态sql。查找数据的函数具有以下代码:
function find_value(p_table_name string, p_id_name string, p_id string, p_field string)
return varchar2
as
rresult varchar2(50) := '';
query_str varchar2(200);
type cur_typ is ref cursor;
c cur_typ;
inv_num number;
begin
query_str := 'select '||p_field||' from '||p_table_name||' where '||p_id_name||' = '||p_id;
open c for query_str using inv_num;
loop
fetch c into rresult;
exit when c%notfound;
end loop;
close c;
return to_char(rresult);
end;
我得到的错误是:
从命令行中的第2行开始出错 - BEGIN --PROBNI_RED:= JOB_PKG.GET_EMPLOYEE(100);
PPRINT.PRINT(' EMPLOYEES'' EMPLOYEE_ID' 100);结束;错误报告 - ORA-01006:绑定变量不存在ORA-06512:at" ORA01.PPRINT", 第14行ORA-06512:at" ORA01.PPRINT",第44行ORA-06512:第3行 01006. 00000 - "绑定变量不存在" *原因:
*操作:
我今天第一次使用动态SQL,所以我猜它可能很小。
答案 0 :(得分:4)
错误意味着您的background-image: url(/* URL */);
background-position: 50%;
background-size: auto 100%;
background-repeat: repeat-x;
条款告诉它使用using
但它无处可用。例如,这会给出您看到的错误:
inv_num
您可以使用带有绑定变量的declare
some_var varchar2(1) := 'X';
begin
execute immediate 'select * from dual' using some_var;
end;
ORA-01006: bind variable does not exist
ORA-06512: at line 4
子句,如下所示:
using
或者你可以传递一个字面值:
declare
some_var varchar2(1) := 'X';
begin
execute immediate 'select * from dual where dummy = :b1' using some_var;
end;
(这个演示实际上没有做任何事情,因为它不处理动态查询的输出 - 它只是为了演示语法。)
请注意,动态SQL中begin
execute immediate 'select * from dual where dummy = :b1' using 'X';
end;
之类的绑定只是位置占位符,并且名称与调用PL / SQL中的任何变量或参数无关,因此将它们命名为(例如:b1
即使语法完全有效,也会引起混淆。
答案 1 :(得分:2)
尝试在动态查询中使用变量:p_id
query_str := 'select '||p_field||' from '||p_table_name||' where '||p_id_name||' = :p_id';
如果您想使用using inv_num
答案 2 :(得分:0)
我删除了
using inv_num;
它开始起作用了。