达梦数据库存储过程及存储过程调用

Posted 我是东风破

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了达梦数据库存储过程及存储过程调用相关的知识,希望对你有一定的参考价值。

/***Manager***/CREATE OR REPLACE PROCEDURE "GZAPP_09"."SP_OLAP_V_BUILDINGTYPE"("P_DATE" IN DATE)
AUTHID DEFINER
IS
/*=============================================================
*功能说明:房屋类型分析(高层楼宇,多层楼宇,临时棚屋,其它)
* 统计市级别,行政区,街镇,居委会
* 入口参数:统计时间
* 出口参数:无
* 创建人及时间: dfb 20160922
* 修改人及时间:
*============================================================*/
v_sqlcode number;
v_sqlerrm varchar2(4000);
v_begintime varchar2(20);
v_endtime varchar2(20);
v_fwdlx varchar2(10);
v_sql varchar2(5000);
BEGIN
v_begintime:=to_char(sysdate,‘yyyy/mm/dd hh24:mi:ss‘);
EXECUTE IMMEDIATE ‘TRUNCATE TABLE TN_OLAP_V_BUILDINGTYPE_TMP1‘;
delete from OLAP_V_BUILDINGTYPE;
commit;

insert into TN_OLAP_V_BUILDINGTYPE_TMP1(
TJQY,
QYDM,
FWLX01 ,
FWLX02 ,
FWLX03 ,
FWLX04 )

SELECT TJQY,
qydm,
FWLXGCLY FWLX01,--高层楼宇类型栋数
FWLXDCLY FWLX02,--低层楼宇类型栋数
FWLXLSPW FWLX03,--临时棚屋类型栋数
FWLXQT FWLX04 --其他类型栋数
FROM T_STAT_CZWD
where tjrq=p_date
and bblx=‘M‘;
COMMIT;

-- 01-04类房屋栋类型
for fwdlx in 1 .. 4 loop

if fwdlx < 10 then
v_fwdlx := ‘0‘ || fwdlx;
else
v_fwdlx := fwdlx;
end if;

v_sql :=‘INSERT INTO OLAP_V_BUILDINGTYPE
( BUITYPEDM,--房屋栋类型代码
BUITYPEMC,--房屋栋类型名称
TJQY,--统计区域
QYDM,--区域代码
QYMC,--区域名称
XZQDM,--行政区代码
XZQ, --行政区名称
JZDM ,--街镇代码
JZ, --街镇名称
JWHDM,--居委会代码
JWH , --居委会名称
AMOUNT--数量
)
select t.FWDLX,
a.mc,
t.tjqy,
t.qydm,
case when tjqy=‘‘SHIJB‘‘ THEN ‘‘全市‘‘
when tjqy=‘‘XZQ‘‘ then b.xzq
when tjqy=‘‘JZ‘‘ THEN b.jz
when tjqy=‘‘JWH‘‘ THEN b.jwh
end qymc,
b.xzqdm,
b.xzq,
b.jzdm,
b.jz ,
b.jwhdm,
b.jwh,
t.amount
from (select ‘‘‘||v_fwdlx||‘‘‘ FWDLX,qydm ,FWLX‘||v_fwdlx||‘ amount,tjqy from TN_OLAP_V_BUILDINGTYPE_TMP1) t,
--(select * from t_xtzd where dmlx=‘‘FWLX‘‘) a,
(select BUITYPEDM dm,BUITYPEMC mc,id from OLAP_MEASURE_BUILDINGTYPE) a,--把系统字典表改成这个维表 修改于2016.10.11 dfb
OLAP_V_LOCALAREA b
where t.FWDLX=a.id
and t.qydm=b.qydm ‘;
execute immediate v_sql;
end loop;

v_endtime:=to_char(sysdate,‘yyyy/mm/dd hh24:mi:ss‘);
--记录程序执行开始时间和结束时间
insert into T_LOG(pro_name,tj_date,begin_time,end_time,run_result) values(‘SP_OLAP_V_BUILDINGTYPE‘,p_date,v_begintime,v_endtime,‘Y‘);
commit;
--异常处理
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
v_sqlcode :=sqlcode;
v_sqlerrm :=substr(sqlerrm, 1, 2000);
insert into T_LOG(pro_name,err_time,err_code,err_infor,run_result,tj_date) values(‘SP_OLAP_V_BUILDINGTYPE‘,sysdate,v_sqlcode,v_sqlerrm,‘N‘,p_date);
commit;
DBMS_OUTPUT.PUT_LINE(SUBSTR(SQLERRM, 1, 200));

END SP_OLAP_V_BUILDINGTYPE;

 

------------------------------------------------存储过程调用-----------------------------------------------

/***Manager***/CREATE OR REPLACE PROCEDURE "GZAPP_09"."PKG_STAT_DAY"("P_DATE" IN DATE)
AUTHID DEFINER

IS
/*=============================================================
*功能说明:日报表调度汇总
* 入口参数:统计时间
* 出口参数:无
* 创建人及时间: dfb 20160906
* 修改人及时间:
*============================================================*/
v_sqlcode number;
v_sqlerrm varchar2(4000);
v_begintime varchar2(20);
v_endtime varchar2(20);
BEGIN

v_begintime:=to_char(sysdate,‘yyyy/mm/dd hh24:mi:ss‘);

SP_OLAP_V_BUILDINGTYPE(p_date);
v_endtime:=to_char(sysdate,‘yyyy/mm/dd hh24:mi:ss‘);
--记录程序执行开始时间和结束时间
insert into T_LOG(pro_name,tj_date,begin_time,end_time,run_result) values(‘PKG_STAT_DAY‘,p_date,v_begintime,v_endtime,‘Y‘);
commit;
--异常处理
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
v_sqlcode :=sqlcode;
v_sqlerrm :=substr(sqlerrm, 1, 2000);
insert into T_LOG(pro_name,err_time,err_code,err_infor,run_result,tj_date) values(‘PKG_STAT_DAY‘,sysdate,v_sqlcode,v_sqlerrm,‘N‘,p_date);
commit;
DBMS_OUTPUT.PUT_LINE(SUBSTR(SQLERRM, 1, 200));

END PKG_STAT_DAY;

以上是关于达梦数据库存储过程及存储过程调用的主要内容,如果未能解决你的问题,请参考以下文章

php操作达梦数据库示例代码(包括绑定变量,存储过程调用,clob类型操作等)

达梦数据库的过程包使用

达梦数据库的触发器管理

达梦数据库备份恢复过程

Nacos适配达梦数据库

达梦数据库的CLASS类