PL/SQL中直接写SQL语句和用EXECUTE IMMEDIATE方法的区别

时间:2022-05-06 00:15:54

PL/SQL中直接写SQL语句和用EXECUTE IMMEDIATE方法的区别

在PL/SQL中在执行SQL语句时可以直接写SQL或者可以把一个SQL语句拼成一个字符串,如下:
select * from dual;
v_sql:='select * from dual'; EXECUTE IMMEDIATE v_sql;
一般来说直接写SQL的性能是高于拼字符串的,因为如果执行拼字符串的需要内部自动调动oracle机制,先解析字符串映射成SQL语句然后再执行。
但是拼SQL的方式有好处。即SQL语句是一个字符串可以动态拼接,根据不同的条件来改变SQL语句,这是直接写SQL所不能达到的。
拼SQL还有个好处就是 v_sql:='select * from tables t where t.c_date=:1 and t.name=:2';  EXECUTE IMMEDIATE v_sql USING '20130304','xiaoming';
可以动态的对参数传递值,这是最大的优势。
在PL/SQL中定义一个变量  v_date varchar2,如果直接写SQL可以 直接写变量  v_date
如果是拼SQL则是 v_sql:='select * from tables t where t.c_date='''||v_date||'''';  这样在执行的时候打印出来的SQL就是 select * from tables t where t.c_date=’20130304‘'
如果是v_sql:='select * from tables t where t.c_date='||v_date||'';  这样在执行的时候打印出来的SQL就是 select * from tables t where t.c_date=20130304;  这里c_date如果是varchar2类型,则这里oracle要隐式的进行数字到字符串的转换  ,影响性能

PL/SQL中直接写SQL语句和用EXECUTE IMMEDIATE方法的区别的更多相关文章

  1. PL/SQL中批量执行SQL脚本(不可把所有的语句都复制到New SQL Windows)

    PL/SQL中批量执行SQL脚本,不可把所有的语句都复制到New SQL Window,因为这样会导致缓冲区过大而进程卡死! 最好的办法是将要执行的SQL脚本存放到指定文件中,如C:\insert.s ...

  2. SQL中批量删除被注入的恶意代码的方法

    下文将为您介绍SQL中批量删除被注入的恶意代码的方法,供您参考,如果您也遇到了这样的问题,不妨一看,相信对您会有所帮助. 1,如果你的数据表很少的话,那么写几条简单的sql就搞定了 对于表中的nvch ...

  3. 转【】浅谈sql中的in与not in,exists与not exists的区别_

    浅谈sql中的in与not in,exists与not exists的区别   1.in和exists in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表 ...

  4. 浅谈sql中的in与not in,exists与not exists的区别

    转 浅谈sql中的in与not in,exists与not exists的区别   12月12日北京OSC源创会 —— 开源技术的年终盛典 »   sql exists in 1.in和exists ...

  5. 在mysql中如何写注释语句

    //在mysql中如何写注释语句 mysql; # 这个注释直到该行结束 mysql; -- 这个注释直到该行结束 mysql ; mysql+ /* 这是一个 多行注释的形式 */ ;

  6. 在程序开发中怎样写SQL语句可以提高数据库的性能

    以下内容是公司dba总结. 1. 首先要搞明白什么叫执行计划?   执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的,比如一条SQL语句如果用来 ...

  7. Spark SQL中列转行(UNPIVOT)的两种方法

    行列之间的互相转换是ETL中的常见需求,在Spark SQL中,行转列有内建的PIVOT函数可用,没什么特别之处.而列转行要稍微麻烦点.本文整理了2种可行的列转行方法,供参考. 本文链接:https: ...

  8. Makefile中代码写在同一行和分开几行写有什么区别?

    在Makefile中,写在同一行的代码就相当于是在Linux中的同一行命令行写的代码一样,是一次性执行的:如程序中如下编写Makefile代码(请注意,两个命令之间应该使用分号“:”来进行分隔): a ...

  9. Java 异常Exception e中e的getMessage()和toString()以及 e.printStackTrace();方法的区别

    Exception e中e的getMessage()和toString()方法的区别: 示例代码1: public class TestInfo {     private static String ...

随机推荐

  1. Final阶段用户调查报告

    组名称:nice! 项目名称:约跑 小组成员:李权(组长).刘芳芳.于淼.宫丽君.韩媛媛 产品下载地址:http://pan.baidu.com/s/1mhIjaS4 问卷时间:2016年12月2号1 ...

  2. 171 Excel Sheet Column Number

    /** * 题意:A表示1 B表示2 AA表示27 AB表示28 ------>给你一串字符串输出相应的数字 * 分析:这个就类似于二进制转十进制,从字符串后面往前遍历,然后pow(26,n)* ...

  3. cf 106C

    题目链接:http://vjudge.net/contest/139376#problem/E 题意看注释就能懂了,求能获得的最大价值. 代码: #include<iostream> #i ...

  4. 摘抄——读《大话移动APP测试 Android与IOS》

    用了两天读完了<大话移动APP测试 Android与IOS>,由于刚开始接触移动测试,技术型的篇章只能先放过了o(╯□╰)o,有以下内容觉得很有必要时不时的看看,来反思自己的工作,自勉!! ...

  5. 20145225《Java程序设计》 2015—2016年学期课程总结

    20145225<Java程序设计> 2015—2016年学期课程总结 读书笔记链接汇总 1.2016年2月25日 <Java程序设计>课程准备之问卷调查 摘要: 一.你对自己 ...

  6. bash shell学习-shell基础 &lpar;笔记&rpar;

    When you hoist the sails to cross the sea, you willride the wind and cleave the waves. "长风破浪会有时 ...

  7. java实现网页爬虫

    接着上面一篇对爬虫需要的java知识,这一篇目的就是在于网页爬虫的实现,对数据的获取,以便分析. -----> 目录:   1.爬虫原理 2.本地文件数据提取及分析 3.单网页数据的读取 4.运 ...

  8. Confluence 6 诊断

    当你对性能进行诊断或者希望知道是什么原因导致 Confluence 崩溃,你希望知道在 Confluence 内部是什么导致这些问题发生的.这个时候系统的诊断信息能够帮助你获得更多的有关的这些信息. ...

  9. return在try&period;&period;&period;except&period;&period;&period;finally&period;&period;&period;中的表现

    一直以为return就直接退出函数了,最近遇到一情况,在try中return,并没有什么卵用,还是会去执行finally里的内容,导致不能正确返回想要的数据 一直以为return就会跳出函数,发现原来 ...

  10. poj2142 The Balance

    poj2142 The Balance exgcd 应分为2种情况分类讨论 显然我们可以列出方程 ax-by=±d 当方程右侧为-d时,可得 by-ax=d 于是我们就得到了2个方程: ax-by=d ...