ORACLE

 

--create test table
create table AAA_TEST
(aa varchar2(
100),bb varchar2(100),cc varchar2(50));

--简单的动态执行
begin
  execute immediate 'insert into table(field1) values(value)';
end;

--代参数和返回的动态执行
declare
  v_str varchar2(100);
  v_sql varchar2(
500);
  v_out varchar2(
100);
begin  v_str := 
 '111';
  v_sql :=
 'update aaa_test set aa=''ttt'' where aa=:1 returning aa into :2';
  execute immediate v_sql using v_str returning into v_out;
end;

--使用open-for,fetchclose声明
declare
  type cursorType is ref cursor;
  mycursor cursorType;
  v_sql varchar2(
100);
  v_aa varchar2(
50);
  v_bb varchar2(
100);
begin  v_sql :=
 'select bb from aaa_test where aa like :1';
  v_aa  :=
 '11%';
  open mycursor for v_sql using v_aa;
  loop    fetch mycursor into v_bb;
    exit when mycursor%notfound;
  end loop;
  close mycursor;
end;

--Using Bulking Dynamic Sql(提高性能,减少上下文等待时间)
declare
  type cursorType is ref cursor;
  mycursor cursorType;
  type numList is table of varchar2(
100);
  bbs numList;
  v_sql varchar2(
500);
begin  v_sql :=
 'select bb from aaa_test';
  open mycursor for v_sql;
  fetch mycursor bulk collect into bbs;
  close mycursor;
 
  execute immediate v_sql
    bulk collect into bbs;
end;

--第二种参数方式的动态Sql性能更优
execute immediate 'delete from table1 where empno =' || v_str;
execute immediate
 'delete from table1 where empno = :1' 
--但参数绑定方式对表,视图等对象不适用,因此下面报错
execute immediate 'drop table :tab' using v_tablename

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值