Oracle动态执行语句
由于在PL/SQL 块或者存储过程中只支持DML语句及控制流语句,并不支持DDL语句,所以Oracle动态执行语句便应允而生了。关于DDL与DML的区别,请参见:DDL语句与DML语句及DCL和TCL。
二。动态执行语句怎么用?
动态执行语句代替了Oracle 8i中的DBMS_SQL Package包。
1)在PL/SQL中运行SQL语句,例如:
示例一:
BEGIN
EXECUTE IMMEDIATE 'select count(username) from user_users'; --DML(每条语句必须以分号结尾)
END;
示例二:
BEGIN
EXECUTE IMMEDIATE 'ALTER TABLE a RENAME TO EXAMPLE'; --DDL
END;
你可能会问不是只DDL语句需要用动态语句执行吗?是的,你说的完全正确。但是DML语句用动态语句执行也可以。
即:DDL语句只能用动态执行语句来执行,DML语句亦可用动态语句来执行。
2)使用using给动态语句传值,例如:
DECLARE
e_name VARCHAR2(10); --声明变量e_name
e_age INT; --声明变量e_age
BEGIN
e_name := 'sillylaura'; --给变量e_name赋值
e_age := 21; --给变量e_age 赋值
EXECUTE IMMEDIATE 'insert into Example values(seq_add_by_one.nextval,:2,:3)' using e_name,e_age; --DML END;
3)使用动态语句赋值(select 列名 into 变量 from ……)
DECLARE
temp INT;
BEGIN
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM dual' INTO temp; --DML
dbms_output.put_line(temp);
END;
4)传递并检索值:into用在using之前。
DECLARE
temp INT;
test VARCHAR2(10);
BEGIN
test := 'ok';
EXECUTE immediate 'SELECT COUNT(*) FROM dual where dummy = :1 GROUP BY dummy' INTO temp USING test;
dbms_output.put_line(temp ||' '|| test);
EXCEPTION WHEN OTHERS THEN
dbms_output.put_line('It has no data!');
END;
三。动态语句小结
- DDL语句只能用动态执行语句来执行,DML语句亦可用动态语句来执行。
- 在使用select……into子句为变量赋值时,into字句必须写在单引号外面。
- 在同时使用select……into子句和using时,注意二者的顺序:into用在using之前,且都在单引号外面。
- 注意写上必要的异常错误处理。
Oracle动态执行语句的更多相关文章
- SQL函数中的动态执行语句
一.为什么要使用动态执行语句? 由于在PL/SQL 块或者存储过程中只支持DML语句及控制流语句,并不支持DDL语句,所以Oracle动态执行语句便应允而生了.关于DDL与DML的区别,请参见:DDL ...
- Oracle动态执行表不可访问解决方法
在scott 用户下,执行查询语句是出现“Oracle动态执行表不可访问” 经查,是因为用户权限不够所致,修改scott用户权限语句如下: grant select on V_$session to ...
- Oracle动态执行表不可访问
在scott 用户下,执行查询语句是出现"Oracle动态执行表不可访问" 经查,是因为用户权限不够所致,修改scott用户权限语句如下: grant select on V_$s ...
- [转]ORACLE 动态执行SQL语句
本文转自:http://zhaisx.iteye.com/blog/856472 Oracle 动态SQLOracle 动态SQL有两种写法:用 DBMS_SQL 或 execute immediat ...
- oracle 关于动态执行语句 execute immediate 的用法
当在开发的应用场景中 数据库处理复杂业务逻辑里用到 SQL 语句拼接 可以用 execute immediate 来执行语 举个例子 insert into tb_temp_public( ...
- ORACLE 动态执行SQL语句
本文转自 http://zhaisx.iteye.com/blog/856472 Oracle 动态SQL Oracle 动态SQL有两种写法:用 DBMS_SQL 或 execute immedia ...
- Oracle 函数中动态执行语句
函数: 1 create or replace function fn_test(tablename in varchar2) return number is sqls ); rtn ):; beg ...
- orcale 动态执行语句
create or replace function fn_test2(tablename in varchar2) return number is rtn number; begin --通用的获 ...
- Oracle动态执行脚本创建序号
-----------------------动态创建序列的脚本--------------------------- declare type num_list ) ); -- 老师表.学生表 xz ...
随机推荐
- 【CMD】日常总结
命令脚本可以提升工作效率,之前用过也写过一些脚本,但时间一长就忘记了.写篇随笔记录一下,随用随记哈. 调用程序 //切换到某个路径下 cd D:\Glodon\GDW\GDW\Release\Bin ...
- Python GUI编程--Tkinter
今天看到了GUI编程,书上推荐用wxPython,去官网上看了看,发现Windows的最高支持到2.7,我用的是3.4版本,咋办,用自带的库--Tkinter呗,它是Python的默认GUI库,几乎是 ...
- Mysql 变量使用
mysql 中可以将所查询到的数据用变量存储下来,供后面使用 语法:SELECT @变量名 := 变量值 eg: SELECT @cid:=class_id, (SELECT class_name F ...
- C# 获取本机指定类型指定网卡的Ip地址
1.简单方式 ,适用于单网卡 string hostName = Dns.GetHostName(); IPAddress[] addresses = Dns.GetHostAddresses(hos ...
- Emgu CV播放视频
public partial class Form1 : Form { Capture _capture; public Form1() { Initializ ...
- [UCSD白板题] Least Common Multiple
Problem Introduction The least common multiple of two positive integers \(a\) and \(b\) is the least ...
- C#is运算符的作用
is运算符的含义:检查对象是不是给定类型,或者是否可以转换为给定类型,如果是,这个运算符就返回True. is运算符的语法:<operand> is <type> 这个表达式的 ...
- 十分钟能学会的框架,MVC+20个常用函数
LazyPHP(以下简称LP)是一个轻框架. 之所以开发这么一个框架,是因为其他框架给的太多.在高压力的情况下,ORM和盘根错节的对象树反而将简单的页面请求处理复杂化,在调试和性能上带来反面效果. L ...
- Eclipse中支持js提示
使用eclipse自带的插件,无需另外安装插件,具体步骤如下 1.打开eclipse→Windows→Preferences→Java→Editor→Content Assist 修改Auto Act ...
- i love matlab
新手上路~话说图像修复熟么的真的很有意思~忽的想起NG讲的一个笑话:它让我赚了很多钱,买了车子,买了房子,so what's that? It's Matlab <( ̄3 ̄)> 前两天一直 ...