Oracle PL/SQL使用动态SQL

动态SQL  意思是字符串的内容的内容当做SQL来执行
语法: execute immediate '字符串内容'
execute 存储过程(参数)


|| 连接符 把左右两边的字符串的字符串连起来,合起来一个字符串 count +


遇到的情况和对策:
1 非查询,无参数
execute immediate '字符串';
 execute immediate 'drop table Customer';


2 非查询,有参数
SQL中,用 :变量名 (代表一个参数,随便取名字)
execute immediate '动态SQL' using 实参列表
注意:
 1,实参列表中,如果有多个参数,用逗号隔开
 2,实参按照顺序依次替代SQL中的参数,不看参数名
 3,实参的数据类型要符号SQL中参数的要求


-- Created on 2017/2/13 by ADMINISTRATOR 
declare 
  -- Local variables here
  i integer;
str varchar2(200);
begin
  -- Test statements here
str :='select * from BUSI_TD_BOOKS where author =:au or name =:n';
  execute immediate str using '123456','凯瑟琳';
commit;
end;
3 有查询,无参数
注意:
 标准脚本不能直接显示查询结果,允许使用slect语句,要求加 into,查询结果必须是一条记录
excute immediate 'select ....' into 变量名;
要求:
1 字符串里面还要用到单引号的时候,用两个单引号代表一个
2 查询的列可以不止一个,那么变量名也可以不止一个,用逗号隔开
3 列和对应的变量,数据类型要兼容
4 这里,变量必须是预先定义的,在declare部分


4 有查询,有参数
    execute immediate 'select....' into 变量名 using 实参列表;


在Oracle中字符串要使用转义符,连写两个单引号。




字面变量 ---- 替代变量
1,只能用在sqlplus 或者PL/SQL的Command Window 里面
2,只能用在简易脚本里面
3, 执行的时候,遇到&符号,就弹出对话框,要求输入文字内容,输入的内容用来替换掉&这个位置的变量。
4, 替换完了之后,执行SQL的内容。
5, 如果&要做字符串的正常组成部分,必须切割成两个字符串,用||拼接两个字符串





















你可能感兴趣的:(数据库)