oracle存储过程中使用动态游标的问题

豪杰笑开怀 2009-01-07 12:04:49
存储过程如下:
CREATE OR REPLACE PROCEDURE p_test
is
TYPE t_rec_date IS TABLE OF raw_data.stock_date%type INDEX BY BINARY_INTEGER;
TYPE t_ref_cursor IS REF CURSOR;
v_cur t_ref_cursor;
v_sql string(2000);
v_stock_date date;
begin
v_sql := 'select stock_date from raw_data';
open v_cur for v_sql;  
    loop  
fetch v_cur into v_stock_date;
exit when v_cur%notfound;
end loop;
close v_cur;
end p_test;

报的是"open v_cur for v_sql;"这行有错,错误如下:
PROCEDURE P_TEST 出现错误:

LINE/COL ERROR
-------- -----------------------------------------------------------------
11/2 PLS-00103: 出现符号 ""在需要下列之一时:
begin case declare end
exception exit for goto if loop mod null pragma raise return
select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge
<a single-quoted SQL string> pipe


奇怪的是,我因为建了两个oracle9i的库,两个库完全一致,一个在公司,一个在家里,在公司运行如上存储过程没有问题,但是在家里运行就报错,区别只是公司我使用的是oracle10g client,而家里使用的是9i的client,难道存储过程的编译和client还有关系?

实在搞不懂,请各位大虾指教!!!
...全文
773 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
tang745163962 2012-06-08
  • 打赏
  • 举报
回复
我今天也遇到这个问题,气死了找半天!删掉后我手动写上就好了,有点莫名其妙哦,谢谢大侠~
豪杰笑开怀 2009-01-09
  • 打赏
  • 举报
回复
都是强人啊,果然如此,为什么拷贝就不可以呢,难道是文本的编码问题,谢谢啊
flush_520 2009-01-07
  • 打赏
  • 举报
回复

CREATE OR REPLACE PROCEDURE p_test is
TYPE t_rec_date IS TABLE OF raw_data.stock_date%type INDEX BY BINARY_INTEGER;
TYPE t_ref_cursor IS REF CURSOR;
v_cur t_ref_cursor;
v_sql string(2000);
v_stock_date date;
begin
v_sql := 'select stock_date from raw_data';
open v_cur for v_sql;
      loop   fetch v_cur
into v_stock_date;
exit when v_cur%notfound;
end loop; close v_cur;
end p_test;

没问题,
xiaoxiao1984 2009-01-07
  • 打赏
  • 举报
回复
SQL> ed
已写入 file afiedt.buf

1 CREATE OR REPLACE PROCEDURE p_test
2 is
3 TYPE t_ref_cursor IS REF CURSOR;
4 v_cur t_ref_cursor;
5 v_sql varchar2(2000);
6 v_stock_date date;
7 begin
8 v_sql := 'select 1 from dual';
9 open v_cur for v_sql ;
10 loop
11 fetch v_cur into v_stock_date;
12 exit when v_cur%notfound;
13 end loop;
14 close v_cur ;
15* end p_test;
SQL> /

过程已创建。

SQL> show err
没有错误。
SQL>

楼主的语法非常正常,但是空格好像不太对,偶自己敲一遍代码就没问题,copy楼主的代码就有编译错误
jdsnhan 2009-01-07
  • 打赏
  • 举报
回复
没问题的。
只是格式排版的问题。
不信,你把
open v_cur for v_sql;
loop
这两句删了,重新写一遍,ok。

注意:如果用plsql,toad等开发工具的时候,注意关键字的变化,以确定排版格式是否正确。

17,137

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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