我的cur的定义类型是ref cursor。请问这是什么问题,该如何解决?谢谢!
原代码如下:procedure p_aj(cur out sel_tab.cur_aj,casenum in tab_aj_jbxx.ajbh %type,casename in tab_aj_jbxx.ajmc %type,casesort in tab_aj_jbxx.ajlb %type,
flag in varchar2,scene in tab_aj_jbxx.facs %type,district in tab_aj_jbxx.sszrq %type, casedate1 in tab_aj_jbxx.lasj %type,
casedate2 in tab_aj_jbxx.lasj %type,datetype in char)
as
dynsql varchar2(1000);
begin
if(casenum<>'')
then dynsql:='select ajbh,dzbh,dzbm,ajmc,ajlb,sszrq,ajzt from tab_aj_jbxx where ajbh='||casenum;
end if;
if(casename<>'')
then dynsql:='select ajbh,dzbh,dzbm,ajmc,ajlb,sszrq,ajzt from tab_aj_jbxx where ajmc='||casename||'%';
end if;
if(flag<>'')
then dynsql:=dynsql||' and ajlb<='||flag;
end if;
if(casesort<>'' and flag='')
then dynsql:=dynsql||' and ajlb='||casesort;
end if;
if(scene<>'')
then dynsql:=dynsql||' and facs='||scene;
end if;
if(district<>'')
then dynsql:=dynsql||' and sszrq='||district;
end if;
if(casedate1<>''and casedate2<>''and datetype='1')
then dynsql:=dynsql||' and fasjsx between '||casedate1||' and '||casedate2;
end if;
if(casedate1<>''and casedate2<>''and datetype='2')
then dynsql:=dynsql||' and sasj between '||casedate1||' and '||casedate2;
end if;
if(casedate1<>''and casedate2<>''and datetype='3')
then dynsql:=dynsql||' and lasj between '||casedate1||' and '||casedate2;
end if;
open cur for dynsql;
end p_aj;行号= 150 列号= 8 错误文本= PLS-00455: 游标 'CUR' 不能在动态 SQL OPEN 语句中使用
原代码如下:procedure p_aj(cur out sel_tab.cur_aj,casenum in tab_aj_jbxx.ajbh %type,casename in tab_aj_jbxx.ajmc %type,casesort in tab_aj_jbxx.ajlb %type,
flag in varchar2,scene in tab_aj_jbxx.facs %type,district in tab_aj_jbxx.sszrq %type, casedate1 in tab_aj_jbxx.lasj %type,
casedate2 in tab_aj_jbxx.lasj %type,datetype in char)
as
dynsql varchar2(1000);
begin
if(casenum<>'')
then dynsql:='select ajbh,dzbh,dzbm,ajmc,ajlb,sszrq,ajzt from tab_aj_jbxx where ajbh='||casenum;
end if;
if(casename<>'')
then dynsql:='select ajbh,dzbh,dzbm,ajmc,ajlb,sszrq,ajzt from tab_aj_jbxx where ajmc='||casename||'%';
end if;
if(flag<>'')
then dynsql:=dynsql||' and ajlb<='||flag;
end if;
if(casesort<>'' and flag='')
then dynsql:=dynsql||' and ajlb='||casesort;
end if;
if(scene<>'')
then dynsql:=dynsql||' and facs='||scene;
end if;
if(district<>'')
then dynsql:=dynsql||' and sszrq='||district;
end if;
if(casedate1<>''and casedate2<>''and datetype='1')
then dynsql:=dynsql||' and fasjsx between '||casedate1||' and '||casedate2;
end if;
if(casedate1<>''and casedate2<>''and datetype='2')
then dynsql:=dynsql||' and sasj between '||casedate1||' and '||casedate2;
end if;
if(casedate1<>''and casedate2<>''and datetype='3')
then dynsql:=dynsql||' and lasj between '||casedate1||' and '||casedate2;
end if;
open cur for dynsql;
end p_aj;行号= 150 列号= 8 错误文本= PLS-00455: 游标 'CUR' 不能在动态 SQL OPEN 语句中使用
解决方案 »
- 对于数据量大的网站,应选用的数据库是? 考试试题
- 一个sql问题
- 我现在就需要一个数组存放几个数据,在之后的程序中会需要用sql语句来判断某个字段的值是否在几个数据中,怎么实现简单?
- Oracle 用户权限的问题
- 插入数值时提示小时值必须在1-12之间
- ** INSERT 嵌套查询 错误 ??? **
- 如何使用clob?
- 关于ORACLE的数据导出问题,较急?
- 关于刚才那个在ORACLE中创建视图的问题,急急急!!!在线等待!
- 急:我的OracleOraHome81TNSListener启动不了,我试了csdn上的这么多办法都不行呀?
- 高人帮忙看个牛的存贮过程更新出现错误问题!!!!!
- occi连接数据库的怪问题
v_sql varchar2(50);
BEGIN
v_sql:='SELECT * from ' || 'b_areas where area_id>''A''';
OPEN p_cursor FOR
v_sql;
END ll_02;
这种调用没有问题
也许你dynsql的值有问题
你的ref cursor类型的没有试过,如果不行就用sys_refcursor类型
/******************************************************************************
NAME: test01
PURPOSE: REVISIONS:
Ver Date Author Description
--------- ---------- --------------- ------------------------------------
1.0 2007-8-17 1. Created this package.
******************************************************************************/ TYPE v_cursor IS REF CURSOR;
procedure t_001(p_cursor out v_cursor);END test01;/CREATE OR REPLACE PACKAGE body test01 AS
/******************************************************************************
NAME: test01
PURPOSE: REVISIONS:
Ver Date Author Description
--------- ---------- --------------- ------------------------------------
1.0 2007-8-17 1. Created this package.
******************************************************************************/
procedure t_001(p_cursor out v_cursor)
is
v_sql varchar2(50);
BEGIN
v_sql:='SELECT * from ' || 'b_areas where area_id>''A''';
OPEN p_cursor FOR
v_sql;
end;END test01;
--经过测试没有问题