设为首页 加入收藏

TOP

Oracle动态SQL语法
2014-11-24 02:37:50 来源: 作者: 【 】 浏览:0
Tags:Oracle 动态 SQL 语法

\

动态SQL语法
\
只有在运行时候 Oracle才能够检测它的格式是否正确
INTO和USING子句是可选的
如果SQL语句是一个查询语句的话,我们可以使用INTO子句
INTO语句用于接收SELECT语句选择的记录值,可以是一个变量序列,也可以是一个记录型的变量也就是record型的变量
这个变量序列的顺序对应于查询结果集中的记录的值的顺序
如果有参数需要动态确定,我们可以使用USING子句
动态创建表
\

示例
[sql]
  1. --动态SQL语句
  2. begin
  3. execute immediate 'create table bonus (id number,ant number)';
  4. end;
  5. --动态查询用户的电话
  6. declare
  7. sql_stmt varchar2(200); --存储查询语句
  8. emp_id number(10):='&emp_id';
  9. emp_rec employees%rowtype;
  10. begin
  11. sql_stmt:='select * from employees where id=:id' ;
  12. execute immediate sql_stmt into emp_rec using emp_id;
  13. dbms_output.put_line(emp_rec.phone);
  14. end;
[sql]
  1. --动态插入
  2. declare
  3. sql_stmt varchar(200);
  4. emp_id number(10):='&emp_id';
  5. emp_rec employees%rowtype;
  6. begin
  7. sql_stmt:='insert into employees (id) values(:id)';
  8. execute immediate sql_stmt using emp_id;
  9. end;
execute immediate语句只能执行返回一行或者没有返回,如果要编写返回多行的sql语句要使用REF动态游标
\
示例:
[sql]
  1. --动态SQL,动态游标
  2. declare
  3. e_id number(10);
  4. e_name varchar2(50);
  5. s_salary number(8);
  6. type c_type is ref cursor;
  7. cur c_type;
  8. p_salaty number:='&p_id';
  9. begin
  10. open cur for
  11. 'select e.id,e.name,s.salaryvalue from employees e,salary s
  12. where e.id=s.employeeid and s.salaryvalue>:sal order by id asc'
  13. using p_salry;
  14. dbms_output.put_line('薪水大于'||p_salary||'的员工有:');
  15. loop
  16. fetch cur into e_id, e_name,s_salary;
  17. exit when cur%notfound;
  18. dbms_output.put_line('编号:'||e_id||'姓名:'||e.name||'薪水'||s_salary);
  19. end loop;
  20. close cur;
  21. end;
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Oracle新建表空间 下一篇oracle10gCRSvotingdisk管理

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: