转: oracle 存储过程 执行动态 实现sql
http://jingyan.baidu.com/article/5d6edee2fbb9f999eadeecb9.html
http://jingyan.baidu.com/article/363872ecca722b6e4ba16f18.html
######sample 1
oracle存储过程中如何使用动态sql
- 原创
- |
- 浏览:5889
- |
- 更新:2017-06-07 21:33
在做oracle开发工作的小伙伴们经常为写存储过程而烦恼,然而只要掌握了其语法知识就能写一个复杂的存储过程,其实存储过程就是用一些dml语言拼写起来的sql语句块,很简单,但是也会在存储过程中使用动态sql,那么动态sql是怎么回事呢?那么现在给大家分享一些工作中的经验。
方法/步骤
-
动态sql,顾名思义就是动态执行的sql,也就是说在没执行之前是动态的拼接的,为了简单操作,我们利用pl/sql的测试窗口来做示例
点击左上角的矩形图片
-
点击之后打开测试窗口一栏
-
这时就可以在右侧编辑动态sql了,由上图可知右侧是典型的begin---end块也是存储过程中使用的基础语法格式。其中declare是声明变量用的。在begin下面可以初始化游标、变量。现在要实现一个查询动态sql就可以:
-
由以上图可以看到:v_select_sql就是一个动态sql,为了实现一个完整的查新语句,用了‘||’来拼接完成的,前段是select 后段是where 条件。那么我们可以现在来测试一下,真正要执行的v_select_sql是个什么样,测试一下
-
看到了:就是一个简单的我们平时写的正常查询语句。那么我们如何去执行它呢?
使用execute immediate v_select_sql;这样就可以执行查询了。
-
究竟为什么要使用动态sql呢?
首先,它减少了编译错误。如果上述表frtm_rule在数据库中不存在,那么,在编译的过程中仍然不会报错。现在我把表名改了,可以测试一下仍然可以编译成功
-
仍然显示已执行。
其次,就是可以动态的拼接sql,减少了代码的重复性,能够在判断条件下重复使用sql代码。
END
##########sample 2
接着往下说关于oracle动态sql语句方面的东西。
1,依然是基础篇,面向初学者,这里并不会涉及到很高深的东西,
2,请注重基础知识。
注意事项
-
以上为开发者适用!
##########sample 3 目的 根据一张表的一个字段值day 几月几日,更新同一样的表的另外2个字段,week_day 周几,duty_hours 工作小时
declare
v_date VARCHAR2(20);
v_week_day number;
v_duty_hours number;
cursor v_cur is select to_char(day-1, 'D') week_day,day from dbmgr.tb_date;
begin
FOR v_rec in v_cur LOOP
/* DBMS_OUTPUT.PUT_LINE(v_rec.db_name||' db_name');
*/
DBMS_OUTPUT.ENABLE(buffer_size => null);
v_date := v_rec.day;
v_week_day := v_rec.week_day;
DBMS_OUTPUT.PUT_LINE(v_date||' day ');
update dbmgr.tb_date set week_day=v_week_day where day=v_date ;
if v_week_day < 6 then
update dbmgr.tb_date set duty_hours=8 where day=v_date;
end if;
end loop;
end;













![sql基本教程:[3]oracle动态语句](https://exp-picture.cdn.bcebos.com/84010e2a04e23ea2021fbbc92b10bc33ed38c3f3.jpg?x-bce-process=image%2Fresize%2Cm_fill%2Cw_92%2Ch_69%2Climit_1%2Fquality%2Cq_80)
![sql基本教程:[3]oracle动态语句](https://exp-picture.cdn.bcebos.com/ed792abb19efa25f4c49d9c859828689a0463bf0.jpg?x-bce-process=image%2Fresize%2Cm_fill%2Cw_92%2Ch_69%2Climit_1%2Fquality%2Cq_80)
![sql基本教程:[3]oracle动态语句](https://exp-picture.cdn.bcebos.com/c33acc828689a146f2ecf54af4bd4c7c35b334f0.jpg?x-bce-process=image%2Fresize%2Cm_fill%2Cw_92%2Ch_69%2Climit_1%2Fquality%2Cq_80)
![sql基本教程:[3]oracle动态语句](https://exp-picture.cdn.bcebos.com/a007a9b1eef97fbd04212f00b74133bad24133f0.jpg?x-bce-process=image%2Fresize%2Cm_fill%2Cw_92%2Ch_69%2Climit_1%2Fquality%2Cq_80)
![sql基本教程:[3]oracle动态语句](https://exp-picture.cdn.bcebos.com/4d3d2ab33c4133ba9f1c18ce6a37c97623bc2ff0.jpg?x-bce-process=image%2Fresize%2Cm_fill%2Cw_92%2Ch_69%2Climit_1%2Fquality%2Cq_80)
![sql基本教程:[3]oracle动态语句](https://exp-picture.cdn.bcebos.com/32fbcd41037de137862b390ff6c5cf672a5f2af0.jpg?x-bce-process=image%2Fresize%2Cm_fill%2Cw_92%2Ch_69%2Climit_1%2Fquality%2Cq_80)
![sql基本教程:[3]oracle动态语句](https://exp-picture.cdn.bcebos.com/023cff37c97622bc2c98d4d4a05fd546049628f0.jpg?x-bce-process=image%2Fresize%2Cm_fill%2Cw_92%2Ch_69%2Climit_1%2Fquality%2Cq_80)
![sql基本教程:[3]oracle动态语句](https://exp-picture.cdn.bcebos.com/84010e2a04e23ea2021fbbc92b10bc33ed38c3f3.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fquality%2Cq_80)
![sql基本教程:[3]oracle动态语句](https://exp-picture.cdn.bcebos.com/ed792abb19efa25f4c49d9c859828689a0463bf0.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fquality%2Cq_80)
![sql基本教程:[3]oracle动态语句](https://exp-picture.cdn.bcebos.com/c33acc828689a146f2ecf54af4bd4c7c35b334f0.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fquality%2Cq_80)
![sql基本教程:[3]oracle动态语句](https://exp-picture.cdn.bcebos.com/a007a9b1eef97fbd04212f00b74133bad24133f0.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fquality%2Cq_80)
![sql基本教程:[3]oracle动态语句](https://exp-picture.cdn.bcebos.com/4d3d2ab33c4133ba9f1c18ce6a37c97623bc2ff0.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fquality%2Cq_80)
![sql基本教程:[3]oracle动态语句](https://exp-picture.cdn.bcebos.com/32fbcd41037de137862b390ff6c5cf672a5f2af0.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fquality%2Cq_80)
![sql基本教程:[3]oracle动态语句](https://exp-picture.cdn.bcebos.com/023cff37c97622bc2c98d4d4a05fd546049628f0.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fquality%2Cq_80)
![sql基本教程:[3]oracle动态语句](https://exp-picture.cdn.bcebos.com/c8373cbc7dc5cf677802cef58e96b814f5d026f0.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fquality%2Cq_80)
浙公网安备 33010602011771号