存储过程的常见结构

Oracle:

create or replace procedure get_needQuery_Balance(
v_num in number,
v_result out number
) 
is
--declare veriables
--declare cursor
--begin 
begin
--transition 
--exception
end
create or replace procedure get_needQuery_Balance(
v_num    IN  VARCHAR2,   --流水号最后一位除5,所得余数
v_result out VARCHAR2,
v_QueryPhone         OUT   VARCHAR2,
v_count  out VARCHAR2,
v_time  out VARCHAR2
) 
is
--定义变量
--l_count NUMBER;
phoneNo_Temp mobile_balanceQuery.Phonenum%TYPE;
type phoneNo is record ( phonenum  mobile_balanceQuery.Phonenum%TYPE);
type phoneNoTable is table of phoneNo;
ret_phoneNums phoneNoTable;
--定义游标
CURSOR v_gettedMbileNo is
       select t.phonenum from mobile_balanceQuery t
       where t.querycount = 0 
       AND MOD(TO_NUMBER(substr(t.phonenum,LENGTH(t.phonenum),1)),5) = v_num
       and rownum<=10;
--begin开启事务处理
begin
  --获取等待时间
  v_time := 100;
  select t.key into v_time from pt_table t
  where t.value1 = 'QueryNumTime';
  
  --打开游标
  open v_gettedMbileNo;
  fetch v_gettedMbileNo BULK COLLECT INTO ret_phoneNums;
  close v_gettedMbileNo;
  --判断取出的数量
  IF ret_phoneNums.count <= 0 THEN
        v_count := 0;
        RETURN;
  END IF;
  --组手机号
  v_count := 0;
  for i in 1..ret_phoneNums.count loop
      phoneNo_Temp:=ret_phoneNums(i).phonenum;
      --更新查询次数
      --select t.querycount into l_count from mobile_balanceQuery t 
             --where t.phonenum = phoneNo_Temp for update wait 2;
      --if(l_count = 0) then
        update mobile_balanceQuery
               set mobile_balanceQuery.Querycount = mobile_balanceQuery.Querycount + 1,
               mobile_balanceQuery.Start_Querytime = sysdate
               where mobile_balanceQuery.Phonenum = phoneNo_Temp;
     -- end if;
      v_QueryPhone := phoneNo_Temp     || ',' || v_QueryPhone ;
      v_count := v_count + 1;
  end loop;
  commit;
  v_result := '0';
  --异常捕获
  --结束
  EXCEPTION WHEN OTHERS THEN
    v_result := '-1';
    ROLLBACK;
end;
Oracle

 MySQL

DELIMITER $$

DROP PROCEDURE IF EXISTS `test_release`.`test11`$$

CREATE DEFINER=`encysys48`@`%` PROCEDURE `test11`(
IN    hf_serialid           VARCHAR(30),   #
OUT   v_ChargeMoney         VARCHAR(300) #
)
    MODIFIES SQL DATA
    SQL SECURITY INVOKER
BEGIN
    begin
    DECLARE l_chargemoney           int(10);
    SELECT t.charge_money
                INTO l_chargemoney
                FROM Jp_Fullnote t
               WHERE t.hf_serialid = hf_serialid;
    SET v_ChargeMoney = CONCAT(IFNULL(l_chargemoney, ''), ',', v_ChargeMoney);
    insert into w_help(char_content) values (l_chargemoney);
    commit;
    end;
    END$$

DELIMITER ;
MySQL

一般来说,

begin

定义变量

定义游标

定义异常

处理任务

end

原文地址:https://www.cnblogs.com/tengpan-cn/p/5056682.html