oracle数据库存储过程中的select语句的位置
导读:在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 ...;
oracle游标的使用可以使⽤
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;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。