CREATE OR REPLACE PROCEDURE test
(
v_a IN NUMBER DEFAULT NULL ,
cv_1 OUT SYS_REFCURSOR,
cv_2 OUT SYS_REFCURSOR
)
as
begin
open cv_1 for select 'aa' from dual;if(v_a is not null)then
begin
open cv_2 for select 'bb' from dual;
end;
endif;
end如果v_a 是空的话,外面填充dateset时会报"未执行语句句柄" 错误,
但是我就是不想open cv_2 for ,只想dateset有一个table;外面对table.count 做一些业务判断。不想改
请问如何处理。
(
v_a IN NUMBER DEFAULT NULL ,
cv_1 OUT SYS_REFCURSOR,
cv_2 OUT SYS_REFCURSOR
)
as
begin
open cv_1 for select 'aa' from dual;if(v_a is not null)then
begin
open cv_2 for select 'bb' from dual;
end;
endif;
end如果v_a 是空的话,外面填充dateset时会报"未执行语句句柄" 错误,
但是我就是不想open cv_2 for ,只想dateset有一个table;外面对table.count 做一些业务判断。不想改
请问如何处理。
解决方案 »
- tnsnames.ora文件中的问题
- oracle报错ORA-01000: maximum open cursors exceeded
- Oracle4问
- OEM备份oracle连接主机失败,密码错误
- 来做题了。答的越多分越多,明天加分
- 在导入oracle数据时,出现下面的异常提示,有一个表未导入,我该怎么办呢?如何单独导入这个表呢?
- Help me....
- 郁闷了啊 oracle有没有碰到这种情况的啊!
- select 查询有一个函数,我不记得啦?
- 在配置EPM System Configurator时IIS的问题
- 我有一大段代码,是我取得存贮过程中的一段,我想定义一个变量,执行这段代码
- 請教ORACLE中自增列函數是什麼
CREATE OR REPLACE PROCEDURE test
(
v_a IN NUMBER DEFAULT NULL ,
cv_1 OUT SYS_REFCURSOR)
as
begin
if v_a is not null then
open cv_2 for select 'bb' from dual;
else
open cv_2 for select 'aa' from dual;
end if;
end;
----打住
必须打开吗。OPEN cv_2 FOR SELECT NULL FROM DUAL where 1=2;可以这样,主要是我想实现,
返回数据集根据实际情况,不固定是2个table
已经写给你了 后面的dual 改成你条件的不同表就可以了 自己改
目前,我想实现根据业务有时返回一个table,有时返回两个table
不想dataset固定总是两个table
但是,如果cv_2不打开的话,就报异常。
好像,只有不想要cv_2时,也得返回两个table.
create or replace procedure test
(v_a in number default null,
c1 out sys_refcursor,
c2 out sys_refcursor)
is
stmt varchar2(100);
begin
open c1 for select 'aa' from dual; if v_a is not null then
stmt:='begin open :c for select ''bb'' from dual; end;';
execute immediate stmt using c2;
end if;
end;
/
system.data.oracleclient.dll(oracle自己的dll没事,但是不想用那个)
用报这个异常,,报错是由于定义cv_2为输出游标,但没有打开。
引发异常: System.Data.OracleClient.OracleException: ORA-24338: 未执行语句句柄
。