SQL函数中的动态执行语句
一。为什么要使用动态执行语句?
由于在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之前,且都在单引号外面。
- 注意写上必要的异常错误处理。
SQL函数中的动态执行语句的更多相关文章
- sql server中如何查看执行效率不高的语句
sql server中,如果想知道有哪些语句是执行效率不高的,应该如何查看呢?下面就将为您介绍sql server中如何查看执行效率不高的语句,供您参考. 在测量功能时,先以下命令清除sql se ...
- [SQL] sql server中如何查看执行效率不高的语句
sql server中,如果想知道有哪些语句是执行效率不高的,应该如何查看呢?下面就将为您介绍sql server中如何查看执行效率不高的语句,供您参考.在测量功能时,先以下命令清除sql serve ...
- 使用CASE表达式替代SQL Server中的动态SQL
原文:使用CASE表达式替代SQL Server中的动态SQL 翻译自: http://www.mssqltips.com/sqlservertip/1455/using-the-case-expre ...
- Oracle动态执行语句
一.为什么要使用动态执行语句? 由于在PL/SQL 块或者存储过程中只支持DML语句及控制流语句,并不支持DDL语句,所以Oracle动态执行语句便应允而生了.关于DDL与DML的区别,请参见:D ...
- SQL 2005 中查询或执行另外的数据库操作的方法
原文:SQL 2005 中查询或执行另外的数据库操作的方法 摘要: 如果,你想在一台数据库服务器上,查询另一个台数据服务器的数据该如何做呢?如果,你想在同一台数据服务器上,在不同的数据库之间查询数据, ...
- 关于tf.cond函数中“正确”与“错误”函数中的普通python语句始终执行的问题
import tensorflow as tf import numpy as np x = tf.constant(2) y = tf.constant(3) global mask0 mask0 ...
- oracle 关于动态执行语句 execute immediate 的用法
当在开发的应用场景中 数据库处理复杂业务逻辑里用到 SQL 语句拼接 可以用 execute immediate 来执行语 举个例子 insert into tb_temp_public( ...
- SQL Server中UPDATE和DELETE语句结合INNER/LEFT/RIGHT/FULL JOIN的用法
在SQL Server中,UPDATE和DELETE语句是可以结合INNER/LEFT/RIGHT/FULL JOIN来使用的. 我们首先在数据库中新建两张表: [T_A] CREATE TABLE ...
- PL/SQL 报错:动态执行表不可访问,本会话的自动统计被禁止。 在执行菜单里你可以禁止统计,或在v$session,v$sesstat 和vSstatname表里获得选择权限。
现象: 第一次用PL/SQL Developer连接数据库,若用sys用户登录并操作则正常,若用普通用户比如haishu登录并创建一个表则报错“动态执行表不可访问,本会话的自动统计被禁止.在执行菜单里 ...
随机推荐
- Android开发经验记录
一. 代码规范 定一个规范的主要目的,是为了让不同的开发人员写的代码能保持一致性,方便别人看自己的代码.另外,对个人来说,也能起到让自己看着舒服的作用. 1. 基本 * 使用UTF-8 ...
- 8 Things Every Person Should Do Before 8 A.M.
https://medium.com/@benjaminhardy/8-things-every-person-should-do-before-8-a-m-cc0233e15c8d 1. Get A ...
- WordPress 3.8.1 /xmlrpc.php拒绝服务漏洞
漏洞版本: WordPress 3.8.1 漏洞描述: WordPress是一款内容管理系统. WordPress 3.8.1 /xmlrpc.php 文件有ping其他主机的功能,通过这个功能可以请 ...
- NOI2006最大获利
终于搞明白了…… x到y有边意味着选x必须选y,所以才会有闭合子图中一个点的后继一定也在这个闭合子图中. 接下来按照s连正权,负权连t就ok了 type node=record go,next,c:l ...
- RMI、RPC、SOAP通信技术介绍及比对
1.RMI 使用java的程序员,对于RMI(RemoteMethod Invoke,远程方法调用)一定不陌生,在java中,为了在分布式应用开发时,能够方便调用远程对象,java提供了RMI的API ...
- Python开发环境
--> Python开发环境简备 Python的优点除了其自身的各种特点外,还因为有众多第三方模块,为其扩展了各方面无数的功能. 虽然大多数时候在百度上随便搜都能搜到一大把,pypi (http ...
- 扩展Oracle表空间
1. 查看当前表空间利用率SELECT UPPER(F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB "表空间大小(M)" ...
- SharePoint Security and Permission System Overview
转:http://www.sharepointblues.com/2010/09/01/sharepoint-security-and-permission-system-overview/ Shar ...
- [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.5.7
Prove that for any vectors $$\bex u_1,\cdots,u_k,\quad v_1,\cdots,v_k, \eex$$ we have $$\bex |\det(\ ...
- java jvm学习笔记八(实现jar包的代码签名)
欢迎装载请说明出处:http://blog.csdn.net/yfqnihao/article/details/8267669 课程源码:http://download.csdn.net/detai ...