Oracle 将表名传递给光标
可以将表名从一个游标传递到另一个游标。请让我走另一条路Oracle 将表名传递给光标,oracle,plsql,Oracle,Plsql,可以将表名从一个游标传递到另一个游标。请让我走另一条路 CURSOR R IS SELECT TABLE_NAME FROM RESOURCE ; CURSOR S(TAB VARCHAR2) IS SELECT username from TAB where sid=1291; 是否有其他方法将表传递给游标。您不能将动态sql与游标一起使用-您可能可以使用参考游标来执行所需操作。请参见示例您不能将动态sql与光标一起使用——您可以使用参考光标执行您想要的操作。例如,请参见要展开Jac
CURSOR R IS SELECT TABLE_NAME FROM RESOURCE ;
CURSOR S(TAB VARCHAR2) IS SELECT username from TAB where sid=1291;
是否有其他方法将表传递给游标。您不能将动态sql与
游标一起使用
-您可能可以使用参考游标来执行所需操作。请参见示例您不能将动态sql与光标一起使用
——您可以使用参考光标
执行您想要的操作。例如,请参见要展开JackPDouglas的回答,您不能将参数名称用作光标中的[表]名称。必须在REF游标中使用动态sql
开始示例
create table test1(sid number, username varchar2(50));
insert into test1(sid, username) values(123,'abc');
insert into test1(sid, username) values(123,'ddd');
insert into test1(sid, username) values(222,'abc');
commit;
/
declare
cur sys_refcursor ;
sid number ;
uName varchar2(50) ;
begin
sid := 123;
dynaQuery('test1',sid, cur);
LOOP
FETCH cur INTO uName;
DBMS_OUTPUT.put_line(uName);
EXIT WHEN cur%NOTFOUND;
-- process row here
END LOOP;
CLOSE CUR;
end ;
输出:
SELECT USERNAME FROM test1 WHERE sid= :id
abc
ddd
abc
ddd
ddd
编辑:添加了@JackPDouglas正确建议的关闭CUR要扩展JackPDouglas的答案,您不能将参数名称用作光标中的[表]名称。必须在REF游标中使用动态sql
开始示例
create table test1(sid number, username varchar2(50));
insert into test1(sid, username) values(123,'abc');
insert into test1(sid, username) values(123,'ddd');
insert into test1(sid, username) values(222,'abc');
commit;
/
declare
cur sys_refcursor ;
sid number ;
uName varchar2(50) ;
begin
sid := 123;
dynaQuery('test1',sid, cur);
LOOP
FETCH cur INTO uName;
DBMS_OUTPUT.put_line(uName);
EXIT WHEN cur%NOTFOUND;
-- process row here
END LOOP;
CLOSE CUR;
end ;
输出:
SELECT USERNAME FROM test1 WHERE sid= :id
abc
ddd
abc
ddd
ddd
编辑:添加了@JackPDouglas正确建议的关闭CUR您不应该使用该光标还是不应该使用该光标