sybaseiq存储过程示例

sybaseiq ldboyghg 25℃ 0评论
ALTER PROCEDURE [dc_bi].[p_log_proc]
(
in @v_timest       varchar(8),
in @v_pname        varchar(50),
in @v_dbuser       varchar(8),
in @v_step         numeric(4,1),
in @v_begin_time   datetime,
in @v_end_time     datetime,
in @v_use_time     numeric(6)    default 0,
in @v_errno          numeric(2)    default 0,
in @v_errmsg          varchar(2000)  default ‘OK’
)
–*****************************************************************************************
– 【存储过程功能描述】  : 日志记录                                                             *
– 【传入参数描述】  :                               *
– 【输出参数描述】 :                                      *
– 【输入表】  :                                                                      *
– 【输出表】  :                                                            *
– 【创建日期】 :                                                               *
– 【创建人】    : lijf                                                               *
– 【修改历史】 : 修改人:   ,   修改时间:   ,  修改内容:                                  *
–***************************************************************************************
begin
  declare @iv_use_time numeric(10); –用时
  declare @iv_errmsg varchar(2000);–异常信息
  –计算用时
  if @v_use_time>0 then
    set @iv_use_time= @v_use_time;
  else
    set @iv_use_time= datediff(ss,@v_begin_time,@v_end_time) ;
  end if;
  –截断信息
  if length(@v_errmsg)=0 then
    set @iv_errmsg =’OK';
  else
    set @iv_errmsg = substring(@v_errmsg,1,2000);
  end if;
  –写入日志
  insert into dc_bi.LOG_PROC(TIMEST,PNAME,DBUSER,STEP_ID,BEGIN_TIME,END_TIME,USE_TIME,V_RES,V_ERR)
  values(@v_timest,trim(upper(@v_pname)),trim(upper(@v_dbuser)),@v_step,@v_begin_time,@v_end_time,@iv_use_time,@v_errno,@iv_errmsg);
  commit;
exception
  when others then
  rollback;;
end
ALTER PROCEDURE [dc_bi].[ljf_p_proc_Template]
(
IN @v_date VARCHAR(10), –统计周期
–IN @v_dbuser VARCHAR, –通道用户名
OUT @errmsg VARCHAR(2000),
OUT @errno numeric(5)
)
on exception resume
–*****************************************************************************************
— 【存储过程功能描述】 : 模板
— 【传入参数描述】 : @v_date:统计周期 , @v_dbuser:通道用户名
— 【输出参数描述】 : @errno:返回值 , @errmsg:返回消息
— 【输入表】 :
— 【输出表】 :
— 【修改历史】 : 修改人 修改时间 修改内容:
— 李金峰 2015-2-6 新建程序
— 李金峰 2015-2-7 修改4G口径
— XXX 2015-2-8 修改3G口径
–***************************************************************************************
begin
————————————————————————–定义变量—————————————————
declare @iv_proctype CHAR(1); –过程类型
declare @v_dbuser VARCHAR(1); –通道用户名
–declare @iv_check_result VARCHAR(100); –检查过程传入参数准确性的结果
declare @iv_step numeric(4,1) ; –执行步骤(程序最后一步均填固定值999,便于查看是否已执行到最后一步)
declare @iv_begintime DATEtime ; –开始时间
declare @iv_usetime numeric(6,0) ; –存储过程消耗时间(单位:秒)
declare @iv_procname varchar(40); — 过程名
declare @iv_sql varchar(2000); — 动态脚本
–declare @iv_tablename VARCHAR(60);
declare @iv_param1 VARCHAR(60);
declare @iv_param2 VARCHAR(60);
declare @iv_flag numeric(2,0);
————————————————————————–给变量赋初值————————————————
set temporary option on_tsql_error = ‘CONDITIONAL';
set @iv_proctype = ‘D’ ; –(若日报执行则填:’D’ ,若月报执行则填:’M’)
set @iv_procname =upper(‘ljf_p_proc_Template’);
set @v_dbuser =’dc_bi';
set @iv_begintime= getdate();–记录程序开始时间
–核查参数
IF (upper(@iv_proctype)=’D’and length(@v_date) = 8) or (upper(@iv_proctype)=’M’and length(@v_date) = 6) THEN
set @errno = 0 ;
set @errmsg = ‘OK!';
ELSE
set @errno = -1 ;
set @errmsg = ‘传入参数有错误,请重新输入正确参数’ ;
END IF ;

select top 1 FIELD01,FIELD02 into @iv_param1,@iv_param2
from ljf_table_test;
—————————————————————————–程序主体——————————————————–
–删除数据实例
IF @errno = 0 THEN
BEGIN
SET @IV_STEP = 1 ;

EXECUTE IMMEDIATE ‘TRUNCATE TABLE LJF_TABLE_TEST';
COMMIT;

