转: 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存储过程中如何使用动态sql1
  • oracle存储过程中如何使用动态sql2
  • oracle存储过程中如何使用动态sql3
  • oracle存储过程中如何使用动态sql4
  • oracle存储过程中如何使用动态sql5
  • oracle存储过程中如何使用动态sql6
分步阅读

在做oracle开发工作的小伙伴们经常为写存储过程而烦恼,然而只要掌握了其语法知识就能写一个复杂的存储过程,其实存储过程就是用一些dml语言拼写起来的sql语句块,很简单,但是也会在存储过程中使用动态sql,那么动态sql是怎么回事呢?那么现在给大家分享一些工作中的经验。

 

工具/原料

 
  • win8系统64位

方法/步骤

 
  1.  

    动态sql,顾名思义就是动态执行的sql,也就是说在没执行之前是动态的拼接的,为了简单操作,我们利用pl/sql的测试窗口来做示例

    点击左上角的矩形图片

     

    oracle存储过程中如何使用动态sql
  2.  

    点击之后打开测试窗口一栏

     

    oracle存储过程中如何使用动态sql
  3.  

    这时就可以在右侧编辑动态sql了,由上图可知右侧是典型的begin---end块也是存储过程中使用的基础语法格式。其中declare是声明变量用的。在begin下面可以初始化游标、变量。现在要实现一个查询动态sql就可以:

     

    oracle存储过程中如何使用动态sql
  4.  

    由以上图可以看到:v_select_sql就是一个动态sql,为了实现一个完整的查新语句,用了‘||’来拼接完成的,前段是select 后段是where 条件。那么我们可以现在来测试一下,真正要执行的v_select_sql是个什么样,测试一下

     

    oracle存储过程中如何使用动态sql
  5.  

    看到了:就是一个简单的我们平时写的正常查询语句。那么我们如何去执行它呢?

    使用execute immediate v_select_sql;这样就可以执行查询了。

     

    oracle存储过程中如何使用动态sql
  6.  

    究竟为什么要使用动态sql呢?

    首先,它减少了编译错误。如果上述表frtm_rule在数据库中不存在,那么,在编译的过程中仍然不会报错。现在我把表名改了,可以测试一下仍然可以编译成功

     

    oracle存储过程中如何使用动态sql
  7.  

    仍然显示已执行。

    其次,就是可以动态的拼接sql,减少了代码的重复性,能够在判断条件下重复使用sql代码。

     

    END

注意事项

 
  • 虽然这个示例非常简单,但是里边的很多细节都是在开发过程中都是非常重要的。
  • 重点掌握动态sql的使用方法及如何在pl/sql中进行操作测试也是非常重要的。
  • 如果帮到了您,请您投上一票,非常感谢。

 

 

##########sample 2

sql基本教程:[3]oracle动态语句

听语音
  • 原创
  • |
  • 浏览:473
  • |
  • 更新:2014-12-27 18:38
  • |
  • 标签:oracle 
  • sql基本教程:[3]oracle动态语句1
  • sql基本教程:[3]oracle动态语句2
  • sql基本教程:[3]oracle动态语句3
  • sql基本教程:[3]oracle动态语句4
  • sql基本教程:[3]oracle动态语句5
  • sql基本教程:[3]oracle动态语句6
  • sql基本教程:[3]oracle动态语句7
分步阅读

接着往下说关于oracle动态sql语句方面的东西。

1,依然是基础篇,面向初学者,这里并不会涉及到很高深的东西,

2,请注重基础知识。

工具/原料

 
  • 电脑
  • oracle数据库

方法/步骤

 
  1. 1

    这里是测试时候写的全部代码,都是能够正确执行的,往下是分别讲解。

    sql基本教程:[3]oracle动态语句
    sql基本教程:[3]oracle动态语句
    sql基本教程:[3]oracle动态语句
    sql基本教程:[3]oracle动态语句
    sql基本教程:[3]oracle动态语句
  2. 2

    这里是一个简单的if判断语句,这个不多说,没有什么难度。

    sql基本教程:[3]oracle动态语句
  3. 3

    下面这个是一个for循环,循环的条件介于21到25之间,两边都是包含的。

    sql基本教程:[3]oracle动态语句
  4. 4

    在往下这个是case when语句,如果是...就...,此例如果今天是星期一,就输出一句话。

    sql基本教程:[3]oracle动态语句
    END

注意事项

 
  • 以上为开发者适用!

 

 

##########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;

 

posted @ 2016-11-30 15:07  feiyun8616  阅读(397)  评论(0编辑  收藏  举报