我要写一个oracle的存储过程,需要用到一个动态的游标,因为表名和字段个数都是变的,所以我想传入sql语句
发布网友
发布时间:2022-05-15 20:19
我来回答
共2个回答
热心网友
时间:2024-02-27 15:38
SQL> DECLARE
2 TYPE refcursor IS REF CURSOR;
3 v_cursor REFCURSOR;
4 v_Sql VARCHAR(200);
5 v_name VARCHAR(10);
6 BEGIN
7 -- 动态SQL
8 v_Sql := 'SELECT name FROM test_dysql';
9 -- 打开游标.
10 OPEN v_cursor FOR v_SQL;
11 -- 循环处理.
12 LOOP
13 -- 填充数据.
14 FETCH v_cursor INTO v_name;
15 -- 无数据时 退出循环.
16 EXIT WHEN v_cursor%NOTFOUND;
17 -- 输出.
18 dbms_output.put_line(v_name);
19 END LOOP;
20 -- 关闭游标.
21 CLOSE v_cursor;
22 EXCEPTION
23 WHEN OTHERS THEN
24 -- 发生异常时,如果游标还打开,那么关闭掉.
25 IF (v_cursor%isopen) THEN
26 CLOSE v_cursor;
27 END IF;
28 RAISE;
29 END;
30 /
A
B
C
D
E
PL/SQL procere successfully completed.追问FETCH v_cursor INTO v_name;
这句话,你定义的v_name是一个变量,可是我要返回的是一张表的数据,有多个字段,我定义了表的类型,可是确报错说类型错误,那我该怎么去填充数据呢?
参考资料:http://hi.baidu.com/wangqing999/blog/item/49752e0d0ed5562b6a60fb51.html
热心网友
时间:2024-02-27 15:38
cur record_set; --遍历用的游标
--游标结果,用于保存动态游标数据
TYPE cursorResult IS RECORD(b NUMBER);
rec cursorResult;
cursor_sql := 'select 1 a from al';
OPEN cur FOR cursor_sql;
LOOP
FETCH cur
INTO rec;
EXIT WHEN cur%NOTFOUND;
--rec.b
END LOOP;
CLOSE cur;