动态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;
MySQL 5.6 MRR 的存储过程完美诠释Oracle创建表空间、创建用户、授权、夺权、删除用户、删除表空间相关资讯 SQL
- SQL 新手指南 (09/10/2015 10:57:53)
- SQL导入txt以及SQL中的时间格式操 (01/25/2015 11:35:04)
- SQL 事务及实例演示 (08/12/2014 10:36:37)
| - SQL 中的正则函数 (06/28/2015 15:59:48)
- SQL 集合(笔记) (01/15/2015 20:19:06)
- Oracle shell调用SQL操作DB (02/03/2014 10:48:18)
|
本文评论 查看全部评论 (0)