146 lines
5.6 KiB
Plaintext
146 lines
5.6 KiB
Plaintext
/* $Revision$
|
|
* $Id$
|
|
*/
|
|
|
|
/* FAC_PACTSK
|
|
*
|
|
* Contains all functions for tasker.
|
|
*
|
|
*/
|
|
|
|
CREATE OR REPLACE PACKAGE tsk
|
|
AS
|
|
PROCEDURE registercust (p_customerid VARCHAR2 DEFAULT NULL,
|
|
p_schema VARCHAR2 DEFAULT NULL);
|
|
PROCEDURE registertask (p_taskcode VARCHAR2,
|
|
p_customerid VARCHAR2 DEFAULT NULL);
|
|
PROCEDURE starttask (p_taskcode VARCHAR2,
|
|
p_nextrun DATE DEFAULT SYSDATE,
|
|
p_customerid VARCHAR2 DEFAULT NULL);
|
|
END tsk;
|
|
/
|
|
|
|
CREATE OR REPLACE PACKAGE BODY tsk
|
|
AS
|
|
PROCEDURE registercust (p_customerid VARCHAR2 DEFAULT NULL,
|
|
p_schema VARCHAR2 DEFAULT NULL)
|
|
AS
|
|
tsk_master_schema VARCHAR(32);
|
|
custid fac_version.fac_version_cust%TYPE;
|
|
selfid fac_version.fac_version_cust%TYPE;
|
|
selfschema fac_version.fac_version_schema%TYPE;
|
|
tsksql VARCHAR2 (4000);
|
|
cursor_name INTEGER;
|
|
rows_processed INTEGER;
|
|
BEGIN
|
|
SELECT fac_version_cust,
|
|
fac_version_schema
|
|
INTO selfid,
|
|
selfschema
|
|
FROM fac_version;
|
|
custid := COALESCE(p_customerid, selfid);
|
|
tsk_master_schema := fac.getsetting ('tsk_master_schema');
|
|
|
|
IF tsk_master_schema IS NULL OR tsk_master_schema = USER
|
|
THEN -- zelf oplossen
|
|
BEGIN
|
|
INSERT INTO fac_cust(fac_cust_customerid, fac_cust_schema)
|
|
VALUES(custid, COALESCE(p_schema, selfschema));
|
|
EXCEPTION
|
|
WHEN DUP_VAL_ON_INDEX
|
|
THEN
|
|
NULL;
|
|
END;
|
|
-- Schema bijwerken
|
|
UPDATE fac_cust
|
|
SET fac_cust_schema = COALESCE(p_schema, selfschema)
|
|
WHERE fac_cust_customerid = custid;
|
|
ELSE -- Remote register
|
|
tsksql := 'BEGIN ' || tsk_master_schema || '.tsk.registercust(:custid, :schema); END;';
|
|
|
|
cursor_name := DBMS_SQL.open_cursor;
|
|
DBMS_SQL.PARSE (cursor_name, tsksql, DBMS_SQL.NATIVE);
|
|
DBMS_SQL.BIND_VARIABLE (cursor_name, ':custid', selfid);
|
|
DBMS_SQL.BIND_VARIABLE (cursor_name, ':schema', selfschema);
|
|
rows_processed := DBMS_SQL.EXECUTE (cursor_name);
|
|
DBMS_SQL.CLOSE_CURSOR (cursor_name);
|
|
END IF;
|
|
END;
|
|
|
|
PROCEDURE registertask (p_taskcode VARCHAR2,
|
|
p_customerid VARCHAR2 DEFAULT NULL)
|
|
AS
|
|
tsk_master_schema VARCHAR(32);
|
|
selfid fac_version.fac_version_cust%TYPE;
|
|
tsksql VARCHAR2 (4000);
|
|
cursor_name INTEGER;
|
|
rows_processed INTEGER;
|
|
BEGIN
|
|
SELECT fac_version_cust INTO selfid FROM fac_version;
|
|
tsk_master_schema := fac.getsetting ('tsk_master_schema');
|
|
|
|
IF tsk_master_schema IS NULL OR tsk_master_schema = USER
|
|
THEN -- zelf oplossen
|
|
BEGIN
|
|
INSERT INTO fac_task(fac_cust_key, fac_task_code)
|
|
SELECT fac_cust_key, p_taskcode
|
|
FROM fac_cust
|
|
WHERE fac_cust_customerid = COALESCE(p_customerid, selfid);
|
|
EXCEPTION
|
|
WHEN DUP_VAL_ON_INDEX
|
|
THEN
|
|
NULL;
|
|
END;
|
|
ELSE -- start remote tasker
|
|
tsksql := 'BEGIN ' || tsk_master_schema || '.tsk.registertask(:taskcode, :custid); END;';
|
|
|
|
cursor_name := DBMS_SQL.open_cursor;
|
|
DBMS_SQL.PARSE (cursor_name, tsksql, DBMS_SQL.NATIVE);
|
|
DBMS_SQL.BIND_VARIABLE (cursor_name, ':custid', selfid);
|
|
DBMS_SQL.BIND_VARIABLE (cursor_name, ':taskcode', p_taskcode);
|
|
rows_processed := DBMS_SQL.EXECUTE (cursor_name);
|
|
DBMS_SQL.CLOSE_CURSOR (cursor_name);
|
|
END IF;
|
|
END;
|
|
|
|
-- veronderstelt dat taak al correct is geregistreerd
|
|
PROCEDURE starttask (p_taskcode VARCHAR2,
|
|
p_nextrun DATE DEFAULT SYSDATE,
|
|
p_customerid VARCHAR2 DEFAULT NULL)
|
|
AS
|
|
tsk_master_schema VARCHAR(32);
|
|
selfid fac_version.fac_version_cust%TYPE;
|
|
tsksql VARCHAR2 (4000);
|
|
cursor_name INTEGER;
|
|
rows_processed INTEGER;
|
|
BEGIN
|
|
SELECT fac_version_cust INTO selfid FROM fac_version;
|
|
tsk_master_schema := fac.getsetting ('tsk_master_schema');
|
|
|
|
IF tsk_master_schema IS NULL OR tsk_master_schema = USER
|
|
THEN -- zelf oplossen
|
|
UPDATE fac_task
|
|
SET fac_task_nextrun = fac.safe_LEAST (p_nextrun, fac_task_nextrun)
|
|
WHERE fac_task_code = p_taskcode
|
|
AND fac_cust_key = (SELECT fac_cust_key
|
|
FROM fac_cust
|
|
WHERE fac_cust_customerid = COALESCE(p_customerid, selfid));
|
|
ELSE -- start remote tasker
|
|
tsksql := 'BEGIN ' || tsk_master_schema || '.tsk.starttask(:taskcode, :nextrun, :custid); END;';
|
|
|
|
cursor_name := DBMS_SQL.open_cursor;
|
|
DBMS_SQL.PARSE (cursor_name, tsksql, DBMS_SQL.NATIVE);
|
|
DBMS_SQL.BIND_VARIABLE (cursor_name, ':custid', selfid);
|
|
DBMS_SQL.BIND_VARIABLE (cursor_name, ':taskcode', p_taskcode);
|
|
DBMS_SQL.BIND_VARIABLE (cursor_name, ':nextrun', p_nextrun);
|
|
rows_processed := DBMS_SQL.EXECUTE (cursor_name);
|
|
DBMS_SQL.CLOSE_CURSOR (cursor_name);
|
|
END IF;
|
|
END;
|
|
END tsk;
|
|
/
|
|
-- tsk_master_schema needs:
|
|
-- GRANT EXECUTE ON tsk TO PUBLIC
|
|
|
|
REGISTERRUN('$Id$')
|