Oracle 存储过程,临时表,动态SQL测试


--创建事务级别的结果临时表
create global temporary table tmp_yshy(
 c1 varchar2(100),
 c2 varchar2(100)
)on commit delete rows;
--创建事务级别的存储sql语句的临时表
create global temporary table tmp_sql(
 c1 varchar2(4000)
)on commit delete rows;

测试表:

-- Create table
create table T_USER
(
  NAME VARCHAR2(20),
  AGE  NUMBER
)
--首先建包
create or replace package pack_user 
as
  -- 1:根据年龄查询所有用户
  procedure p_user_select(
    av_age        number,        --年龄
    av_suc out    varchar2       --是否成功标识  
  );

end pack_user;
--创建包体
create or replace package body pack_user
as
 --1:根据年龄查询所有用户
 procedure p_user_select(
   av_age         number,
   av_suc out     varchar2
 )
 as
   lv_sql         varchar2(4000);
 begin
   av_suc:='T';
   
   lv_sql:=' insert into tmp_yshy(c1,c2) '||
           ' select name,age '||
           ' from t_user '||
           ' where age >'||av_age;
   
   insert into tmp_sql(c1) values(lv_sql||';');
   
   execute immediate lv_sql;
   
   exception 
     when others then
       rollback;
       av_suc:='F'||' '||to_char(sqlcode)||' : '||sqlerrm;
       dbms_output.put_line(av_suc);
 end p_user_select;
 
end pack_user;

PL/SQL Developer SQLWindow测试:

 declare 
    a varchar2(100);
 begin 
    pack_user.p_user_select(25,a);
 end;
select * from tmp_yshy;
select * from tmp_sql;

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM