open 表达式类型错误(急!!!!!!)

chuizhu 2010-04-06 03:31:48
package程序如下:

create or replace package scada.GETWINDENERGYDENSITY AS
TYPE T_CURSOR IS REF CURSOR;
PROCEDURE GetDenSity
(
wf_id IN VARCHAR2,
sdate IN VARCHAR2,
edate IN VARCHAR2,
eqid IN VARCHAR2,
WindCount OUT T_CURSOR
);
end GETWINDENERGYDENSITY;

create or replace package body scada.GETWINDENERGYDENSITY AS
PROCEDURE GetDenSity
(
wf_id IN VARCHAR2,
sdate IN VARCHAR2,
edate IN VARCHAR2,
eqid IN VARCHAR2,
WindCount OUT T_CURSOR
)
is
temp_sql CLOB:='select ';

begin
temp_sql :=temp_sql ||'* from test';

OPEN WindCount FOR temp_sql ;

END GetDenSity;
end GETWINDENERGYDENSITY;

上面的代码报错信息如下:
Error: PLS-00382: 表达式类型错误
Line: 33
Text: OPEN WindCount FOR temp_sql ;

如果我将temp_sql参数定义为varchar2类型,则运行通过, 可是我的SQL语句是拼接出来,并且字符串超过varchar2的4000, 只好换成了CLOB类型, 问:如何游标运行CLOB类型参数运行正常。 在线等。谢谢!!!
...全文
144 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
gll0809 2010-04-06
  • 打赏
  • 举报
回复
顶楼上的内容!
tangren 2010-04-06
  • 打赏
  • 举报
回复
clob类型编译是没有问题的,
但是to_char函数要求参数也不能超过32767

所以,使用CLOB类型是不能使open后的sql突破32767字节的长度
suiziguo 2010-04-06
  • 打赏
  • 举报
回复
SQL> CREATE OR REPLACE PACKAGE GETWINDENERGYDENSITY AS
2 TYPE T_CURSOR IS REF CURSOR;
3 PROCEDURE GetDenSity
4 (
5 wf_id IN VARCHAR2,
6 sdate IN VARCHAR2,
7 edate IN VARCHAR2,
8 eqid IN VARCHAR2,
9 WindCount OUT T_CURSOR
10 );
11 end GETWINDENERGYDENSITY;
12 /

程序包已创建。

SQL> CREATE OR REPLACE package BODY GETWINDENERGYDENSITY AS
2 PROCEDURE GetDenSity
3 (
4 wf_id IN VARCHAR2,
5 sdate IN VARCHAR2,
6 edate IN VARCHAR2,
7 eqid IN VARCHAR2,
8 WindCount OUT T_CURSOR
9 )
10 is
11 temp_sql CLOB :='select ';
12
13 begin
14 temp_sql :=temp_sql ||'* from test';
15
16 OPEN WindCount FOR to_char(temp_sql);
17
18 END GetDenSity;
19 end GETWINDENERGYDENSITY;
20 /

程序包体已创建。

SQL> show error
没有错误。
SQL>


suiziguo 2010-04-06
  • 打赏
  • 举报
回复
OPEN WindCount FOR to_char(temp_sql);

可以编译过去,但未知是否可以正常运行。
chuizhu 2010-04-06
  • 打赏
  • 举报
回复
那么如果我用CLOB类型参数,如何才能运行正常
chuizhu 2010-04-06
  • 打赏
  • 举报
回复
昏倒,我一直以为是4000呢, 惭愧惭愧!!!
suiziguo 2010-04-06
  • 打赏
  • 举报
回复
PL/SQL里varchar2最长32767

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