一个简单的存储过程

创建一个简单的存储过程
其中涉及到是基本的传参,定义参数,参数赋值,条件语句,循环语句,用游标遍历等基本语法

    --创建一个存储过程 
    create or replace procedure addgoods(    -- 传入两个变量,一个输入变量,一个输出变量,输出变量用来作为返回值
            gname1 user_table.user_skey%type , param1 out user_table.user_skey%type ) as   -- 把变量的类型跟表中字段类型保持一致
          id1 number(10);   -- 定义两个没有初始化的变量
          i number(10) ;
          cursor ee(v_user_skey Number) is select user_skey from user_table  where user_skey = v_user_skey; --游标 ,带参数 游标的参数一定不能跟表中的字段一样,且不区分大小写
          begin   -- 代码处理块 , 用begin end包起来

        begin    -- 处理异常  要把需要处理的代码块用BEGIN END包起来,在代码块中紧跟EXCEPTION处理
      select user_table.user_skey into id1 from user_table where user_table.user_skey = gname1;
      Exception           
      WHEN NO_DATA_FOUND THEN
        dbms_output.put_line('不存在任何记录');  -- db的输出语句,在output标签下显示输出信息
        ROLLBACK;
 	    RAISE;
      END;

   if id1 = 45 then   -- 判断语句
      begin
        dbms_output.put_line(gname1 || '的id是45');
      end;
   end if;

   if id1 <> 45 then
     begin
      dbms_output.put_line(gname1 || '的id是'||id1);
     end;  
   end if;

   param1:= id1;  -- 变量赋值

   i:= 1;
   while i < 10 loop   -- while 循环
     begin
         dbms_output.put_line('i的值是:' || i);
         i:= i + 1;
     end;
   end loop;

   i:= 1;
   for vvv in ee(999) loop  -- for循环,使用游标
   
       dbms_output.put_line('i的值为:'  || i);
       i:= i + 1;
       dbms_output.put_line('存在的id值有:' || vvv.user_skey); -- 这一行必须有,循环体不能为空
    
   end loop;

   dbms_output.put_line('111111');

end addgoods;



-- 调用存储过程
begin
     addgoods(999);
end;

-- 使用代码块调用存储过程   只有这个调用有效,输出参数必须是一个变量
declare
     user_skey number;
     user_id number ;
 begin
   user_skey:= 999;
   addgoods(user_skey,user_id);  -- 传入两个参数,一个输入参数,一个输出参数,输入参数必须初始化,输出参数是否初始化无所谓
   dbms_output.put_line('返回的值是:' || user_id);
 end;

 -- 在sqlcommand中运行
 exec addgoods(user_skey);

create or replace procedure addgoods(
gname1 user_table.user_skey%type) as 
  id1 number(10);
  i number(10) ;
  cursor ee(v_user_skey Number) is select user_skey from user_table  where user_skey = v_user_skey; --游标 ,带参数
  begin

    begin    -- 处理异常  要把需要处理的代码块用BEGIN END包起来,在代码块中紧跟EXCEPTION处理
      select user_table.user_skey into id1 from user_table where user_table.user_skey = gname1;
        Exception 
      
      WHEN NO_DATA_FOUND THEN
        dbms_output.put_line('不存在任何记录');
        ROLLBACK;
 	      RAISE;
    END;

   if id1 = 45 then
      begin
        dbms_output.put_line(gname1 || '的id是45');
      end;
   end if;

   if id1 <> 45 then
     begin
          dbms_output.put_line(gname1 || '的id是'||id1);
     end;  
   end if;
   i:= 1;
   while i < 10 loop
     begin
         dbms_output.put_line('i的值是:' || i);
         i:= i + 1;
     end;
   end loop;
   i:= 1;
   for vvv in ee(999) loop
   
       dbms_output.put_line('i的值为:'  || i);
       i:= i + 1;
       dbms_output.put_line('存在的id值有:' || vvv.user_skey); -- 这一行必须有,循环体不能为空
    
   end loop;

   dbms_output.put_line('111111');

end addgoods;



-- 调用存储过程
begin
     addgoods(999);
end;

-- 使用代码块调用存储过程
declare
     user_skey number;
     user_id number ;
 begin
   user_skey:= 999;
   addgoods(user_skey);
 end;

 -- 在sqlcommand中运行
 exec addgoods(user_skey);
posted @ 2017-12-08 14:59  别离的岁月  阅读(2267)  评论(0编辑  收藏  举报