很久没有接触存储过程了。
遇到如下问题。
发现在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该怎么写呢?
谢谢大家。
解决方案 »
- 请教个 oracle 查询问题
- 一个关于数据库联接查询的问题,求高手解答
- 请问我的系统坏了,但我的oracle数据库没有倒出过,请问我从装系统和数据库后还能恢复我以前的数据库吗?
- 为什么触发器调用的存储过程的SQL不起作用?请高手进
- 请帮忙看看这两个query为啥返回结果不一样(outer join)?
- 启动时orcalescservice找不到
- 高分求救:关于更改ORA文件名字导致数据丢失
- Oracle9i的sqlplus能连接Oracle 7.2.3的服务器吗?
- Oracle8i在命令提示符下的导入
- 远程登录问题
- 谁知道Oracle8i,9i,10g 的具体发布时间?
- 如何测试存储过程呢?
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;
这样就只会取一条了。