ITPub博客

首页 > 数据库 > Oracle > 引用游标  动态SQL

引用游标  动态SQL

Oracle 作者:lsy9898231 时间:2012-07-24 19:32:03 0 删除 编辑

DECLARE
-- 声明引用游标
  TYPE cur_name IS REF CURSOR;
--声明这个游标的具体变量
  c_var cur_name;
-- 声明存放标的数据类型
  TYPE table_info IS TABLE OF t93%ROWTYPE INDEX BY BINARY_INTEGER;
--声明已个具体变量
  table_var table_info;
-- 声明存放某张表的 行类型变量
  col_var t93%ROWTYPE;
 
BEGIN
-- 打开引用游标指向某个表
  OPEN c_var FOR SELECT * FROM t93;
-- 循环取得数据
  LOOP
  FETCH c_var INTO col_var;
  EXIT WHEN c_var%NOTFOUND;
  dbms_output.put_line(col_var.name);
  END LOOP;
 
  -- bulk collect 取得游标指向表的所有数据
  -- fetch c_var bulk collect into table_var;
  --  for i in table_var.first .. table_var.last loop;
  --   dbms_output.put_line(table_var(i).name);
  -- end loop;
  CLOSE c_var;
END;

 

 

ORACLE 区分硬编译和软编译  差异在于执行的SQL 代码是否完全一致

execute 执行  immediate 立即

 

硬编译  
DECLARE

BEGIN
  EXECUTE IMMEDIATE 'update t93 set id = id+20 where id ='|| &ID;
END;

软编译
DECLARE
   var_info INT;
   str VARCHAR2(200);
BEGIN
   var_info := &ID;
   str := 'upedate t93 set id =:var where id =:x'
   EXECUTE IMMEDIATE str USING 100,var_info;
   COMMIT;
END;  
动态SQL 是指在PL/SQL程序执行时生成的SQL语句

 

                             PL/SQL

                              

                   检查共享池是否有相同SQL语句

                     没有就继续  有就返回

                              

                           检查语法   ← 检查PL/SQL代码的语法或编译错误

                            ↙      

                        绑定          检查对表  列对象的引用

                         

                   产生伪代码 并设置合法状态

 

SQL执行过程

   检查SQL 语句 在SGA 中的共享池中是否存在

   如果不存在 则编译  解析后执行  :硬解析

   如果存在 则取出编译结果执行   :软解析

 

 

 

<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22879281/viewspace-1115817/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-11-15