一般的PL/SQL程序设计中,在DML和事务控制的语句中可以直接使用SQL,但是DDL语句及系统控制语句却不能在PL/SQL中直接使用,要想实现在PL/SQL中使用DDL语句及系统控制语句,可以通过使用动态SQL来实现。
  在Oracle数据库开发PL/SQL块中我们使用的SQL分为:静态SQL语句和动态SQL语句。所谓静态SQL 指在PL/SQL块中使用的SQL语句在编译时是明确的,执行的是确定对象。而动态SQL是指在PL/SQL块编译时SQL语句是不确定的,如根据用户输入的参数的不同而执行不同的操作。编译程序对动态语句部分不进行处理,只是在程序运行时动态地创建语句、对语句进行语法分析并执行该语句。

简单来说 就是你一个存储过程当中 创建了一个表 table_a
然后要用insert into将其他的数据插入到这个table_a当中,但是因为你在创建过程的时候
table_a还不存在,存过就会显示有编译错误,因为table_a不存在必然导致无法执行,所以无法编译成功,
而把insert into语句加如到 execute immediate之后,则oracle不会再去理会这个对象是否存在,因此可以成功编译和执行。

  1. 在PL/SQL运行DDL语句
begin   execute immediate 'set role all';
end;
  1. 给动态语句传值(USING 子句)
declare   l_depnam  varchar2(20) := 'testing';   l_loc     varchar2(10) := 'D?i';   begin   execute immediate 'insert into dept vals   (:1, :2, :3)'   using 50, l_depnam, l_loc;   commit;
end;
  1. 从动态语句检索值(INTO子句)
declare   l_cnt  varchar2(20);
begin   execute immediate 'select count(1) from emp'   into l_cnt;   dbms_output.put_line(l_cnt);
end;
  1. 动态调用例程.例程中用到的绑定变量参数必须指定参数类型,黓认为IN类型,其它类型必须显式指定
declare   l_routin    varchar2(100) := 'gen2161.get_rowcnt';   l_tblnam    varchar2(20) := 'emp';   l_cnt       number;   l_status    varchar2(200);
begin   execute immediate 'begin ' || l_routin || '(:2, :3, :4); end;'   using in l_tblnam, out l_cnt, in out l_status;   if l_status != 'OK' then   dbms_output.put_line('error');   end if;
end;
  1. 将返回值传递到PL/SQL记录类型;同样也可用%rowtype变量
declare   type empdtlrec is record (empno   number(4),   ename   varchar2(20),   deptno   number(2));   empdtl empdtlrec;
begin   execute immediate 'select empno, ename, deptno ' ||   'from emp where empno = 7934'   into empdtl;
end;
  1. 传递并检索值.INTO子句用在USING子句前
declare   l_dept     pls_integer := 20;   l_nam      varchar2(20);   l_loc      varchar2(20);
begin   execute immediate 'select dname, loc from dept where deptno = :1'   into l_nam, l_loc   using l_dept ;
end;
  1. 多行查询选项.对此选项用insert语句填充临时表,用临时表进行进一步的处理,也可以用REF cursors纠正此缺憾.
declare   l_sal  pls_integer := 2000;
begin   execute immediate 'insert into temp(empno, ename) '||'select empno, ename from emp '||'where sal > :1'   using l_sal;   commit;
end;

Oracle中EXECUTE IMMEDIATE用法相关推荐

  1. Oracle中EXECUTE IMMEDIATE的使用技巧

    http://database.ctocio.com.cn/38/12238038.shtml EXECUTE IMMEDIATE代替了以前Oracle中DBMS_SQL package包. 下面就为 ...

  2. oracle中类似indexof用法_instr函数

    oracle中类似indexof用法_instr函数 [sql] 在oracle中没有indexof()函数 但是提供了一个 instr() 方法 具体用法: select instr('保定市南市区 ...

  3. Oracle中group by用法

    Oracle中group by用法 在select 语句中可以使用group by 子句将行划分成较小的组,一旦使用分组后select操作的对象变为各个分组后的数据,使用聚组函数返回的是每一个组的汇总 ...

  4. oracle 的wecate函数,1.Oracle中decode()函数用法

    1.Oracle中decode函数用法 含义解释: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下: IF 条件=值1 THEN RETURN(翻 ...

  5. oracle中col 的用法,Oracle中的SUM用法讲解,

    Oracle中的SUM用法讲解, Oracle中的SUM条件查询 1.按照区域编码分组查询区域编码.IPTV_NBR不为空的数量.ACC_NBR不为空的数量.所有用户数量 SELECT AREA_CO ...

  6. oracle多表groupby,Oracle中group by用法

    Oracle中group by用法 在带有group by 子句的查询语句中,在select 列表中指定的列要么是group by 子句中指定的列,要么包含聚组函数 简单用法 select max(s ...

  7. oracle+decode函数用法,oracle中decode函数用法

    oracle中decode函数用法以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! DECODE函数相当于一条件语句(IF ...

  8. 【软件测试】Oracle中的rownum用法

    一.对rownum的说明 查看全文 http://www.taodudu.cc/news/show-3538609.html 相关文章: Oracle rownum 用法 Oracle rownum ...

  9. oracle union详解,oracle union用法 oracle中union的用法

    oracle中union的用法 只知道是用来左联接的,还有类似union all,谁有这个例子,要解释详细一点的一生中要有两次冲动,一次奋不顾身的爱情,一次为说走就走的旅行. UNION 指令的目的是 ...

  10. oracle数据库insert into,oracle中insert into用法 oracle中insert如何带条件添加数据?

    oracle insert into 脚本怎么写 INSE INTO BOOK(bookid,name,price) VALUES('100123','oracle ',54); 或者 INSE IN ...

最新文章

  1. 算法总结---最常用的五大算法(算法题思路)
  2. RHEL7 下双网卡绑定做主备(冗余)
  3. java 常量池详解
  4. C#生成安装文件后自动附加数据库的思路跟算法
  5. 解决undefined reference to symbol ‘sem_close@@GLIBC_2.2.5‘问题
  6. Maximum Subarray leetcode java
  7. 吴恩达机器学习【第一天】
  8. Linux系统管理(10)——Centos8 重启网络服务 网络相关命令
  9. oracle 修改列类型6,Oracle用户、权限、角色管理 编辑
  10. 苹果Mac矢量图形设计工具:Affinity Designer Beta
  11. MAC环境配置SDK
  12. 部署KMS激活后用户端一些情况的确认
  13. SQL 判断表是否存在
  14. 软件测试的岗位划分和主要工作内容是怎样的?
  15. matlab矩阵求和速度慢,matlab – 将完整矩阵转换为完整矩阵的速度很慢?
  16. 【神经网络分类器】(三)深度学习发展史——从深度信念网络到AlexNet
  17. android音乐视频播放器,android音乐视频播放器.doc
  18. 汽车4G车载TBOX智能终端
  19. Android如何做出带有复杂水印的图片
  20. 宏基因组分析-基于组装

热门文章

  1. errorcode 微信分享_分享错误码
  2. curiosity_mars_rover调试
  3. 网络学习 2g 3g 4g 5g技术对比
  4. selenium: 网页打开最大化
  5. MATLAB中怎么表示对数函数及e
  6. 狂神ajax,Ajax 学习笔记 by狂神说
  7. 【3D建模制作技巧分享】用3dsmax制作炫酷的机器人模型
  8. 【免费-LOGO制作】——U钙网
  9. 2018校招-挂面-H3C-技术支持工程师
  10. 计算机应用英语app,学英语必备的9款APP,学生党都在用