很久没有接触存储过程了。
遇到如下问题。
发现在declare的时候,直接声明cursor testcursor is select * from t1;
这样是可以的。但是在begin开始后。
需要再写一个cursor,这个cursor需要前面某处理取得的某个变量作参数。
cursor testcursor2 is select * from t1 where id = 变量1
但是这样写的时候,怎么也不能编译,一直报错。
不知道begin开始之后如何写一个有参数的cursor。
还有,取得值之后,取得数据的时候希望只取记录集中第一条数据,loop该怎么写呢?
谢谢大家。
遇到如下问题。
发现在declare的时候,直接声明cursor testcursor is select * from t1;
这样是可以的。但是在begin开始后。
需要再写一个cursor,这个cursor需要前面某处理取得的某个变量作参数。
cursor testcursor2 is select * from t1 where id = 变量1
但是这样写的时候,怎么也不能编译,一直报错。
不知道begin开始之后如何写一个有参数的cursor。
还有,取得值之后,取得数据的时候希望只取记录集中第一条数据,loop该怎么写呢?
谢谢大家。
procedure test is
v_name varchar2(100);
cursor cur1 is select * from t1 where field1=v_name;
begin
....
end;第二个问题比较奇怪,如果只要一条记录的话那还要cursor做什么,直接select就好了.
DECLARE 时候声明
这样一来就可以取得想要的第一个数据。sql过于复杂单独用select 不能取得最小的那个纪录所以采用order by ,然后再取第一个数据的方式。
cursor c1 is select * from t1;
cursor c2(ss varchar2) is select * from t1 where id=ss;
begin
for v1 in c1 loop
for v2 in c2(c1.id) loop
...
end loop;
end loop;
end;
select * from (select * from t1 order by t1.order_col) where rownum=1;
一种就是定义游标后,不要用loop,直接读一条就好了:
open cur1;
fetch cur1 into v_col1,v_col2....
close cur1;
这样就只会取一条了。