玖叶教程网

前端编程开发入门

oracle动态游标sql语句代码块的编写

2.动态SQL:

通过使用字符串的方式,对要去执行的sql语句进行拼接,将关键字和变量等信息拼接成一个完成的sqi,通过代码块里面的 execute immediate 进行执行。

--动态sql可以执行任何类型的sql语句;

--动态sql可以结合变量,进行sql的拼接;

--动态sql执行过的sql语句,都会被放入到oracle SGA的共享池,下次再执行这个语句,就不需要再去编译它,取出来之前运行过的结果就可以了,执行的效率会提升。

execute immediate 'sql语句'

into 接收返回值的变量名

using 变量名1,变量名2....;


declare

n varchar2(50):='haha';

e number:=8899;

begin

execute immediate 'insert into emp values('||e||','''||n||''')';

end;


declare

n varchar2(50):='haha';

e number:=8899;

begin

execute immediate 'insert into emp(empno,ename) values(:1,:2)'

using e,n;

end;


declare

n varchar2(50);

v_empno number:=7788;

begin

execute immediate 'select ename from emp where empno=:1'

into n

using v_empno;

dbms_output.put_line(n);

end;


练习题目:

将所有的lianxi开头的表格,字符串是varchar2类型,但是长度没有200的字段,全部都统一修改成varchar2(200)。

create table lianxi01(

lxid number,

lxname varchar2(20),

addr varchar2(100)

);

create table lianxi02(

lxid number,

parents varchar2(50),

addr varchar2(100)

);

create table lianxi03(

lxid number,

friends varchar2(80),

addr varchar2(200)

);


提示:

select * from user_tab_columns where table_name like 'LIANXI%'

and data_type='VARCHAR2' and data_length<200;


alter table 表名 modify 列名 新的数据类型;

答案:

declare

begin

for i in (select table_name,column_name

from user_tab_columns where table_name like 'LIANXI%'

and data_type='VARCHAR2' and data_length<200) loop

execute immediate 'alter table '||i.table_name||

' modify '||i.column_name||' varchar2(200)';

end loop;

end;

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言