ORACLE游标与动态SQL结合使用
作者: 葛屹肃 | 日期: 2023-12-11 | 分类: 知识经验
近日,有一个需求,需要使用动态字段查询更方便。
表名T_PARA,数据如下:
要求:根据线号(LINEX)查询出参数
实现方式:根据线号的传参动态生成SQL进行查询
实例:
CREATE OR REPLACE PROCEDURE GET_LINE_PARA
————————————————-
–功 能: 动态SQL测试
–修改日期: 2023-12-11
————————————————-
(
I_LINE IN VARCHAR2, — 输入线号
O_PARA OUT VARCHAR2 — 输出参数
) ASTYPE T_CUR IS REF CURSOR;
V_CUR_TABLE T_CUR;
V_CUR_TEMP T_CUR;
TEMP_SQL VARCHAR2(4000);
TEMP_PARA VARCHAR2(30);
TEMP_LINE VARCHAR2(30);
BEGIN
IF I_LINE IN (‘LINE1′,’LINE2′,’LINE3′) THEN
O_PARA := I_LINE || ‘:’;
– 串连SQL
TEMP_SQL := ‘SELECT SEQ,’ || I_LINE ||’ FROM T_PARA ORDER BY SEQ’;
– 游标处理
OPEN V_CUR_TABLE FOR TEMP_SQL;
LOOP
FETCH V_CUR_TABLE INTO TEMP_PARA,TEMP_LINE;
EXIT WHEN V_CUR_TABLE%NOTFOUND;
– 处理每一行数据
O_PARA := O_PARA || ‘,’ || ‘(‘ ||TEMP_PARA || ‘)’ || TEMP_LINE;
END LOOP;
CLOSE V_CUR_TABLE;
ELSE
O_PARA := NULL;
END IF;
EXCEPTION
WHEN OTHERS THEN
BEGIN
IF V_CUR_TABLE%ISOPEN THEN
CLOSE V_CUR_TABLE;
END IF;
END;
END;
测试结果:
以上是ORACLE游标与动态SQL结合使用简单例子,在ORACLE 11版本上测试通过。
文章链接:https://www.geyisu.com/3330.html