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