使用替换变量运行游标



我正在尝试运行一个带有替换变量的游标。我尝试输入Pa,它抛出以下错误:

标识符PA必须声明为

DECLARE
CURSOR c_emp(p_cad varchar2) IS SELECT * FROM employee
WHERE fname LIKE ''||p_cad||'%';  

v_fname employee.fname%TYPE:=&Idemp;  --substitution variable 
v_count INT:=0;
BEGIN
FOR r IN c_emp(v_fname)
LOOP
dbms_output.put_line('Emp Id: '||r.emp_id);
dbms_output.put_line('FName: '||r.fname);
dbms_output.put_line(' ');
v_count:= v_count+1;
END LOOP;
dbms_output.put_line('------------------');
dbms_output.put_line('Total de Empleados: '||v_count);
END;

替换变量的前缀是&,而不是$,因此您的代码应该是:

v_fname employee.fname%TYPE:=&Idemp;

但是,如果您想要一个绑定变量,那么它应该以:为前缀

v_fname employee.fname%TYPE:=:Idemp;

如果在提示时输入Pa,则需要将替换引用用单引号括起来,以便在解析PL/SQL块时使其成为字符串文字:

v_fname employee.fname%TYPE:='&Idemp';

然后将其解析为... :='Pa';

正如您所拥有的,如果没有引号,它将被解析为... :=Pa,并试图将Pa解释为(非引号(标识符;因此你会犯错误。


在PL/SQL中使用替换变量有点奇怪,尽管它适用于匿名块。替换由客户端(例如SQL*Plus(完成,然后将具有替换值的PL/SQL传递给数据库引擎以进行解析和执行。但是,使用PL/SQL做你正在做的事情有点奇怪,所以我认为这是一个人为的练习。

最新更新