Oracle PL/SQL动态获取变量
来源:互联网 发布:须田亚香里 知乎 编辑:程序博客网 时间:2024/06/14 13:19
假设有一张员工表
fnd_employee
有如下字段employee_id
,name
,phone
四个字段, 然后我定义四个变量v1, v2, v3, v4 来存这四个字段(例: select * from fnd_employee into col1, col2, col3, col4 where rownum = 1)
那么现在我假设要拿到这四个变量中不为空的变量的值,那么我要怎么做呢?
方法一:写四个if…else 进行判断
if v1 is not null then ...end if;if v2 is not null then ...end if;...
那么如果有10个变量呢?有100个变量呢?不是要写N多个判断了吗?那么我要怎么获取这些变量比较方便快捷少写代码呢?我想了以下几个方法。
方法二:用数组来存这四个变量,然后用下标控制循环取得各个变量的值。
示例代码
DECLARE--定义数组类型下标类型为varchar2, 类型值为varchar2TYPE t_arr IS TABLE OF VARCHAR2(100) INDEX BY VARCHAR2(100);v1 VARCHAR2(100);v2 VARCHAR2(100);v3 VARCHAR2(100);v4 VARCHAR2(100);vn t_arr;v_index NUMBER := 1;BEGIN SELECT e.employee_id, e.NAME, e.EMAIL, e.PHONE INTO vn('1'), vn('2'), vn('3'), vn('4') FROM fnd_employee e WHERE ROWNUM = 1; LOOP EXIT WHEN v_index > 4; dbms_output.put_line(vn(to_char(v_index))); v_index := v_index + 1; END LOOP;END;
简单举个栗子上述程序将值赋给数组之后通过v_index数组下标来循环取得预先赋值的列值。
方法三:将四个变量连接起来中间用特殊符号隔开,然后在循环利用正则分割变量取得相应的值。
示例程序
DECLAREv1 VARCHAR2(100);v2 VARCHAR2(100);v3 VARCHAR2(100);v4 VARCHAR2(100);v_s VARCHAR2(1000);v_index NUMBER := 1;BEGIN SELECT e.employee_id, e.NAME, e.EMAIL, e.PHONE INTO v1, v2, v3, v4 FROM fnd_employee e WHERE ROWNUM = 1; --连接四个变量并用逗号隔开 v_s := v1 || ',' || v2 || ',' || v3 || ',' || v4; LOOP EXIT WHEN v_index > 4; --函数名 : regexp_substr(str , pattern, position, order) --返回正则匹配的字符串 --position是指开始匹配的位置,order是指匹配结果中的第几个字符串 dbms_output.put_line(regexp_substr(v_s, '[^,]+', 1, v_index)); v_index := v_index + 1; END LOOP;END;
这里用循环控制 正则匹配到第v_index个变量的值
方法四:利用SQL动态语句获取相应的
DECLAREv1 VARCHAR2(100);v2 VARCHAR2(100);v3 VARCHAR2(100);v4 VARCHAR2(100);v_n VARCHAR2(100);v_sql VARCHAR2(1000);v_index NUMBER := 1;BEGIN SELECT e.employee_id, e.NAME, e.EMAIL, e.PHONE INTO v1, v2, v3, v4 FROM fnd_employee e WHERE ROWNUM = 1; LOOP EXIT WHEN v_index > 4; v_sql := 'select v' || v_index || ' from (select :v1 v1, :v2 v2, :v3 v3, :v4 v4 from dual)'; EXECUTE IMMEDIATE v_sql INTO v_n USING v1, v2, v3, v4; dbms_output.put_line(v_n); v_index := v_index + 1; END LOOP;END;
这里通过拼接sql语句然后动态执行获取v1, v2, v3,v4 并将四个参数以绑定变量的方式传入, 然后拼接sql,
用v_index来控制循环和取得的数据
阅读全文
0 0
- Oracle PL/SQL动态获取变量
- Oracle定义PL/SQL变量
- ORACLE定义PL/SQL变量
- Oracle PL/SQL 绑定变量
- Oracle PL/SQL变量声明
- Oracle:PL/SQL--PL/SQL声明及变量命名规则
- Oracle PL/SQL使用动态SQL
- oracle PL/SQL 中变量绑定用法
- Oracle之PL/SQL的变量小结
- Oracle之PL/SQL的变量小结
- Oracle之PL/SQL的变量小结
- Oracle之PL/SQL的变量小结
- 二十四、oracle pl/sql 变量
- Oracle PL/SQL _5_变量命名方法
- Oracle pl/sql编程 15---游标变量
- oracle PL\SQl基础 变量的使用
- 二十四、oracle pl/sql 变量
- 二十四、oracle pl/sql 变量
- js生成Excel表格
- SQL查询艺术学习笔记--SQL事务处理 隔离 锁 与 并发操作
- hbase split
- ftp
- JAVA中的反射机制
- Oracle PL/SQL动态获取变量
- mysql数据库blob图片的存储和读取
- dos之net创建管理员用户
- 算法设计与分析——动态规划方法求解序列的连续最大子段
- 爬格子呀7-2,例题7-6,7-11
- 关于混合应用开发的未来的一些思考
- JavaScript专精系列(4)——常见高级技巧
- 题目求解:把以行为主序的数存放到对应以列为主序的数组中
- Unknown database 'movie'")