Plsql PL/SQL过程,游标,PLS-00103错误
拜托,这个程序有什么不好。错误是8,9行中的PLS-00103Plsql PL/SQL过程,游标,PLS-00103错误,plsql,cursor,procedure,Plsql,Cursor,Procedure,拜托,这个程序有什么不好。错误是8,9行中的PLS-00103 create or replace PROCEDURE test_one(l_f_name VARCHAR2,l_l_name VARCHAR2) IS CURSOR c1(f_name VARCHAR2,l_name VARCHAR2) IS SELECT lastname,firstname FROM CUSTOMER; v_complex c1%ROWTYPE; f_name = l_f_n
create or replace PROCEDURE test_one(l_f_name VARCHAR2,l_l_name VARCHAR2)
IS
CURSOR c1(f_name VARCHAR2,l_name VARCHAR2) IS
SELECT lastname,firstname
FROM CUSTOMER;
v_complex c1%ROWTYPE;
f_name = l_f_name;
l_name = l_l_name;
BEGIN
open c1(f_name,l_name);
fetch c1 into v_complex;
dbms_output.put_line(v_complex.lastname|| ' ' ||v_complex.firstname);
exit when c1%notfound;
close c1;
end;
PL/SQL中的赋值运算符是
:=
。此外,局部变量声明中缺少类型(由于@Nitish)。因此,有效代码是:
f_name VARCHAR2(50) := l_f_name;
l_name VARCHAR2(50) := l_l_name;
在PLSQL中避免使用这种显式游标 应该是:
FOR v_complex IN c1(l_f_name, l_l_name) LOOP
dbms_output.put_line(v_complex.lastname|| ' ' ||v_complex.firstname);
END LOOP;
在这种情况下,您根本不需要声明v_complex、f_name或l_name。此外,光标似乎并未实际使用这些变量。你想干什么
这种隐式游标还避免了显式的OPEN和CLOSE语句的需要,这样就永远不会出现游标泄漏
至于实际问题,如果初始化是固定的,然后您的DBMS\u输出应该在%NOTFOUND检查之后。顺便说一句。从文档:
EXIT语句退出循环并将控制转移到循环的末尾。
但是在您的代码中没有循环。还有其他错误,如f\u name
和l\u name
没有类型的声明。