return sql ret

Posted ppqchina

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了return sql ret相关的知识,希望对你有一定的参考价值。

simple way:
 
--创建procedure
create or replace procedure sql_test(out_return out sys_refcursor) is
begin
  open out_return for \'select * from tgp_funds\';
end;
 
 
https://zhidao.baidu.com/question/922899782581115539.html
 
http://blog.csdn.net/xwq911/article/details/46278901
导读:在Oracle数据库存储过程中如果用了select语句,要么使用"select into 变量"语句要么使用游标,oracle不支持单独的select语句。

先看下这个存储过程:

create or replace procedure pro_test 
is 
begin 
select * from t_test; 
end pro_test;

这个存储过程正确吗?

昨天因为这个,耽误了好久(在一个存储过程中用了select语句,但既没有用游标也没有用into).

在存储过程(oracle数据库)中如果用了select语句,要么使用"select into 变量"语句要么使用游标,oracle不支持单独的select语句(如表述有误请指出).

select into 比较简单,但是如果返回的是一个结果集就无法满足要求了.

游标分Cursor型游标和SYS_REFCURSOR型游标两种

Cursor型游标--不能用于参数传递

create or replace procedure pro_test() is

cusor_1 Cursor is select 字段名 from 表名 where 条件;

(或者

select class_name into cursor_2 from class where ...;

cursor的另一种用法,需要写在begin和end之间)

begin

select class_name into cursor_2 from class where ...;

可以使用

for xxx in cursor

loop

....

end loop; --对Cursor进行遍历

end pro_test;

SYS_REFCURSOR型游标

create or replace procedure pro_test(rsCursor out SYS_REFCURSOR) is

cursor SYS_REFCURSOR;

name varhcar(20);

begin

open cursor for

select name from student where ...; --使用open来打开进行赋值

--遍历

loop

fetch cursor into name --fetch into来打开遍历的每条数据

exit when cursor%NOTFOUND; --未找到记录信息

dbms_output.putline(xxxx);

end loop;

rsCursor := cursor;

end pro_test;

 

http://www.cnblogs.com/sc-xx/archive/2011/12/03/2275084.html

以上是关于return sql ret的主要内容,如果未能解决你的问题,请参考以下文章

php实现匿名函数

片段管理访问错误可见 return false

并发代码中赋值运算符的返回值

YASnippet - emacs 的代码片段管理工具

sql sql里面的代码片段

Microsoft SQL Server 代码片段收集