Oracle执行存储过程问题

侦探小羽 2013-05-07 10:36:55
刚接触Oracle,初学者遇到以下问题,请求帮助,谢谢了!

在PL/SQL中执行以下存储过程

DECLARE
TYPE BRANCH_CURSOR IS REF CURSOR;
PBRANCH BRANCH_CURSOR;
BEGIN
PKG_BRANCH.BRANCH_LOADBYKEY(PBRANCH,'DL');
END;

按执行按钮只显示“Done in 0.015 Seconds”,但是结果不显示出来,我想查看结果该如何执行啊?
...全文
190 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
侦探小羽 2013-05-07
  • 打赏
  • 举报
回复
引用 9 楼 u010412956 的回复:
[quote=引用 8 楼 K_1412 的回复:] [quote=引用 7 楼 u010412956 的回复:] 直接sql语句出结果?存储过程不行。 用 管道+函数吧。。
就是打开SQL Window 窗口,然后写 DECLARE TYPE BRANCH_CURSOR IS REF CURSOR; PBRANCH BRANCH_CURSOR; BEGIN PKG_BRANCH.BRANCH_LOADBYKEY(PBRANCH,'DL'); END; 这个去执行,不可以吗? 管道+函数?我是初学者,还不知道怎么用[/quote] 这个我在3#已经说的很清楚了。 DECLARE TYPE BRANCH_CURSOR IS REF CURSOR; PBRANCH BRANCH_CURSOR; BEGIN PKG_BRANCH.BRANCH_LOADBYKEY(PBRANCH,'DL'); -- open PBRANCH; loop fetch PBRANCH into ..... exit when PBRANCH %notfound; dbms_output.put_line('.....'); end loop; END; [/quote] fetch PBRANCH into 中跟什么类型的参数?得在declare中定义是吧? 但是我定义之后(VARCHAR类型)后,报出“结果集变量或查询的返回类型不匹配”
u010412956 2013-05-07
  • 打赏
  • 举报
回复
引用 8 楼 K_1412 的回复:
[quote=引用 7 楼 u010412956 的回复:] 直接sql语句出结果?存储过程不行。 用 管道+函数吧。。
就是打开SQL Window 窗口,然后写 DECLARE TYPE BRANCH_CURSOR IS REF CURSOR; PBRANCH BRANCH_CURSOR; BEGIN PKG_BRANCH.BRANCH_LOADBYKEY(PBRANCH,'DL'); END; 这个去执行,不可以吗? 管道+函数?我是初学者,还不知道怎么用[/quote] 这个我在3#已经说的很清楚了。 DECLARE TYPE BRANCH_CURSOR IS REF CURSOR; PBRANCH BRANCH_CURSOR; BEGIN PKG_BRANCH.BRANCH_LOADBYKEY(PBRANCH,'DL'); -- open PBRANCH; loop fetch PBRANCH into ..... exit when PBRANCH %notfound; dbms_output.put_line('.....'); end loop; END;
侦探小羽 2013-05-07
  • 打赏
  • 举报
回复
引用 7 楼 u010412956 的回复:
直接sql语句出结果?存储过程不行。 用 管道+函数吧。。
就是打开SQL Window 窗口,然后写 DECLARE TYPE BRANCH_CURSOR IS REF CURSOR; PBRANCH BRANCH_CURSOR; BEGIN PKG_BRANCH.BRANCH_LOADBYKEY(PBRANCH,'DL'); END; 这个去执行,不可以吗? 管道+函数?我是初学者,还不知道怎么用
u010412956 2013-05-07
  • 打赏
  • 举报
回复
直接sql语句出结果?存储过程不行。 用 管道+函数吧。。
侦探小羽 2013-05-07
  • 打赏
  • 举报
回复
引用 3 楼 u010412956 的回复:
DECLARE TYPE BRANCH_CURSOR IS REF CURSOR; PBRANCH BRANCH_CURSOR; BEGIN PKG_BRANCH.BRANCH_LOADBYKEY(PBRANCH,'DL'); END; 你这个只是返回了到游标里面, 要出结果,还得 打开游标,fetch数据等。。
具体怎么fetch数据啊?我fetch数据的时候,它报“结果集变量或查询的返回类型不匹配”,谢谢
侦探小羽 2013-05-07
  • 打赏
  • 举报
回复
引用 2 楼 u010412956 的回复:
最简单的方法,test
这个方法我知道,可以查询并显示结果。我是想用SQL语句的也试试
侦探小羽 2013-05-07
  • 打赏
  • 举报
回复
引用 1 楼 vanjayhsu 的回复:
Done in 0.015 Seconds--这个表示这个过程已经成功执行。你想查看结果,那就在你过程里面的对象去看,比如你在过程中插入了一条记录,那你就检查这个表是否已经成功插入一条记录。 不知道你想查看的是什么结果?存储过程执行的结果?
就是查看这个存储过程的结果集,这个存储过程是查询一张表里面的数据
u010412956 2013-05-07
  • 打赏
  • 举报
回复
DECLARE TYPE BRANCH_CURSOR IS REF CURSOR; PBRANCH BRANCH_CURSOR; BEGIN PKG_BRANCH.BRANCH_LOADBYKEY(PBRANCH,'DL'); END; 你这个只是返回了到游标里面, 要出结果,还得 打开游标,fetch数据等。。
u010412956 2013-05-07
  • 打赏
  • 举报
回复
最简单的方法,test
vanjayhsu 2013-05-07
  • 打赏
  • 举报
回复
Done in 0.015 Seconds--这个表示这个过程已经成功执行。你想查看结果,那就在你过程里面的对象去看,比如你在过程中插入了一条记录,那你就检查这个表是否已经成功插入一条记录。 不知道你想查看的是什么结果?存储过程执行的结果?
侦探小羽 2013-05-07
  • 打赏
  • 举报
