svn path=/Database/trunk/; revision=6324
This commit is contained in:
269
FAC/FAC_PAC.SRC
Normal file
269
FAC/FAC_PAC.SRC
Normal file
@@ -0,0 +1,269 @@
|
||||
#ifdef FAC
|
||||
|
||||
/* FAC_P_FAC_VOLGNR: Tabel en functies voor volgnummers.
|
||||
*
|
||||
* Deze tabel is voor het simuleren van sequences die zich kunnen
|
||||
* resetten om een bepaalde periode.
|
||||
*
|
||||
* De periode wordt aangegeven dmv. een TO_CHAR-formaat van een datum,
|
||||
* bijv. 'YYYY' voor jaar of 'MM' voor maand.
|
||||
*
|
||||
* De functies voor deze volgnummers zitten in een package. Het volgnummer
|
||||
* moet altijd via deze functies opgevraagd worden.
|
||||
*
|
||||
* De volgende functies zijn beschikbaar:
|
||||
* - fac_volgnr_currval(soort) RETURN NUMBER:
|
||||
* Vraag de huidige waarde van het volgnummer op.
|
||||
* - fac_volgnr_nextval(soort) RETURN NUMBER:
|
||||
* Vraag de waarde op van volgende volgnummer op.
|
||||
* het volgnummer en de laatste opvraagdatum wordt dan aangepast. Als de
|
||||
* huidige datum over de opgegeven periodegrens komt, dan wordt eerst het
|
||||
* volgnummer gereset.
|
||||
* - fac_volgnr_reset(soort):
|
||||
* Indien nodig reset het volgnr.
|
||||
*
|
||||
* In SQL_PLUS kan de source opgevraagd worden uit tabel USER_SOURCE.
|
||||
* Bij het creeren kan de de volgende error komen:
|
||||
* DBA-00072: Package body created with compilation errors.
|
||||
* De errors kunnen bekeken worden dmv. SHOW ERRORS;
|
||||
*
|
||||
* FAC_P_FAC_SAVE_RESTORE: Package voor het bewaren en teruggeven van primary keys binnen triggers.
|
||||
*
|
||||
* Gebruikt in: De status van de MLD_MELDING is afhankelijk van de minimale status van zijn opdrachten, of als
|
||||
* er geen opdrachten kan dit door de gebruiker gezet worden. Als er een nieuwe opdrachten aangemaakt
|
||||
* wordt, of als een opdracht van status veranderd of als een opdracht verwijderd wordt, heeft dit invloed
|
||||
* op de status van de bijbehorende melding. Dit mechanisme is opgelost via de triggers van MLD_OPDR.
|
||||
*
|
||||
* De volgende functies zijn beschikbaar:
|
||||
* - ResetSelectie(TableName) RETURN BOOLEAN:
|
||||
* Verwijderd de vorige selectie van de Primary-keys van de tabel. Hou hier rekening met multi-user dmv. de
|
||||
* huidige SessionId. Retourneerd of het gelukt (TRUE) is of niet (FALSE).
|
||||
* Deze moet aangeroepen worden in de BEFORE-statement-trigger,
|
||||
* bijvoorbeeld: BEFORE INSERT OR UPDATE OR DELETE ON mld_opdr.
|
||||
* - SavePrimaryKey(TableName, PrimaryKey) RETURN BOOLEAN:
|
||||
* Onthou de PrimaryKey-waarde, hou hiet ook rekening met multi-user dmv. de huidige SessionId. Retourneerd
|
||||
* of het gelukt (TRUE) is of niet (FALSE).
|
||||
* Deze moet aangeroepen worden in de BEFORE-row-trigger,
|
||||
* bijvoorbeeld: BEFORE INSERT OR UPDATE ON mld_opdr FOR EACH ROW
|
||||
* EN : BEFORE DELETE ON mld_opdr FOR EACH ROW
|
||||
* - GetPrimaryKey(TableName, IndexNr) RETURN NUMBER:
|
||||
* Geef de nth onthouden PrimaryKey terug, hou hiet ook rekening met multi-user dmv. de huidige SessionId.
|
||||
* Het IndexNr begint met 1 en loopt door totdat er geen volgende PrimaryKey onthouden is.
|
||||
* Retourneerd de gevonden PrimaryKey of NULL (als er geen volgende is).
|
||||
* Deze moet aangeroepen worden in de AFTER-statement-trigger,
|
||||
* bijvoorbeeld: AFTER INSERT OR UPDATE OR DELETE ON mld_opdr.
|
||||
*
|
||||
* LET OP: FAC_P_FAC_SAVE_RESTORE_UPDATE(Func, TableName)
|
||||
* Voor het gebruik van GetPrimaryKey() is een #define FAC_P_FAC_SAVE_RESTORE_UPDATE(Func, TableName)
|
||||
* gemaakt in COMSQL.H: Deze doorloopt alle onthouden PrimaryKeys van TableName en roept voor elk record
|
||||
* de functie Func aan. Func krijgt 1 argument, nl. PrimaryKey en moet een BOOLEAN retourneren.
|
||||
*
|
||||
* Voorbeelden van het gebruik staan in MLD_TRI.SRC in de triggers MLD_T_MLD_OPDR_B_IUD, MLD_T_MLD_OPDR_B_IU,
|
||||
* MLD_T_MLD_OPDR_B_D en MLD_T_MLD_OPDR_A_IUD.
|
||||
*
|
||||
* FAC_P_FAC_GEBRUIKER_OPSCHONEN: Procedure om de entries in FAC_GEBRUIKER-tabel op te schonen
|
||||
* Er kunnen namelijk entries in blijven bestaan van users die al verwijderd zijn.
|
||||
*
|
||||
*
|
||||
* Revivions:
|
||||
*
|
||||
* --- 01.40 ---
|
||||
* --- 01.39 ---
|
||||
* --- 01.38 ---
|
||||
* --- 01.37 ---
|
||||
* --- 01.36 ---
|
||||
* --- 01.35 ---
|
||||
* 15/04/1998 AH GetPrimaryKey() aangepast, SELECT DISTINCT fac_selectie_key ipv SELECT fac_selectie_key
|
||||
* 08/04/1998 AH #1589, Nieuwe procedure FAC_P_FAC_GEBRUIKER_OPSCHONEN aangemaakt
|
||||
* 01/04/1998 AH #1540, Nieuwe package FAC_P_FAC_SAVE_RESTORE toegevoegd voor het onthouden en teruggeven
|
||||
* van primary-keys.
|
||||
* --- 01.34 ---
|
||||
* --- 01.33 ---
|
||||
* --- 01.32 ---
|
||||
* --- 01.31 ---
|
||||
* --- 01.30 ---
|
||||
* --- 01.29 ---
|
||||
* --- 01.28 ---
|
||||
* --- 01.27 ---
|
||||
* --- 01.26 ---
|
||||
* --- 01.25 ---
|
||||
* --- 01.24 ---
|
||||
* --- 01.23 ---
|
||||
* --- 01.22 ---
|
||||
* --- 01.21 ---
|
||||
* --- 01.20 ---
|
||||
* --- 01.19 ---
|
||||
* --- 01.18 ---
|
||||
* --- 01.17 ---
|
||||
* --- 01.16 ---
|
||||
* --- 01.15 ---
|
||||
* 21-05-96 KTH - OR REPLACE toegevoegd aan package en package body
|
||||
* - file hernoemd van FAC_PACK.SRC naar FAC_PAC.SRC
|
||||
* 03-05-96 AH Creation.
|
||||
*/
|
||||
|
||||
CREATE OR REPLACE PACKAGE fac_p_fac_volgnr AS
|
||||
FUNCTION fac_volgnr_currval( soort IN CHAR ) RETURN NUMBER;
|
||||
FUNCTION fac_volgnr_nextval( soort IN CHAR ) RETURN NUMBER;
|
||||
PROCEDURE fac_volgnr_reset( soort IN CHAR );
|
||||
|
||||
END fac_p_fac_volgnr;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE PACKAGE BODY fac_p_fac_volgnr AS
|
||||
FUNCTION fac_volgnr_currval( soort IN CHAR ) RETURN NUMBER IS
|
||||
volgnr NUMBER;
|
||||
BEGIN
|
||||
SELECT fac_volgnr
|
||||
INTO volgnr
|
||||
FROM fac_volgnrs
|
||||
WHERE fac_volgnr_srt = soort;
|
||||
RETURN volgnr;
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND
|
||||
THEN APPLICATION_ERROR(-20000, 'alg_m152');
|
||||
RETURN 0;
|
||||
END fac_volgnr_currval;
|
||||
|
||||
FUNCTION fac_volgnr_nextval( soort IN CHAR ) RETURN NUMBER IS
|
||||
volgnr NUMBER;
|
||||
BEGIN
|
||||
fac_volgnr_reset(soort);
|
||||
|
||||
SELECT fac_volgnr + 1
|
||||
INTO volgnr
|
||||
FROM fac_volgnrs
|
||||
WHERE fac_volgnr_srt = soort
|
||||
FOR UPDATE OF fac_volgnr;
|
||||
|
||||
UPDATE fac_volgnrs
|
||||
SET fac_volgnr = volgnr,
|
||||
fac_volgnr_laatste_datum = SYSDATE
|
||||
WHERE fac_volgnr_srt = soort;
|
||||
|
||||
RETURN volgnr;
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND
|
||||
THEN APPLICATION_ERROR(-20000, 'alg_m152');
|
||||
RETURN 0;
|
||||
END fac_volgnr_nextval;
|
||||
|
||||
PROCEDURE fac_volgnr_reset( soort IN CHAR ) IS
|
||||
periode fac_volgnrs.fac_volgnr_periode%TYPE;
|
||||
laatste_datum fac_volgnrs.fac_volgnr_laatste_datum%TYPE;
|
||||
BEGIN
|
||||
SELECT fac_volgnr_periode, fac_volgnr_laatste_datum
|
||||
INTO periode, laatste_datum
|
||||
FROM fac_volgnrs
|
||||
WHERE fac_volgnr_srt = soort;
|
||||
IF TO_CHAR(laatste_datum, periode) <> TO_CHAR(SYSDATE, periode)
|
||||
THEN
|
||||
UPDATE fac_volgnrs
|
||||
SET fac_volgnr = 0,
|
||||
fac_volgnr_laatste_datum = SYSDATE
|
||||
WHERE fac_volgnr_srt = soort;
|
||||
END IF;
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND
|
||||
THEN APPLICATION_ERROR(-20000, 'alg_m152');
|
||||
END fac_volgnr_reset;
|
||||
|
||||
END fac_p_fac_volgnr;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE PACKAGE fac_p_fac_save_restore AS
|
||||
-- Maak de vorige selectie van de tabel en de huidige sessie leeg.
|
||||
FUNCTION ResetSelectie( TableName IN VARCHAR2 ) RETURN BOOLEAN;
|
||||
-- Onthou de primary key van de tabel en de huidige sessie.
|
||||
FUNCTION SavePrimaryKey( TableName IN VARCHAR2, PrimaryKey IN NUMBER ) RETURN BOOLEAN;
|
||||
-- Geef de nth primary key van de tabel en de huidige sessie. IndexNr begint met 1.
|
||||
FUNCTION GetPrimaryKey( TableName IN VARCHAR2, IndexNr IN NUMBER ) RETURN NUMBER;
|
||||
|
||||
PRAGMA RESTRICT_REFERENCES (GetPrimaryKey,WNDS, WNPS);
|
||||
END fac_p_fac_save_restore;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE PACKAGE BODY fac_p_fac_save_restore AS
|
||||
FUNCTION GetSessionId RETURN VARCHAR2 IS
|
||||
SessionId VARCHAR2(20);
|
||||
BEGIN
|
||||
SELECT USERENV('SESSIONID')
|
||||
INTO SessionId
|
||||
FROM DUAL;
|
||||
|
||||
RETURN SessionId;
|
||||
END;
|
||||
|
||||
FUNCTION ResetSelectie( TableName IN VARCHAR2 ) RETURN BOOLEAN IS
|
||||
SessionId VARCHAR2(20);
|
||||
BEGIN
|
||||
SessionId := GetSessionId;
|
||||
|
||||
DELETE FROM fac_selectie
|
||||
WHERE fac_selectie_node = SessionId
|
||||
AND fac_selectie_tabel = TableName;
|
||||
|
||||
RETURN TRUE;
|
||||
EXCEPTION
|
||||
WHEN OTHERS
|
||||
THEN RETURN FALSE;
|
||||
END;
|
||||
|
||||
FUNCTION SavePrimaryKey( TableName IN VARCHAR2, PrimaryKey IN NUMBER ) RETURN BOOLEAN IS
|
||||
SessionId VARCHAR2(20);
|
||||
BEGIN
|
||||
SessionId := GetSessionId;
|
||||
|
||||
INSERT INTO fac_selectie (fac_selectie_node,
|
||||
fac_selectie_tabel,
|
||||
fac_selectie_key)
|
||||
VALUES (SessionId, TableName, PrimaryKey);
|
||||
|
||||
RETURN TRUE;
|
||||
EXCEPTION
|
||||
WHEN OTHERS
|
||||
THEN RETURN FALSE;
|
||||
END;
|
||||
|
||||
-- Geef de nth Fac_Selectie_Key van de geselecteerde records
|
||||
-- terug. IndexNr begint met 1.
|
||||
FUNCTION GetPrimaryKey( TableName IN VARCHAR2, IndexNr IN NUMBER ) RETURN NUMBER IS
|
||||
SessionId VARCHAR2(20);
|
||||
CURSOR Selectie IS SELECT DISTINCT fac_selectie_key
|
||||
FROM fac_selectie
|
||||
WHERE fac_selectie_node = SessionId
|
||||
AND fac_selectie_tabel = TableName
|
||||
ORDER BY fac_selectie_key;
|
||||
|
||||
SelectieRec Selectie%ROWTYPE;
|
||||
TmpIndex NUMBER;
|
||||
ReturnKey NUMBER(10);
|
||||
BEGIN
|
||||
SessionId := GetSessionId;
|
||||
ReturnKey := NULL;
|
||||
TmpIndex := 1;
|
||||
FOR SelectieRec IN Selectie
|
||||
LOOP
|
||||
IF IndexNr = TmpIndex
|
||||
THEN
|
||||
ReturnKey := SelectieRec.fac_selectie_key;
|
||||
EXIT;
|
||||
END IF;
|
||||
TmpIndex := TmpIndex + 1;
|
||||
END LOOP;
|
||||
RETURN ReturnKey;
|
||||
END;
|
||||
|
||||
END fac_p_fac_save_restore;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE PROCEDURE FAC_P_FAC_GEBRUIKER_OPSCHONEN IS
|
||||
BEGIN
|
||||
DELETE FROM fac_gebruiker
|
||||
WHERE fac_gebruiker_username NOT IN (SELECT username
|
||||
FROM all_users);
|
||||
COMMIT;
|
||||
END;
|
||||
/
|
||||
|
||||
#endif // FAC
|
||||
Reference in New Issue
Block a user