Oracle 动态SQL

目录

一、动态SQL和静态SQL

1.1. 静态SQL

1.2. 动态SQL

1.3. 两者的异同

1.4. 动态SQL语句的几种方法

二、动态SQL的语法

二、举例演示

2.1 给动态语句传值(USING 子句)

2.2 从动态语句检索值(INTO子句)

2.3  传递并检索值 (INTO用在USING子句前)

2.4 获取返回结果(returning/return 子句)

2.4  动态调用例程

2.5 动态SQL操控游标

2.6 获得修改前的的数据


    动态SQL是在运行时动态构建和执行的SQL语句。与静态SQL相比,动态SQL的主要优势是可以根据不同条件生成不同的查询语句,从而提供更灵活的查询能力。动态SQL在处理复杂查询逻辑、动态过滤条件和动态列选择等方面非常有用。Oracle 动态SQL有两种写法:用 DBMS_SQL 或 execute immediate。

一、动态SQL和静态SQL

1.1. 静态SQL

    静态SQL通常用于完成可以确定的任务。在第一次运行时进行编译,而后续再次调用,则不再编译该过程。即一次编译,多次调用,使用的相同的执行计划。此种方式被称之为使用的是静态的SQL。      

1.2. 动态SQL

    动态SQL通常是用来根据不同的需求完成不同的任务。对于输入不同的参数,SQL在每次运行时需要事先对其编译。即多次调用则需要多次编译,此称之为动态SQL。

    动态SQL语句通常存放在字符串变量中,且SQL语句可以包含占位符(使用冒号开头)。也可以直接将动态SQL紧跟在EXECUTE IMMEDIATE语句之后,如EXECUTE IMMEDIATE 'alter table emp enable row movement'

1.3. 两者的异同

  • 静态SQL为直接嵌入到PL/SQL中的代码,而动态SQL在运行时,根据不同的情况产生不同的SQL语句。
  • 静态SQL为在执行前编译,一次编译,多次运行。动态SQL同样在执行前编译,但每次执行需要重新编译。
  • 静态SQL可以使用相同的执行计划,对于确定的任务而言,静态SQL更具有高效性。但缺乏灵活性
  • 动态SQL使用了不同的执行计划,效率不如静态SQL,但能够解决复杂的问题。
  • 动态SQL容易产生SQL注入,为数据库安全带来隐患。

1.4. 动态SQL语句的几种方法

a.使用EXECUTE IMMEDIATE语句

    包括DDL语句,DCL语句,DML语句以及单行的SELECT 语句。该方法不能用于处理多行查询语句。

b.使用OPEN-FOR,FETCH和CLOSE语句

    对于处理动态多行的查询操作,可以使用OPEN-FOR语句打开游标,使用FETCH语句循环提取数据,最终使用CLOSE语句关闭游标。

c.使用批量动态SQL

   即在动态SQL中使用BULK子句,或使用游标变量时在fetch中使用BULK ,或在FORALL语句中使用BULK子句来实现。

d.使用系统提供的PL/SQL包DBMS_SQL来实现动态SQL。
 

二、动态SQL的语法

2.1 语法描述 

  • into 保存SQL的执行结果,返回多个则使用bulk collect设置保存变量
  • using 为动态SQL的占位符设置内容,默认模式为IN模式
  • returning|return
  • 16
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值