DELETE FROM LJF_TABLE_TEST WHERE FIELD01=@V_DATE;
COMMIT;

EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
set @errmsg =’步骤’+string(@iv_step)+';清空表 LJF_TABLE_TEST 数据失败, 原因:’+ERROR_MESSAGE();
set @errno = -1;

END;
–记录日志
CALL P_LOG_PROC(@V_DATE,@IV_PROCNAME,@V_DBUSER,@IV_STEP,@IV_BEGINTIME,GETDATE(),NULL,@ERRNO,@ERRMSG);

END IF;

–insert实例
IF @errno = 0 THEN
BEGIN
set @iv_step = 2 ;

INSERT INTO ljf_table_test(FIELD01,FIELD02,FIELD03,FIELD04,FIELD05,FIELD06,FIELD07,FIELD08,FIELD09,FIELD10)
VALUES(@v_date,’FIELD02′,’FIELD03′,’FIELD04′,’FIELD05′,’FIELD06′,’FIELD07′,’FIELD08′,’FIELD09′,’FIELD10′);

COMMIT;

EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
set @errmsg =’步骤’+string(@iv_step)+';插入表 LJF_TABLE_TEST 数据失败, 原因:’+ERROR_MESSAGE();
set @errno = -1;

END;
–记录日志
CALL p_log_proc(@v_date,@iv_procname,@v_dbuser,@iv_step,@iv_begintime,getdate(),null,@errno,@errmsg);
END IF;

–动态SQL实例
IF @errno = 0 THEN
BEGIN
set @iv_step = 3 ;

set @iv_sql = ‘INSERT INTO ljf_table_test(FIELD01,FIELD02,FIELD03,FIELD04,FIELD05,FIELD06,FIELD07,FIELD08,FIELD09) VALUES( ‘+
””+@v_date+””+
‘,”FIELD02”,”FIELD03”,”FIELD04”,”FIELD05”,”FIELD06”,”FIELD07”,”FIELD08”,”FIELD09”)';
EXECUTE IMMEDIATE @iv_sql;
COMMIT;

EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
set @errmsg =’步骤’+string(@iv_step)+';插入表 LJF_TABLE_TEST 数据失败, 原因:’+ERROR_MESSAGE();
set @errno = -1;

END;
–记录日志
CALL p_log_proc(@v_date,@iv_procname,@v_dbuser,@iv_step,@iv_begintime,getdate(),null,@errno,@errmsg);
END IF;

–循环实例
IF @errno = 0 THEN
BEGIN
set @iv_step = 4 ;

set @iv_flag=1;
— 循环语句
while (@iv_flag <10) LOOP

INSERT INTO ljf_table_test(FIELD01,FIELD02,FIELD03,FIELD04,FIELD05,FIELD06,FIELD07,FIELD08,FIELD09,FIELD10)
VALUES(@v_date,’FIELD02′,’FIELD03′,’FIELD04′,’FIELD05′,’FIELD06′,’FIELD07′,’FIELD08′,’FIELD09′,STRING(@iv_flag));
COMMIT;

set @iv_flag=@iv_flag+1;
COMMIT;

END LOOP;

EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
set @errmsg =’步骤’+string(@iv_step)+';插入表 LJF_TABLE_TEST 数据失败, 原因:’+ERROR_MESSAGE();
set @errno = -1;

END;
–记录日志
CALL p_log_proc(@v_date,@iv_procname,@v_dbuser,@iv_step,@iv_begintime,getdate(),null,@errno,@errmsg);
END IF;

–插入前台展示日志
IF @errno = 0 THEN
BEGIN
set @iv_step = 5 ;

INSERT INTO AI_REPORT_TAG(func_id,report_name,tab_id,data_date)–func_id和tab_id找前台开发人员获取
VALUES( ‘riva0101′,’竞争对手用户分析’,’XXX’,@v_date);
COMMIT;

EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
set @errmsg =’步骤’+string(@iv_step)+';插入前台展示日志表 AI_REPORT_TAG 数据失败, 原因:’+ERROR_MESSAGE();
set @errno = -1;

END;
–记录日志
CALL p_log_proc(@v_date,@iv_procname,@v_dbuser,@iv_step,@iv_begintime,getdate(),null,@errno,@errmsg);
END IF;
————————————————————————————————————————————————-
–插入过程日志表 :
BEGIN
set @iv_step =999;

set @iv_usetime = datediff(ss,@iv_begintime,getdate());
CALL p_log_proc(@v_date,@iv_procname,@v_dbuser,@iv_step,@iv_begintime,getdate(),@iv_usetime,@errno,@errmsg);
COMMIT;

END ;

return ‘0’;

end

转载请注明:生命不息,奋斗不止 » sybaseiq存储过程示例

喜欢 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址