动态sql(使用本机动态sql)

1.生成一个表

 

begin
execute  immediate
' create table yourtable(
yourrow number,
yourdesc varchar2(20)) tablespace tabs
' ;
end ;
/

2、insert 数据

 

declare
v_yournum 
number ;
v_yourdesc 
varchar2 ( 50 );
v_insert_stmt 
varchar2 ( 100 );
begin
v_insert_stmt :
=   ' insert into yourtable values(:1,:2) ' ;

v_yournum :
=   1 ;
v_yourdesc :
=   ' one ' ;

execute  immediate v_insert_stmt using v_yournum,v_yourdesc;

v_yournum :
=   2 ;
v_yourdesc :
=   ' two ' ;

execute  immediate v_insert_stmt using v_yournum,v_yourdesc;
end ;
/

3、查询

 

set  serveroutput  on ;
declare  
type your_cursor_type 
is  ref  cursor ;
your_cursor your_cursor_type;

type dyn_record 
is  record(
yourrow yourtable.yourrow
% type,
yourdesc yourtable.yourdesc
% type);

dyn_rec dyn_record;
dynamic_select 
varchar2 ( 500 );
begin
dynamic_select :
=   ' select * from yourtable order by yourrow ' ;

open  your_cursor  for  dynamic_select;

loop
fetch  your_cursor  into  dyn_rec;
exit   when  your_cursor % notfound;

dbms_output.put_line(dyn_rec.yourrow
|| '     ' || dyn_rec.yourdesc);
end  loop;

close  your_cursor;
end ;
/

4、pl/sql 块

 

-- pl/sql block
declare
block_to_exec 
varchar2 ( 500 ) : =   '
begin
select * into :1,:2 from yourtable where yourrow=2;
end;
' ;
yourrow 
number ;
yourdesc yourtable.yourdesc
% type;
begin  
execute  immediate block_to_exec using out yourrow, out yourdesc; -- 默认为in
dbms_output.put_line(yourrow || '     ' || yourdesc);
end ;
   /
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值