调用存储过程
--出参 ?出参名$类型$out,后面跟入参 CALL 存储过程名(?ret$integer$out,?msg$varchar$out,'XXX',1,NULL);
创建存储过程
create or replace procedure 存储过程名(
OUT o_ret int,
OUT o_info VARCHAR(100),
IN i_Param1 VARCHAR(100),
IN i_Param2 int,
IN i_Param3 VARCHAR(100)
)
specific 存储过程名
RESULT SETS 2 --返回结果集数量
LANGUAGE SQL
BEGIN
DECLARE SQLCODE INT DEFAULT 0;
DECLARE SQLSTATE CHAR(5) DEFAULT '00000';
DECLARE v_sqlcode INT DEFAULT 0;
DECLARE v_sqlstate CHAR(5) DEFAULT '00000';
DECLARE v_Max int;
DECLARE v_Min int;
DECLARE v_Sql_Max varchar(1000);
DECLARE v_st_Max statement;
DECLARE v_cur1_Max CURSOR WITH RETURN FOR v_st_Max;
DECLARE v_Sql varchar(1000);
DECLARE v_st statement;
DECLARE v_cur1 CURSOR WITH RETURN FOR v_st;
SET v_Min = i_Param2;
SET v_Sql_Max = 'select max(id) from tableName';
prepare v_st_Max from v_Sql_Max;
OPEN v_cur1_Max;
FETCH v_cur1_Max INTO v_Max;
CLOSE v_cur1_Max;
set v_sql='select * from tableName where id < '||v_Max ||' AND '|| ' RN > '||v_Min||' WITH ur';
PREPARE v_st FROM v_Sql;
OPEN v_cur1;
BEGIN
DECLARE cur2 CURSOR WITH RETURN TO caller FOR
select * from tableName2 where aaa = i_Param2;
OPEN cur2;
END;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SET v_sqlcode = SQLCODE,v_sqlstate = SQLSTATE;
SET o_ret = -99,o_info = '在['||coalesce(o_info,'未知错误')||']处发生异常 SQLCode:'||char(v_sqlcode)||'SQLState:'||char(v_sqlstate);
END;
SET o_ret = 99, o_info = '';
END;
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/bigdata/279793.html