动态SQL,静态SQL

什么情况下适合使用动态SQL

1.执行DDL
比如alter table , drop table , create table等,只能用动态SQL
2。sql中的table / column信息不明的
比如,table_name在写procudre时未知
sql_text := 'select * from '||table_name ;
execute immediate sql_text ;

动态SQL使用绑定变量例子

代码:
      
      

tkyte
@TKYTE816> declare
  
2      l_number number;
  
3  begin
  4      
for i in 1 .. 10000
  5      loop
  6          l_number
:= dbms_random.random;
  
7
  8          execute immediate
  9          
'insert into t values ( :x1, :x2, :x3, :x4 )'
10                  using l_number, l_number, l_number, l_number;
11      end loop;
12      commit;
13  end;
14  /


静态SQl使用绑定变量的例子

代码:


代码:




tkyte
@TKYTE816> declare

  
2      l_number number;

  
3  begin

  4      
for i in 1 .. 10000

  5      loop

  6          l_number
:= dbms_random.random;

  
7

  8          insert into t

  9                  values
( l_number, l_number, l_number, l_number );

10      end loop;

11      commit;

12  end;

13  /


代码:
    
    

tkyte
@TKYTE816> declare
  
2      l_number number;
  
3  begin
  4      
for i in 1 .. 10000
  5      loop
  6          l_number
:= dbms_random.random;
  
7
  8          execute immediate
  9          
'insert into t values ( :x1, :x2, :x3, :x4 )'
10                  using l_number, l_number, l_number, l_number;
11      end loop;
12      commit;
13  end;
14  /


静态SQl使用绑定变量的例子

代码:


代码:




tkyte
@TKYTE816> declare

  
2      l_number number;

  
3  begin

  4      
for i in 1 .. 10000

  5      loop

  6          l_number
:= dbms_random.random;

  
7

  8          insert into t

  9                  values
( l_number, l_number, l_number, l_number );

10      end loop;

11      commit;

12  end;

13  /


静态SQL+绑定变量,避免了硬分析和软分析
动态SQL+绑定变量,避免了硬分析,但不能避免软分析(第一次运行仍然是要硬分析)

使用了绑定变量
优点,可以利用共享池,不需要重新编译可以重用,提高SQL语句的软解析率,降低硬解析率
缺点,SQL优化器得到的信息减少了,可能得不到最优的执行计划。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值