oracle 《五》存储过程语法

创建基础例子

--创建 一个存储过程,如果存在就覆盖他
create or replace procedure app_ext_ctr

--is关键词表明后面将跟随一个pl/sql体
is
 -- begin 关键词表明pl/sql体的开始
begin
  --nullpl/sql语句表明什么事都不做,这句也不能够删除,因为plsl
  --体只少需要有一句

 null;
 -- 结束
 end;

--创建一个简单的存储过程传入一个参数 appid 返回 appname

CREATE OR REPLACE PROCEDURE selname_emp_proc(appid IN VARCHAR2,appname OUT VARCHAR2)  
AS  
BEGIN  
            SELECT app_name INTO appname FROM epp_ext_app_fun f WHERE f.app_id=appid;  
            dbms_output.put_line(appname);  
END;  


----方式一调用 一下 


DECLARE  
              appname VARCHAR2(60);  
BEGIN  
               selname_emp_proc('DKYXTBG',appname);  
END;  

----方式二调用 一下 

CALL update_emp_proc('DKYXTBG','wangwu');  

 

--让存储过程做一件事

CREATE OR REPLACE procedure selAll_emp_proctwo  
AS  
CURSOR sel_emp IS SELECT * FROM EPP_EXT_APP_FUN;--定义游标,该游标指向查询结果  
rowresult EPP_EXT_APP_FUN%ROWTYPE;  --搞个类
BEGIN  
  OPEN sel_emp;--打开游标  
  LOOP FETCH sel_emp INTO rowresult;--将游标中的值赋给rowresult  
    EXIT WHEN sel_emp%NOTFOUND;--判断:游标不存在时跳出循环  
    dbms_output.put_line('员工名:'||rowresult.APP_NAME||'工资:'||rowresult.APP_ID);  
  END LOOP;  
  CLOSE sel_emp;--关闭游标  
  END;  


 CALL selAll_emp_proctwo(); 

 

---存储过程循环加数据改造

 

--创建个小存储
create or replace procedure p_test6(charname in varchar2,rest out varchar2)   --p_test6 in如参数 out出参数
as   --搞点定义
       chas varchar2(50) :='迪拜';   --初始化定义参数
       empcur sys_refcursor;   --定义游标集合    
       emp ydc.epp_ext_app_fun%rowtype;   --集合类模式  
begin   --开始干活
       if charname = 'true' then   --如果传入参数等于true
                   dbms_output.put_line('哈哈哈王五在的');   --输出log日志
                   open empcur for select * from epp_ext_app_fun;   --给游标集合赋值
                   loop   --循环开始
                               fetch empcur into emp;   --大开集合到类方式
                               EXIT WHEN empcur%notfound ;   --集合结束方式最后一个对象
                                    dbms_output.put_line(emp.app_name||'ss--------s999ss'||emp.app_id);  
                   end loop;   --结束遍历
                   close  empcur;   --关闭游标
      
         else   -- 否则
                   dbms_output.put_line('哇哈哈王五去旅游了地点是:'||chas);
         end if;   --结束if 判断
         rest := chas;   --给返回阐述赋值
end p_test6;   --结束存储
-------------------------------------------------------------------------------

call p_test6('true', );--
 
-------------------------------------------------------------------------------

--有返回值测试
declare--ready    
     charsname  Varchar2(50):= '' ;--定义返回值     
begin--开始
     p_test6('true',charsname );
     dbms_output.put_line(charsname);       
end;--结束

 

下边是创建临时数组及操作

 

------------------------------------------------------------------------------------------------------
create or replace type myvarray_list is varray(10) of varchar2(50); -- 创建零时数组

create or replace procedure p_test9(vcs in varchar2) 
as
       cursor epp     is select * from epp_ext_app_fun f ;
       empcur sys_refcursor;
       str varchar2(50);
       vaArray  myvarray_list;
begin
       vaArray := myvarray_list('123','222','333');
       str:='rrr';
       vaArray(3) := str;  
       if vcs = '1' then 
          open empcur for select * from epp_ext_app_fun f ;
          DBMS_OUTPUT.put_line('111111111111111----s' );
          for x in 1..vaArray.count loop
                dbms_output.put_line('p_varlist('||x||')='||vaArray(x));
          end loop; 
       elsif vcs = '2' then 
             for ex in epp loop
                 if ex.app_id = 'DKYXTBG' then
                    DBMS_OUTPUT.put_line('2222222222222222--------s'||ex.app_id);
                 else 
                    DBMS_OUTPUT.put_line('ssssssssssssssss--------s'||ex.app_id);
                 end if;
             end loop;
       else 
             insert into susers(sid,sname,szw)
             select f.id,f.app_id,f.app_name from epp_ext_app_fun f where   f.app_id = 'DKYXTBG';
             DBMS_OUTPUT.put_line('3333333333333333----s'  );
       end if;
end p_test9;
------------------------------------------------------------------------------------------------------ 
call p_test9('1');
  exec call p_test9('1',myvarray_list('Oracle','DB2','Sql Server','mySql','DBA'));

create table susers (sid varchar2(1111) primary key,sname varchar2(1111),szw varchar2(1111) )
select * from susers
------------------------------------------------------------------------------------------------------ 

create  or replace procedure p_test01(parmarsname in varchar2)
as 
        sName varchar2(500);
        rqmy date;
begin
        rqmy := to_date(parmarsname,'yyyy-MM-dd');
        sName := parmarsname;
        dbms_output.put_line('进入数据'||to_char(rqmy,'yyyyMM'));
end p_test01;

call p_test01('2017-02-06');

------------------------------------------------------------------------------------------------------ 

--oracle 集合
create  or replace procedure p_test02(parmarsname in varchar2,rest out sys_refcursor)
as 
  --创建对象
  TYPE c_users IS RECORD (id number,name varchar2(30));  
  ---根据自定义数据类型创建一个集合
  TYPE c_user_array IS TABLE OF c_users INDEX BY BINARY_INTEGER;  
  ---集合对象
  user_array c_user_array;
  ---数据对象
  user c_users;
   ---计数器
  v_counter number;
  cursor epp is select * from epp_ext_app_fun ;
begin
          --user.id:=1;  user.name:='迪丽热巴';  user_array(user.id):=user;
          --user.id:=2; user.name:='貂蝉';  user_array(user.id):=user;
          v_counter := 1;
          for ex in epp loop
               user.id := v_counter;
               user.name := ex.app_name;
               user_array(user.id) := user;
               v_counter  := v_counter + 1;
          end loop;
          for i in 1..user_array.count loop
          
            DBMS_OUTPUT.put_line(user_array(i).id||'...'||user_array(i).name);
          end loop;        
end p_test02;
--------------------------------------------------
declare    
charsname  Varchar2(50):= '' ;--DKYXTBG
empcur sys_refcursor;    
emp ydc.epp_ext_app_fun%rowtype;   
begin  
     p_test02(charsname,empcur);  
     loop  
     fetch empcur into emp;   EXIT WHEN empcur%notfound ;   
            dbms_output.put_line(emp.app_name||'ss--------s999ss'||emp.app_id);  
     end loop;  
     close  empcur;  
end;  
 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值