回复
引用 9 楼 u010412956 的回复:
[quote=引用 8 楼 K_1412 的回复:] [quote=引用 7 楼 u010412956 的回复:] 直接sql语句出结果?存储过程不行。 用 管道+函数吧。。
就是打开SQL Window 窗口,然后写 DECLARE TYPE BRANCH_CURSOR IS REF CURSOR; PBRANCH BRANCH_CURSOR; BEGIN PKG_BRANCH.BRANCH_LOADBYKEY(PBRANCH,'DL'); END; 这个去执行,不可以吗? 管道+函数?我是初学者,还不知道怎么用[/quote] 这个我在3#已经说的很清楚了。 DECLARE TYPE BRANCH_CURSOR IS REF CURSOR; PBRANCH BRANCH_CURSOR; BEGIN PKG_BRANCH.BRANCH_LOADBYKEY(PBRANCH,'DL'); -- open PBRANCH; loop fetch PBRANCH into ..... exit when PBRANCH %notfound; dbms_output.put_line('.....'); end loop; END; [/quote] 非常感谢您的回答! 实在不好意思,刚才给您的分数给错了,下次给您吧!
u010412956 2013-05-07
  • 打赏
  • 举报
回复
引用 12 楼 K_1412 的回复:
我看到输出的内容了,谢谢! 能否再请教您个问题,就是它这种只能这样输出结果,不能像直接查询出的结果那样,有列标题一样的显示结果集吗?还有就是为什么我查询语句中的所有字段必须放在INTO后面,我只INTO一个字段的时候就报错。
要像直接查询出结果那样, 用管道函数,自己google了解即可。。 select....into 的语法,你得遵循。 你也可以定义 type 复合类型之类的。。
侦探小羽 2013-05-07
  • 打赏
  • 举报
回复
引用 11 楼 vanjayhsu 的回复:
[quote=引用 10 楼 K_1412 的回复:] [quote=引用 9 楼 u010412956 的回复:] [quote=引用 8 楼 K_1412 的回复:] [quote=引用 7 楼 u010412956 的回复:] 直接sql语句出结果?存储过程不行。 用 管道+函数吧。。
就是打开SQL Window 窗口,然后写 DECLARE TYPE BRANCH_CURSOR IS REF CURSOR; PBRANCH BRANCH_CURSOR; BEGIN PKG_BRANCH.BRANCH_LOADBYKEY(PBRANCH,'DL'); END; 这个去执行,不可以吗? 管道+函数?我是初学者,还不知道怎么用[/quote] 这个我在3#已经说的很清楚了。 DECLARE TYPE BRANCH_CURSOR IS REF CURSOR; PBRANCH BRANCH_CURSOR; BEGIN PKG_BRANCH.BRANCH_LOADBYKEY(PBRANCH,'DL'); -- open PBRANCH; loop fetch PBRANCH into ..... exit when PBRANCH %notfound; dbms_output.put_line('.....'); end loop; END; [/quote] fetch PBRANCH into 中跟什么类型的参数?得在declare中定义是吧? 但是我定义之后(VARCHAR类型)后,报出“结果集变量或查询的返回类型不匹配”[/quote] 是的,变量都在declare中定义。INTO后面跟变量,假设你查询的表有4个字段,a varchar2(40),b number,c date,d varchar2(80)。那么你的变量定义为v_a varchar2(40),v_b number,v_c date,v_d varchar2(80),然后fetch PBRANCH into v_a,v_b,v_c,v_d。即你表里面查询出什么字段,你就定义什么变量类型,查询出几个字段,就定义几个变量。[/quote] 我看到输出的内容了,谢谢! 能否再请教您个问题,就是它这种只能这样输出结果,不能像直接查询出的结果那样,有列标题一样的显示结果集吗?还有就是为什么我查询语句中的所有字段必须放在INTO后面,我只INTO一个字段的时候就报错。
vanjayhsu 2013-05-07
  • 打赏
  • 举报
回复
引用 10 楼 K_1412 的回复:
[quote=引用 9 楼 u010412956 的回复:] [quote=引用 8 楼 K_1412 的回复:] [quote=引用 7 楼 u010412956 的回复:] 直接sql语句出结果?存储过程不行。 用 管道+函数吧。。
就是打开SQL Window 窗口,然后写 DECLARE TYPE BRANCH_CURSOR IS REF CURSOR; PBRANCH BRANCH_CURSOR; BEGIN PKG_BRANCH.BRANCH_LOADBYKEY(PBRANCH,'DL'); END; 这个去执行,不可以吗? 管道+函数?我是初学者,还不知道怎么用[/quote] 这个我在3#已经说的很清楚了。 DECLARE TYPE BRANCH_CURSOR IS REF CURSOR; PBRANCH BRANCH_CURSOR; BEGIN PKG_BRANCH.BRANCH_LOADBYKEY(PBRANCH,'DL'); -- open PBRANCH; loop fetch PBRANCH into ..... exit when PBRANCH %notfound; dbms_output.put_line('.....'); end loop; END; [/quote] fetch PBRANCH into 中跟什么类型的参数?得在declare中定义是吧? 但是我定义之后(VARCHAR类型)后,报出“结果集变量或查询的返回类型不匹配”[/quote] 是的,变量都在declare中定义。INTO后面跟变量,假设你查询的表有4个字段,a varchar2(40),b number,c date,d varchar2(80)。那么你的变量定义为v_a varchar2(40),v_b number,v_c date,v_d varchar2(80),然后fetch PBRANCH into v_a,v_b,v_c,v_d。即你表里面查询出什么字段,你就定义什么变量类型,查询出几个字段,就定义几个变量。

17,377

社区成员

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

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