Oracle中EXECUTE IMMEDIATE用法
一般的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不会再去理会这个对象是否存在,因此可以成功编译和执行。
- 在PL/SQL运行DDL语句
begin execute immediate 'set role all';
end;
- 给动态语句传值(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;
- 从动态语句检索值(INTO子句)
declare l_cnt varchar2(20);
begin execute immediate 'select count(1) from emp' into l_cnt; dbms_output.put_line(l_cnt);
end;
- 动态调用例程.例程中用到的绑定变量参数必须指定参数类型,黓认为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;
- 将返回值传递到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;
- 传递并检索值.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;
- 多行查询选项.对此选项用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用法相关推荐
- Oracle中EXECUTE IMMEDIATE的使用技巧
http://database.ctocio.com.cn/38/12238038.shtml EXECUTE IMMEDIATE代替了以前Oracle中DBMS_SQL package包. 下面就为 ...
- oracle中类似indexof用法_instr函数
oracle中类似indexof用法_instr函数 [sql] 在oracle中没有indexof()函数 但是提供了一个 instr() 方法 具体用法: select instr('保定市南市区 ...
- Oracle中group by用法
Oracle中group by用法 在select 语句中可以使用group by 子句将行划分成较小的组,一旦使用分组后select操作的对象变为各个分组后的数据,使用聚组函数返回的是每一个组的汇总 ...
- oracle 的wecate函数,1.Oracle中decode()函数用法
1.Oracle中decode函数用法 含义解释: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下: IF 条件=值1 THEN RETURN(翻 ...
- oracle中col 的用法,Oracle中的SUM用法讲解,
Oracle中的SUM用法讲解, Oracle中的SUM条件查询 1.按照区域编码分组查询区域编码.IPTV_NBR不为空的数量.ACC_NBR不为空的数量.所有用户数量 SELECT AREA_CO ...
- oracle多表groupby,Oracle中group by用法
Oracle中group by用法 在带有group by 子句的查询语句中,在select 列表中指定的列要么是group by 子句中指定的列,要么包含聚组函数 简单用法 select max(s ...
- oracle+decode函数用法,oracle中decode函数用法
oracle中decode函数用法以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! DECODE函数相当于一条件语句(IF ...
- 【软件测试】Oracle中的rownum用法
一.对rownum的说明 查看全文 http://www.taodudu.cc/news/show-3538609.html 相关文章: Oracle rownum 用法 Oracle rownum ...
- oracle union详解,oracle union用法 oracle中union的用法
oracle中union的用法 只知道是用来左联接的,还有类似union all,谁有这个例子,要解释详细一点的一生中要有两次冲动,一次奋不顾身的爱情,一次为说走就走的旅行. UNION 指令的目的是 ...
- oracle数据库insert into,oracle中insert into用法 oracle中insert如何带条件添加数据?
oracle insert into 脚本怎么写 INSE INTO BOOK(bookid,name,price) VALUES('100123','oracle ',54); 或者 INSE IN ...
最新文章
- 算法总结---最常用的五大算法(算法题思路)
- RHEL7 下双网卡绑定做主备(冗余)
- java 常量池详解
- C#生成安装文件后自动附加数据库的思路跟算法
- 解决undefined reference to symbol ‘sem_close@@GLIBC_2.2.5‘问题
- Maximum Subarray leetcode java
- 吴恩达机器学习【第一天】
- Linux系统管理(10)——Centos8 重启网络服务 网络相关命令
- oracle 修改列类型6,Oracle用户、权限、角色管理 编辑
- 苹果Mac矢量图形设计工具:Affinity Designer Beta
- MAC环境配置SDK
- 部署KMS激活后用户端一些情况的确认
- SQL 判断表是否存在
- 软件测试的岗位划分和主要工作内容是怎样的?
- matlab矩阵求和速度慢,matlab – 将完整矩阵转换为完整矩阵的速度很慢?
- 【神经网络分类器】(三)深度学习发展史——从深度信念网络到AlexNet
- android音乐视频播放器,android音乐视频播放器.doc
- 汽车4G车载TBOX智能终端
- Android如何做出带有复杂水印的图片
- 宏基因组分析-基于组装