登录  /  注册
oracle 动态语句 三种写法
php中文网
发布: 2016-06-07 15:50:25
原创
980人浏览过

SQL语句有两种方式,三种写法 Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情况属于这种类型;另外一种是后期联编(late binding) 4)由于动态SQL是在运行时刻进行确定的,所以相对

SQL语句有两种方式,三种写法

Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情况属于这种类型;另外一种是后期联编(late binding)

4)由于动态SQL是在运行时刻进行确定的,所以相对于静态而言,其更多的会损失一些系统性能来换取其灵活性。

静态和动态 只是不同的方式 涉及的是前期和后期联编

对象信息之类的,语法检查,对象检查

三种写法

固定SQL,绑定变量SQL,硬编码SQL

动态分别这三种
1 sql='select * from table where name='李三''
2 sql='select * from table where name=:p_name'
3 sql='select * from table where name='||p_name;

declare
vc_sql varchar2(1000);
i number;
begin

i := 10;
vc_sql := 'select /*+ demo 1*/ * from t where object_id=10';
execute immediate vc_sql;

vc_sql := 'select /*+ demo 2*/ * from t where object_id=:1';
execute immediate vc_sql using i;

vc_sql := 'select /*+ demo 3*/ * from t where object_id='||i;
execute immediate vc_sql;

i := 20;
vc_sql := 'select /*+ demo 1*/ * from t where object_id=10';
execute immediate vc_sql;

vc_sql := 'select /*+ demo 2*/ * from t where object_id=:1';
execute immediate vc_sql using i;

vc_sql := 'select /*+ demo 3*/ * from t where object_id='||i;
execute immediate vc_sql;

end;
/

SQL> select sql_text from v$sqlarea where sql_text like 'select /*+ demo %' order by sql_text;

SQL_TEXT
------------------------------
select /*+ demo 1*/ * from t where object_id=10

select /*+ demo 1*/ * from t where object_id=20

select /*+ demo 2*/ * from t where object_id=:1

select /*+ demo 3*/ * from t where object_id=10

select /*+ demo 3*/ * from t where object_id=20


如果重复执行 条件不变的话 3种方式都能重用,

如果 条件发生变化,

第一种字面写死的能重用,

第二种 绑定变量 基本能重用 ORACLE 10G以后 会窥视变量的值, 如果存数据分布信息 可能重新生成执行计划.

第三种参数化 会因为条件值发生改变不发生重用,


静态SQL语句 只是取消掉了引号的 ,没有execute immediate 基本跟上面形似一样

来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 技术文章
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2023 //m.sbmmt.com/ All Rights Reserved | 苏州跃动光标网络科技有限公司 | 苏ICP备2020058653号-1

 | 本站CDN由 数掘科技 提供

登录PHP中文网,和优秀的人一起学习!
全站2000+教程免费学