Oracle动态SQL

来源:互联网 发布:艾瑞网怎么查数据 编辑:程序博客网 时间:2024/05/01 18:35


动态SQL语法


只有在运行时候Oracle才能够检测它的格式是否正确

INTO和USING子句是可选的

如果SQL语句是一个查询语句的话,我们可以使用INTO子句

INTO语句用于接收SELECT语句选择的记录值,可以是一个变量序列,也可以是一个记录型的变量也就是record型的变量

这个变量序列的顺序对应于查询结果集中的记录的值的顺序

如果有参数需要动态确定,我们可以使用USING子句


动态创建表


示例

--动态SQL语句begin   execute immediate 'create table bonus (id number,ant number)';end;  --动态查询用户的电话 declare sql_stmt varchar2(200); --存储查询语句 emp_id number(10):='&emp_id'; emp_rec employees%rowtype;  begin    sql_stmt:='select * from employees where id=:id'  ;    execute immediate sql_stmt into emp_rec using emp_id;    dbms_output.put_line(emp_rec.phone);  end;

--动态插入 declare      sql_stmt varchar(200);     emp_id number(10):='&emp_id';     emp_rec employees%rowtype; begin   sql_stmt:='insert into employees (id) values(:id)';   execute immediate sql_stmt using emp_id;     end;


execute immediate语句只能执行返回一行或者没有返回,如果要编写返回多行的sql语句要使用REF动态游标


示例:

--动态SQL,动态游标 declare    e_id number(10);    e_name varchar2(50);    s_salary number(8);    type c_type is ref cursor;    cur c_type;    p_salaty number:='&p_id'; begin   open cur for    'select e.id,e.name,s.salaryvalue from employees e,salary s   where e.id=s.employeeid and s.salaryvalue>:sal order by id asc'   using p_salry;   dbms_output.put_line('薪水大于'||p_salary||'的员工有:');   loop      fetch cur into e_id, e_name,s_salary;     exit when cur%notfound;     dbms_output.put_line('编号:'||e_id||'姓名:'||e.name||'薪水'||s_salary);     end loop;     close cur; end;




原创粉丝点击