Oracle包体,包含存储过程,自定义函数(function),自定义类型(table),用函数返回自定义类型(相当于返回一张表)

供参考:
CREATE OR REPLACE PACKAGE PACKXINEM8GL IS

TYPE M_REFCURSM IS REF CURSOR;

/************************
创建单位表,添加单位参数
************************/
PROCEDURE GL_CREATE_COMPANY_PARAMETER(UQCOMPANYID IN VARCHAR2,
STRDATE IN VARCHAR2,
UQACCOUNTSETID IN VARCHAR2,
STRISGMROLE IN VARCHAR2,
STRISFORCE IN VARCHAR2);


/***********************
有集团会计期打开月份控制的打开过程
***********************/
PROCEDURE GL_GLGOBALMANAGE_OPEN(UQGlobalPeriodID IN VARCHAR2,
GLGOBALSTATE IN VARCHAR2);


FUNCTION GetRecord(a_in number) return M_REFCURSM;


END PACKXINEM8GL;
/
CREATE OR REPLACE PACKAGE BODY PACKXINEM8GL IS


PROCEDURE GL_CREATE_COMPANY_PARAMETER(UQCOMPANYID IN VARCHAR2,
STRDATE IN VARCHAR2,
UQACCOUNTSETID IN VARCHAR2,
STRISGMROLE IN VARCHAR2,
STRISFORCE IN VARCHAR2) IS

STRSQL VARCHAR2(5000);
COMPID VARCHAR2(50);
STRGPDATE VARCHAR2(50);
STRYEARMONTH VARCHAR2(50); --启用年月

GLPCOUNT NUMBER; --全局会计期记录数
V_ACCCOUNT NUMBER; --科目表数据个数
V_PCCOUNT NUMBER; --利润中心表数据个数
V_CCCOUNT NUMBER; --成本中心表数据个数

STRTABLE VARCHAR2(100);
EX1 Exception;
EX2 Exception;

CURSOR V_CUR1 IS
SELECT VARVALUE, UQCOMPANYID
FROM TGL_COMPANY_PARAMETERS
WHERE VARCODE = '2002'
ORDER BY VARVALUE;
V_SQL1 VARCHAR2(32767);
V_SQL2 VARCHAR2(32767);
V_SQL3 VARCHAR2(32767);
V_SQL4 VARCHAR2(32767);
V_SQL5 VARCHAR2(32767);
V_SQL6 VARCHAR2(32767);
V_TABLECODE VARCHAR2(32767);
V_COMPANYID VARCHAR2(40);
BEGIN
STRYEARMONTH := SUBSTR(STRDATE, 1, 4) || SUBSTR(STRDATE, 6, 2);
--取全局参数中系统启用时间
SELECT COUNT(*) INTO GLPCOUNT FROM TGL_GLOBAL_PARAMETERS;
IF GLPCOUNT > 0 THEN
SELECT VARVALUE
INTO STRGPDATE
FROM TGL_GLOBAL_PARAMETERS
WHERE VARCODE = '1001'
AND ROWNUM = 1;
ELSE
RAISE EX1;
END IF;
IF TO_DATE(STRDATE, 'YYYY-MM-DD') < TO_DATE(STRGPDATE, 'YYYY-MM-DD') THEN
RAISE EX2;
END IF;

--取最大单位表编号ID
SELECT COUNT(*) INTO GLPCOUNT FROM TGL_COMPANY_PARAMETERS;
IF GLPCOUNT > 0 THEN
SELECT TRIM(TO_CHAR(MAX(VARVALUE) + 1, '0000'))
INTO COMPID
FROM TGL_COMPANY_PARAMETERS
WHERE VARCODE = '2002';
ELSE
COMPID := TRIM(TO_CHAR(1, '0000'));
END IF;

EXCEPTION
WHEN EX1 THEN
RAISE_APPLICATION_ERROR(-20001, '全局参数的启用时间没有设置!');
WHEN EX2 THEN
RAISE_APPLICATION_ERROR(-20001,
'单位启用时间不能比全局参数的启用时间小!');
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20001, '设置单位参数时出错!');

END GL_CREATE_COMPANY_PARAMETER;





/*****************************************************************************************************************************
** 过程名:GL_GLGOBALMANAGE_OPEN
** 参数 : IN : NUMBERINGID :凭证编号方式ID
** 描述: 有集团会计期打开月份控制的打开过程
/*****************************************************************************************************************************/
PROCEDURE GL_GLGOBALMANAGE_OPEN(UQGlobalPeriodID IN VARCHAR2,
GLGOBALSTATE IN VARCHAR2) IS
CURSOR V_CUR IS
SELECT UQCOMPANYID
FROM TGL_COMPANY_PARAMETERS
WHERE VARCODE = '2001';
V_NUMS NUMBER;
V_COMPANYID VARCHAR2(40);
V_COMPANYIDLIST VARCHAR2(2000);
V_SQL VARCHAR2(2000);
BEGIN

OPEN V_CUR;
LOOP
FETCH V_CUR
INTO V_COMPANYID;
EXIT WHEN V_CUR%NOTFOUND;

SELECT COUNT(TCP.INTSTATE)
INTO V_NUMS
FROM TGL_COMPANY_PERIODS TCP
WHERE TCP.UQCOMPANYID = V_COMPANYID
AND TCP.INTSTATE = 1;

IF (V_NUMS >= TO_NUMBER(GLGOBALSTATE)) THEN
V_COMPANYIDLIST := V_COMPANYIDLIST || ',''' || V_COMPANYID || '''';
ELSE
V_SQL := 'UPDATE TGL_COMPANY_PERIODS CP SET CP.INTSTATE = 1 WHERE CP.UQGLOBALPERIODID = ''' ||
UQGlobalPeriodID ||
''' AND CP.INTPROPERTY = 1 AND CP.UQCOMPANYID = ''' ||
V_COMPANYID || '''';
DBMS_OUTPUT.put_line(V_SQL);
EXECUTE IMMEDIATE V_SQL;


END IF;

END LOOP;

CLOSE V_CUR;
END GL_GLGOBALMANAGE_OPEN;


/*****************************************************************************************************************************
** 函数名:GETGLOBALPARAMETER
** 参数 : IN : vCode :全局参数编号
** 描述: 获取全局参数信息
/*****************************************************************************************************************************/
FUNCTION GetRecord(a_in number) return M_REFCURSM IS
V_CUR M_REFCURSM ;
BEGIN
OPEN V_CUR FOR 'SELECT * FROM T_XL';
RETURN V_CUR;
END; 

http://bbs.gimoo.net/thread/48350-1.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章