666 lines
22 KiB
Plaintext
666 lines
22 KiB
Plaintext
#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.
|
|
*
|
|
*
|
|
*/
|
|
|
|
#include "comsql.h"
|
|
|
|
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;
|
|
#ifndef MS_SQL
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN APPLICATION_ERROR(-20000, 'alg_m152');
|
|
#else
|
|
if @@rowcount<1
|
|
#endif
|
|
volgnr := 0;
|
|
RETURN volgnr;
|
|
END fac_volgnr_currval;
|
|
|
|
#ifndef MS_SQL
|
|
FUNCTION fac_volgnr_nextval( soort IN CHAR ) RETURN NUMBER IS
|
|
volgnr NUMBER;
|
|
#else
|
|
PROCEDURE fac_volgnr_nextval( soort IN CHAR, volgnr OUT NUMBER ) IS
|
|
#endif
|
|
BEGIN
|
|
_EXEC1(_MSSQL(fac_p_fac_volgnr.)fac_volgnr_reset,soort);
|
|
|
|
SELECT fac_volgnr + 1
|
|
INTO volgnr
|
|
FROM fac_volgnrs
|
|
WHERE fac_volgnr_srt = soort
|
|
_ORACLE(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 DATE_TO_CHAR(laatste_datum, periode) <> DATE_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;
|
|
-- Onthou naast Primary key ook de datum i.v.m. een eventuele UNDO vanuit AutoCAD.
|
|
FUNCTION SavePrimaryKeyAndDate( TableName IN VARCHAR2, PrimaryKey IN NUMBER, Datum IN Date ) RETURN BOOLEAN;
|
|
-- Geef verwijderdatum of NULL terug van primary key i.v.m. eventuele UNDO vanuit AutoCAD.
|
|
FUNCTION GetDate( TableName IN VARCHAR2, PrimaryKey IN NUMBER ) RETURN DATE;
|
|
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 _MSSQL(()) RETURN VARCHAR2 IS
|
|
Session_Id VARCHAR2(20);
|
|
BEGIN
|
|
#ifndef MS_SQL
|
|
SELECT USERENV('SESSIONID')
|
|
INTO Session_Id
|
|
FROM DUAL;
|
|
#else
|
|
Session_Id := @@SPID;
|
|
#endif
|
|
|
|
RETURN Session_Id;
|
|
END;
|
|
|
|
#ifdef MS_SQL
|
|
PROCEDURE ResetSelectie( TableName IN VARCHAR2 ) IS
|
|
#else
|
|
FUNCTION ResetSelectie( TableName IN VARCHAR2 ) RETURN BOOLEAN IS
|
|
#endif
|
|
SessionId VARCHAR2(20);
|
|
BEGIN
|
|
SessionId := _MSSQL(fac_p_fac_save_restore.)GetSessionId();
|
|
|
|
DELETE FROM fac_selectie
|
|
WHERE fac_selectie_node = SessionId
|
|
AND fac_selectie_tabel = TableName;
|
|
|
|
RETURN TRUE;
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN RETURN FALSE;
|
|
END;
|
|
|
|
#ifdef MS_SQL
|
|
PROCEDURE SavePrimaryKey( TableName IN VARCHAR2, PrimaryKey IN NUMBER ) IS
|
|
#else
|
|
FUNCTION SavePrimaryKey( TableName IN VARCHAR2, PrimaryKey IN NUMBER ) RETURN BOOLEAN IS
|
|
#endif
|
|
SessionId VARCHAR2(20);
|
|
BEGIN
|
|
SessionId := _MSSQL(fac_p_fac_save_restore.)GetSessionId();
|
|
|
|
INSERT INTO fac_selectie (fac_selectie_node,
|
|
fac_selectie_tabel,
|
|
fac_selectie_key)
|
|
VALUES (SessionId, TableName, PrimaryKey);
|
|
#ifndef MS_SQL
|
|
RETURN TRUE;
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN RETURN FALSE;
|
|
#endif
|
|
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;
|
|
#ifndef MS_SQL
|
|
SelectieRec Selectie%ROWTYPE;
|
|
#endif
|
|
TmpIndex NUMBER;
|
|
ReturnKey NUMBER(10);
|
|
BEGIN
|
|
SessionId := _MSSQL(fac_p_fac_save_restore.)GetSessionId();
|
|
ReturnKey := NULL;
|
|
TmpIndex := 1;
|
|
FOR SelectieRec IN Selectie LOOP
|
|
IF IndexNr = TmpIndex
|
|
THEN
|
|
#ifndef MS_SQL
|
|
ReturnKey := SelectieRec.fac_selectie_key;
|
|
#else
|
|
ReturnKey := TO_NUMBER(SelectieRec);
|
|
#endif
|
|
EXIT;
|
|
END IF;
|
|
TmpIndex := TmpIndex + 1;
|
|
END LOOP;
|
|
RETURN ReturnKey;
|
|
END;
|
|
|
|
#ifdef MS_SQL
|
|
PROCEDURE SavePrimaryKeyAndDate( TableName IN VARCHAR2, PrimaryKey IN NUMBER, Datum IN Date ) IS
|
|
#else
|
|
FUNCTION SavePrimaryKeyAndDate( TableName IN VARCHAR2, PrimaryKey IN NUMBER, Datum IN Date ) RETURN BOOLEAN IS
|
|
#endif
|
|
SessionId VARCHAR2(20);
|
|
BEGIN
|
|
SessionId := _MSSQL(fac_p_fac_save_restore.)GetSessionId();
|
|
|
|
INSERT INTO fac_selectie (fac_selectie_node,
|
|
fac_selectie_tabel,
|
|
fac_selectie_key,
|
|
fac_selectie_datum)
|
|
VALUES (SessionId, TableName, PrimaryKey, Datum);
|
|
#ifndef MS_SQL
|
|
RETURN TRUE;
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN RETURN FALSE;
|
|
#endif
|
|
END;
|
|
|
|
FUNCTION GetDate( TableName IN VARCHAR2, PrimaryKey IN NUMBER ) RETURN DATE IS
|
|
SessionId VARCHAR2(20);
|
|
ReturnDate Date;
|
|
|
|
CURSOR Selectie IS SELECT DISTINCT fac_selectie_datum
|
|
FROM fac_selectie
|
|
|
|
WHERE fac_selectie_node = SessionId
|
|
AND fac_selectie_key = PrimaryKey
|
|
AND fac_selectie_tabel = TableName;
|
|
#ifndef MS_SQL
|
|
SelectieRec Selectie%ROWTYPE;
|
|
#endif
|
|
TmpIndex NUMBER;
|
|
ReturnKey NUMBER(10);
|
|
|
|
BEGIN
|
|
SessionId := _MSSQL(fac_p_fac_save_restore.)GetSessionId();
|
|
ReturnDate := NULL;
|
|
FOR SelectieRec IN Selectie LOOP
|
|
#ifndef MS_SQL
|
|
ReturnDate := SelectieRec.fac_selectie_datum;
|
|
#else
|
|
ReturnDate := SelectieRec;
|
|
#endif
|
|
EXIT;
|
|
END LOOP;
|
|
RETURN ReturnDate;
|
|
END;
|
|
END fac_p_fac_save_restore;
|
|
/
|
|
|
|
|
|
CREATE OR REPLACE PACKAGE webfac AS
|
|
FUNCTION fac_f_usrrap_query (p_tabelnaam IN VARCHAR2) RETURN VARCHAR2;
|
|
FUNCTION fac_f_usrrap_orderby (p_tabelnaam IN VARCHAR2) RETURN VARCHAR2;
|
|
FUNCTION fac_f_getmainuser RETURN VARCHAR2;
|
|
END webfac;
|
|
/
|
|
|
|
CREATE OR REPLACE PACKAGE BODY webfac AS
|
|
/* These functions won't work for MS SQL server, they need new views */
|
|
FUNCTION fac_f_getmainuser _MSSQL(()) RETURN VARCHAR2 IS
|
|
MainUser VARCHAR2(80);
|
|
|
|
BEGIN
|
|
/* Wie is de hoofduser?? */
|
|
BEGIN
|
|
#ifdef MS_SQL
|
|
SELECT UPPER(table_schema)
|
|
INTO mainuser
|
|
FROM information_schema.tables
|
|
WHERE table_name = 'FAC_MODULE' and table_type='BASE TABLE';
|
|
#else
|
|
SELECT UPPER(table_owner)
|
|
INTO mainuser
|
|
FROM user_synonyms
|
|
WHERE synonym_name = 'FAC_MODULE';
|
|
#endif
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN
|
|
/* We zijn zelf de hoofduser! */
|
|
SELECT UPPER(USER)
|
|
INTO mainuser
|
|
FROM DUAL;
|
|
END;
|
|
RETURN MainUser;
|
|
END fac_f_getmainuser;
|
|
|
|
|
|
FUNCTION fac_f_usrrap_query ( p_tabelnaam IN VARCHAR2 ) RETURN VARCHAR2 IS
|
|
QueryString VARCHAR2(2000);
|
|
Kolomnaam VARCHAR2(64);
|
|
mainuser VARCHAR2(80);
|
|
#ifdef MS_SQL
|
|
LabelRec_data_type VARCHAR2(106);
|
|
LabelRec_column_name VARCHAR2(30);
|
|
#endif
|
|
BEGIN
|
|
mainuser := _MSSQL(webfac.)fac_f_getmainuser();
|
|
BEGIN
|
|
DECLARE
|
|
CURSOR Zoek_label IS
|
|
SELECT column_name
|
|
, data_type
|
|
FROM all_tab_columns
|
|
WHERE table_name = UPPER(p_tabelnaam)
|
|
AND owner = mainuser
|
|
ORDER BY COLUMN_ID;
|
|
|
|
BEGIN
|
|
|
|
QueryString := 'Select ';
|
|
#ifndef MS_SQL
|
|
FOR LabelRec in zoek_label LOOP
|
|
#else
|
|
[skip]
|
|
OPEN zoek_label;
|
|
FETCH NEXT FROM zoek_label INTO @LabelRec_column_name, @LabelRec_data_type;
|
|
WHILE (@@FETCH_STATUS <> -1 )
|
|
BEGIN
|
|
[/skip]
|
|
#endif
|
|
|
|
IF LabelRec.data_type = 'NUMBER'
|
|
THEN
|
|
QueryString := QueryString ||'to_number('||_MSSQL('web.number_')_ORACLE('')||'TO_CHAR('|| LabelRec.column_name ||',''99999999D9999'')) "'||LabelRec.column_name||'",';
|
|
ELSE
|
|
IF LabelRec.data_type = 'DATE'
|
|
THEN
|
|
QueryString := QueryString ||_MSSQL('web.date_')_ORACLE('')||'TO_CHAR(' || LabelRec.column_name ||',''MM-DD-YYYY'') "'||LabelRec.column_name||'",';
|
|
ELSE
|
|
QueryString := QueryString ||' ' || LabelRec.column_name ||',';
|
|
END IF;
|
|
END IF;
|
|
|
|
#ifndef MS_SQL
|
|
END LOOP;
|
|
END;
|
|
END;
|
|
QueryString := Substr(QueryString,1,(LENGTH(QueryString)-1))||' from '|| p_tabelnaam ;
|
|
RETURN QueryString;
|
|
#else
|
|
[skip]
|
|
FETCH NEXT FROM zoek_label INTO @LabelRec_column_name, @LabelRec_data_type;
|
|
END;
|
|
CLOSE zoek_label;
|
|
DEALLOCATE zoek_label;
|
|
END;
|
|
END;
|
|
set @QueryString = Substring(@QueryString,1,(LEN(@QueryString)-1))+' from '+ @p_tabelnaam ;
|
|
RETURN @QueryString;
|
|
[/skip]
|
|
#endif
|
|
END fac_f_usrrap_query;
|
|
|
|
|
|
FUNCTION fac_f_usrrap_orderby ( p_tabelnaam IN VARCHAR2 ) RETURN VARCHAR2 IS
|
|
AantalRecords NUMBER(10);
|
|
OrderBy VARCHAR2(255);
|
|
mainuser VARCHAR2(80);
|
|
i NUMBER(10);
|
|
|
|
BEGIN
|
|
mainuser := _MSSQL(webfac.)fac_f_getmainuser();
|
|
SELECT count(*)
|
|
INTO AantalRecords
|
|
FROM all_tab_columns
|
|
WHERE table_name = UPPER(p_tabelnaam)
|
|
AND owner = mainuser;
|
|
--
|
|
OrderBy := '';
|
|
i := 1;
|
|
|
|
[skip]
|
|
#ifndef MS_SQL
|
|
FOR i IN 1..AantalRecords) LOOP
|
|
OrderBy := OrderBy||TO_CHAR(i)||',';
|
|
END LOOP;
|
|
#else
|
|
WHILE (@i <= @AantalRecords) BEGIN
|
|
SET @OrderBy = @OrderBy + RTRIM(CONVERT(char,@i)) + ',';
|
|
SET @i = @i + 1;
|
|
END;
|
|
#endif
|
|
[/skip]
|
|
OrderBy := SUBSTR(OrderBy,1,(LENGTH(OrderBy)-1));
|
|
RETURN ' ORDER BY ' || OrderBy;
|
|
END fac_f_usrrap_orderby;
|
|
END webfac;
|
|
/
|
|
|
|
|
|
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
|
|
UNION
|
|
SELECT upper(prs_perslid_initialen)
|
|
FROM prs_v_aanwezigperslid);
|
|
COMMIT;
|
|
END;
|
|
/
|
|
|
|
CREATE OR REPLACE FUNCTION _MSSQL(web.)FAC_F_FAC_GET_DESCRIPTION(LPNName IN VARCHAR2
|
|
,CondKey IN NUMBER
|
|
,Prefix IN VARCHAR2
|
|
,PrefixKey IN NUMBER) RETURN VARCHAR2 IS
|
|
NextVolgNr VARCHAR2(20);
|
|
DeelUpper ins_deel.ins_deel_omschrijving%TYPE;
|
|
ReturnString VARCHAR2(30);
|
|
BEGIN
|
|
-- From 4.40 on, CondKey is dummy for ins_deel (object/subobject): uniqueness is assumed over the entire database
|
|
IF LPNName = 'LPN_INS_DEEL'
|
|
THEN
|
|
SELECT NVL(LPAD( TO_CHAR(MAX(TO_NUMBER(SUBSTR(ins_deel_upper, LENGTH(Prefix)+1,LENGTH(ins_deel_upper)-LENGTH(Prefix))))+1) , MAX(LENGTH(ins_deel_upper)-LENGTH(Prefix)),'0'),'001')
|
|
INTO NextVolgNr
|
|
FROM INS_DEEL
|
|
WHERE ins_deel_upper LIKE Prefix||'%'
|
|
AND Fac.safe_to_number(SUBSTR(ins_deel_upper, LENGTH(Prefix)+1,LENGTH(ins_deel_upper)-LENGTH(Prefix))) IS NOT NULL
|
|
AND ins_deel_parent_key IS NULL
|
|
AND ins_deel_verwijder IS NULL;
|
|
ELSIF LPNName = 'LPN_INS_ONDERDEEL'
|
|
THEN
|
|
SELECT NVL(LPAD( TO_CHAR(MAX(TO_NUMBER(SUBSTR(ins_deel_upper, LENGTH(Prefix)+1,LENGTH(ins_deel_upper)-LENGTH(Prefix))))+1) , MAX(LENGTH(ins_deel_upper)-LENGTH(Prefix)),'0'),'001')
|
|
INTO NextVolgNr
|
|
FROM INS_DEEL
|
|
WHERE ins_deel_upper LIKE Prefix||'%'
|
|
AND Fac.safe_to_number(SUBSTR(ins_deel_upper, LENGTH(Prefix)+1,LENGTH(ins_deel_upper)-LENGTH(Prefix))) IS NOT NULL
|
|
AND ins_deel_parent_key = CondKey
|
|
AND ins_deel_verwijder IS NULL;
|
|
ELSIF LPNName = 'LPN_ALG_TERREINSECTOR'
|
|
THEN
|
|
FOR i IN 3..10
|
|
LOOP
|
|
SELECT NVL(TO_CHAR(MAX(TO_NUMBER(SUBSTR(alg_terreinsector_code,LENGTH(alg_terreinsector_code)-(i-1),LENGTH(alg_terreinsector_code)))+1)), '***')
|
|
INTO NextVolgNr
|
|
FROM alg_v_aanwezigterreinsector
|
|
WHERE LTRIM(SUBSTR(alg_terreinsector_code, LENGTH(alg_terreinsector_code)-(i-1), LENGTH(alg_terreinsector_code))) BETWEEN '0' AND LPAD('9',i,'9')
|
|
AND alg_locatie_key = CondKey
|
|
AND LENGTH(alg_terreinsector_code) <= i;
|
|
IF NextVolgNr = '***'
|
|
THEN
|
|
IF i = 3
|
|
THEN
|
|
NextVolgNr := '001';
|
|
ELSE
|
|
NextVolgNr := POWER(10, (i-1));
|
|
END IF;
|
|
EXIT;
|
|
ELSE
|
|
IF LENGTH(NextVolgNr) <= i
|
|
THEN
|
|
NextVolgNr:= LPAD(NextVolgNr,i,'0');
|
|
EXIT;
|
|
END IF;
|
|
END IF;
|
|
END LOOP;
|
|
ELSIF LPNName = 'LPN_ALG_GEBOUW'
|
|
THEN
|
|
FOR i IN 3..10
|
|
LOOP
|
|
SELECT NVL(TO_CHAR(MAX(TO_NUMBER(SUBSTR(alg_gebouw_code, LENGTH(alg_gebouw_code)-(i-1), LENGTH(alg_gebouw_code)))+1)), '***')
|
|
INTO NextVolgNr
|
|
FROM alg_v_aanweziggebouw
|
|
WHERE LTRIM(SUBSTR(alg_gebouw_code, LENGTH(alg_gebouw_code)-(i-1), LENGTH(alg_gebouw_code))) BETWEEN '0' AND LPAD('9',i,'9')
|
|
AND alg_locatie_key = CondKey
|
|
AND LENGTH(alg_gebouw_code) <= i;
|
|
IF NextVolgNr = '***'
|
|
THEN
|
|
IF i = 3
|
|
THEN
|
|
NextVolgNr := '001';
|
|
ELSE
|
|
NextVolgNr := POWER(10, (i-1));
|
|
END IF;
|
|
EXIT;
|
|
ELSE
|
|
IF LENGTH(NextVolgNr) <= i
|
|
THEN
|
|
NextVolgNr:= LPAD(NextVolgNr,i,'0');
|
|
EXIT;
|
|
END IF;
|
|
END IF;
|
|
END LOOP;
|
|
ELSIF LPNName = 'LPN_ALG_RUIMTE'
|
|
THEN
|
|
FOR i IN 3..10
|
|
LOOP
|
|
SELECT NVL(TO_CHAR(MAX(TO_NUMBER(SUBSTR(alg_ruimte_nr, LENGTH(alg_ruimte_nr)-(i-1), LENGTH(alg_ruimte_nr)))+1)), '***')
|
|
INTO NextVolgNr
|
|
FROM alg_v_aanwezigruimte
|
|
WHERE LTRIM(SUBSTR(alg_ruimte_nr, LENGTH(alg_ruimte_nr)-(i-1), LENGTH(alg_ruimte_nr))) BETWEEN '0' AND LPAD('9',i,'9')
|
|
AND alg_verdieping_key = CondKey
|
|
AND LENGTH(alg_ruimte_nr) <= i;
|
|
IF NextVolgNr = '***'
|
|
THEN
|
|
IF i = 3
|
|
THEN
|
|
NextVolgNr := '001';
|
|
ELSE
|
|
NextVolgNr := POWER(10, (i-1));
|
|
END IF;
|
|
EXIT;
|
|
ELSE
|
|
IF LENGTH(NextVolgNr) <= i
|
|
THEN
|
|
NextVolgNr:= LPAD(NextVolgNr,i,'0');
|
|
EXIT;
|
|
END IF;
|
|
END IF;
|
|
END LOOP;
|
|
ELSIF LPNName = 'LPN_PRS_WERKPLEK'
|
|
THEN
|
|
BEGIN
|
|
SELECT TO_CHAR(NVL(MAX(prs_werkplek_volgnr),0) +1)
|
|
INTO NextVolgNr
|
|
FROM prs_werkplek
|
|
WHERE prs_alg_ruimte_key = CondKey
|
|
AND prs_werkplek_verwijder IS NULL;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN NextVolgNr := '1';
|
|
END;
|
|
/* Omschrijving */
|
|
BEGIN
|
|
SELECT alg_ruimte_nr ||' - '|| NextVolgNr
|
|
INTO NextVolgNr
|
|
FROM alg_ruimte
|
|
WHERE alg_ruimte_key = CondKey;
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN NULL;
|
|
END;
|
|
END IF;
|
|
ReturnString := Prefix||NextVolgNr;
|
|
RETURN ReturnString;
|
|
END;
|
|
/
|
|
|
|
|
|
/*
|
|
** Licentiecheck kan in form worden gedaan nu elke user leesrechten op systeemtabellen heeft.
|
|
CREATE OR REPLACE PACKAGE fac_p_fac_session AS
|
|
FUNCTION v_sessions(p_role IN VARCHAR2 ) RETURN NUMBER;
|
|
PRAGMA RESTRICT_REFERENCES (v_sessions, WNDS, WNPS);
|
|
END fac_p_fac_session;
|
|
/
|
|
|
|
CREATE OR REPLACE PACKAGE BODY fac_p_fac_session AS
|
|
FUNCTION v_sessions(p_role IN VARCHAR2) RETURN NUMBER IS
|
|
v_machines NUMBER(2);
|
|
BEGIN
|
|
-- SELECT COUNT(DISTINCT machine)
|
|
-- INTO v_machines
|
|
-- FROM v$session
|
|
-- WHERE username in (SELECT DISTINCT grantee
|
|
-- FROM dba_role_privs
|
|
-- WHERE INSTR(granted_role,p_role) > 0);
|
|
v_machines := 5;
|
|
RETURN (v_machines);
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN RETURN (-1);
|
|
END;
|
|
END fac_p_fac_session;
|
|
/
|
|
*/
|
|
|
|
CREATE OR REPLACE PACKAGE fac AS
|
|
FUNCTION safe_To_Number( str IN VARCHAR2 ) RETURN NUMBER;
|
|
FUNCTION safe_To_Date ( str IN VARCHAR2 ) RETURN DATE;
|
|
END fac;
|
|
/
|
|
|
|
CREATE OR REPLACE PACKAGE BODY fac AS
|
|
-- This function is to be used instead of the native TO_NUMBER in situations
|
|
-- where the value might be an invalid number. This is the case for (FSN#203)
|
|
-- flexible properties as in FAC.SAFE_TO_NUMBER(alg_onrgoedkenmerk_waarde)<200
|
|
-- It returns NULL instead of an ORA1722:error (or even another error)
|
|
FUNCTION safe_To_Number( str IN VARCHAR2 ) RETURN NUMBER IS
|
|
BEGIN
|
|
#ifndef MS_SQL
|
|
RETURN TO_NUMBER(str);
|
|
EXCEPTION
|
|
WHEN OTHERS THEN RETURN NULL;
|
|
#else
|
|
IF Web.IsNumberString(str) = 1 RETURN CAST(str as money);
|
|
RETURN NULL;
|
|
#endif
|
|
END;
|
|
|
|
FUNCTION safe_To_Date( pchar IN VARCHAR2, pfmt IN VARCHAR2 ) RETURN DATE IS
|
|
BEGIN
|
|
#ifndef MS_SQL
|
|
RETURN TO_DATE(pchar, pfmt);
|
|
EXCEPTION
|
|
WHEN OTHERS THEN RETURN NULL;
|
|
#else
|
|
// weet niet of dit voor sqls klopt -pf
|
|
IF Web.IsDateString(pchar, pfmt) = 1 RETURN CAST(pchar as date);
|
|
RETURN NULL;
|
|
#endif
|
|
END;
|
|
|
|
END fac;
|
|
/
|
|
|
|
#endif // FAC
|