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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章