没有问题呀: SQL> create or replace package comm_types 2 AS 3 TYPE COMM_CURSOR IS REF CURSOR; 4 END comm_types; 5 /Package created.Elapsed: 00:00:01.73 SQL> create or replace procedure getfhtjbytybm 2 (P_CURSOR OUT COMM_TYPES.COMM_CURSOR, 3 T_NAME IN varchar2 4 ) 5 AS 6 7 BEGIN 8 9 open P_CURSOR for 10 'select * from' || t_name; 11 12 END getFhtjByTybm; 13 /Procedure created.Elapsed: 00:00:01.12
我用的是8.0.5版,有问题吗? SQL> create or replace procedure getfhtjbytybm 2 (P_CURSOR OUT COMM_TYPES.COMM_CURSOR, 3 T_NAME IN varchar2 4 ) 5 AS 6 7 BEGIN 8 9 open P_CURSOR for 10 'select * from' || t_name; 11 12 END getFhtjByTybm; 13 /警告:已创建的过程出现编译错误。
又是版本的问题。8.0.5不支持ref cursor类型的游标
但是包没有抱错亚: SQL> create or replace package comm_types 2 AS 3 TYPE COMM_CURSOR IS REF CURSOR; 4 END comm_types; 5 /程序包已创建。
805不支持open for 语句。也不支持本地动态sql(即execute immediate)。 调用dbms_sql包来写动态sql吧
'select * from' || t_name;
如果还有错吧原码和错误信息贴出来。
pls-00103:出现符号"select * from"在需要下列之一时;
select
create or replace procedure getfhtjbytybm
(P_CURSOR OUT COMM_TYPES.COMM_CURSOR,
T_NAME IN varchar2
)
AS
v_cursor p_cursor;
BEGIN
open v_CURSOR for
'select * from' || t_name; END getFhtjByTybm;
pls-00103:出现符号"select * from"在需要下列之一时;
select
SQL> create or replace package comm_types
2 AS
3 TYPE COMM_CURSOR IS REF CURSOR;
4 END comm_types;
5 /Package created.Elapsed: 00:00:01.73
SQL> create or replace procedure getfhtjbytybm
2 (P_CURSOR OUT COMM_TYPES.COMM_CURSOR,
3 T_NAME IN varchar2
4 )
5 AS
6
7 BEGIN
8
9 open P_CURSOR for
10 'select * from' || t_name;
11
12 END getFhtjByTybm;
13 /Procedure created.Elapsed: 00:00:01.12
http://www.csdn.net/expert/topic/1001/1001361.xml?temp=.3573877
SQL> create or replace procedure getfhtjbytybm
2 (P_CURSOR OUT COMM_TYPES.COMM_CURSOR,
3 T_NAME IN varchar2
4 )
5 AS
6
7 BEGIN
8
9 open P_CURSOR for
10 'select * from' || t_name;
11
12 END getFhtjByTybm;
13 /警告:已创建的过程出现编译错误。
SQL> create or replace package comm_types
2 AS
3 TYPE COMM_CURSOR IS REF CURSOR;
4 END comm_types;
5 /程序包已创建。
调用dbms_sql包来写动态sql吧