MINI MINI MANI MO
Rem
Rem Copyright (c) 2012, 2017, Oracle and/or its affiliates.
Rem All rights reserved.
Rem
Rem NAME
Rem rqproc.sql - RQuery PROCedures, functions and packages
Rem
Rem DESCRIPTION
Rem RQuery procedures, functions and packages.
Rem
Rem NOTES
Rem
Rem MODIFIED (MM/DD/YY)
Rem qinwan 04/20/17 - XbranchMerge qinwan_bug-25832933 from
Rem st_oracler_1.5.0
Rem qinwan 10/11/16 - add version to datastore object
Rem qinwan 02/05/16 - XbranchMerge qinwan_bug-22309626 from
Rem st_oracler_1.5.0
Rem qinwan 04/06/17 - Bug25832933: replace query string parameter with
Rem refcursor
Rem qinwan 12/17/15 - fix sql injection issue
Rem qinwan 08/13/15 - dspriv2: share datastore
Rem qinwan 05/27/15 - refractorize DataStore procedure
Rem qinwan 02/27/15 - Bug 17715960: extend datastore metadata table
Rem ffeli 04/01/15 - Add ORE 1.5 R scripts features
Rem paboyoun 01/29/14 - add PARALLEL_ENABLE to all single-row math
Rem functions
Rem qinwan 09/09/13 - add rqDeleteRObjects
Rem demukhin 10/26/12 - bug 14802813: init R in one place
Rem qinwan 10/25/12 - fix bug 14808516
Rem demukhin 10/15/12 - Created
Rem
--***************************************************************************--
--* (*) TABLE FUNCTION: rqEval *--
--***************************************************************************--
CREATE TYPE rqObject AS OBJECT (
name VARCHAR2(4000),
total NUMBER,
chunk NUMBER,
value RAW(2000)
);
/
CREATE TYPE rqObjSet AS TABLE OF rqObject;
/
CREATE TYPE rqXMLObj AS OBJECT (
name VARCHAR2(4000),
value CLOB
);
/
CREATE TYPE rqXMLSet AS TABLE OF rqXMLObj;
/
CREATE TYPE rqImgObj AS OBJECT (
name VARCHAR2(4000),
id NUMBER,
image BLOB
);
/
CREATE TYPE rqImgSet AS TABLE OF rqImgObj;
/
---------------------------------- rqEvalImpl ---------------------------------
--
CREATE TYPE rqEvalImpl AUTHID CURRENT_USER AS OBJECT (
typ SYS.AnyType,
key RAW(4),
-- ODCITableDescribe --------------------------------------------------------
--
STATIC FUNCTION ODCITableDescribe(
typ1 OUT SYS.AnyType,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER,
STATIC FUNCTION StubTableDescribe(
typ1 OUT SYS.AnyType,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER,
-- ODCITablePrepare ---------------------------------------------------------
--
STATIC FUNCTION ODCITablePrepare(
sctx OUT rqEvalImpl,
tf_info SYS.ODCITabFuncInfo,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER,
STATIC FUNCTION StubTablePrepare(
sctx OUT rqEvalImpl,
tf_info SYS.ODCITabFuncInfo,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER,
-- ODCITableStart -----------------------------------------------------------
--
STATIC FUNCTION ODCITableStart(
sctx IN OUT rqEvalImpl,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER,
STATIC FUNCTION StubTableStart(
sctx IN OUT rqEvalImpl,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER,
-- ODCITableFetch -----------------------------------------------------------
--
MEMBER FUNCTION ODCITableFetch(
self IN OUT rqEvalImpl,
nrows NUMBER,
rws OUT SYS.AnyDataSet)
RETURN PLS_INTEGER,
MEMBER FUNCTION StubTableFetch(
self IN OUT rqEvalImpl,
nrows NUMBER,
rws OUT SYS.AnyDataSet)
RETURN PLS_INTEGER,
-- ODCITableClose -----------------------------------------------------------
--
MEMBER FUNCTION ODCITableClose(
self rqEvalImpl)
RETURN PLS_INTEGER,
MEMBER FUNCTION StubTableClose(
self rqEvalImpl)
RETURN PLS_INTEGER
);
/
SHOW ERRORS;
CREATE TYPE BODY rqEvalImpl AS
-- ODCITableDescribe --------------------------------------------------------
--
STATIC FUNCTION ODCITableDescribe(
typ1 OUT SYS.AnyType,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
RETURN rqEvalImpl.StubTableDescribe(typ1, par_cur, out_qry, exp_nam);
END;
STATIC FUNCTION StubTableDescribe(
typ1 OUT SYS.AnyType,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rqeLib
NAME "rqetNilDescribe"
WITH CONTEXT
PARAMETERS (context, typ1, typ1 INDICATOR, par_cur, par_cur INDICATOR,
out_qry STRING, out_qry INDICATOR, exp_nam STRING,
exp_nam INDICATOR, RETURN INT);
-- ODCITablePrepare ---------------------------------------------------------
--
STATIC FUNCTION ODCITablePrepare(
sctx OUT rqEvalImpl,
tf_info SYS.ODCITabFuncInfo,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
RETURN rqEvalImpl.StubTablePrepare(sctx, tf_info, par_cur, out_qry,
exp_nam);
END;
STATIC FUNCTION StubTablePrepare(
sctx OUT rqEvalImpl,
tf_info SYS.ODCITabFuncInfo,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rqeLib
NAME "rqetNilPrepare"
WITH CONTEXT
PARAMETERS (context, sctx, sctx INDICATOR STRUCT,
tf_info, tf_info INDICATOR STRUCT, par_cur, par_cur INDICATOR,
out_qry STRING, out_qry INDICATOR, exp_nam STRING,
exp_nam INDICATOR, RETURN INT);
-- ODCITableStart -----------------------------------------------------------
--
STATIC FUNCTION ODCITableStart(
sctx IN OUT rqEvalImpl,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
RETURN rqEvalImpl.StubTableStart(sctx, par_cur, out_qry, exp_nam);
END;
STATIC FUNCTION StubTableStart(
sctx IN OUT rqEvalImpl,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rqeLib
NAME "rqetNilStart"
WITH CONTEXT
PARAMETERS (context, sctx, sctx INDICATOR STRUCT, par_cur, par_cur INDICATOR,
out_qry STRING, out_qry INDICATOR, exp_nam STRING,
exp_nam INDICATOR, RETURN INT);
-- ODCITableFetch -----------------------------------------------------------
--
MEMBER FUNCTION ODCITableFetch(
self IN OUT rqEvalImpl,
nrows NUMBER,
rws OUT SYS.AnyDataSet)
RETURN PLS_INTEGER
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
RETURN self.StubTableFetch(nrows, rws);
END;
MEMBER FUNCTION StubTableFetch(
self IN OUT rqEvalImpl,
nrows NUMBER,
rws OUT SYS.AnyDataSet)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rqeLib
NAME "rqetNilFetch"
WITH CONTEXT
PARAMETERS (context, self, self INDICATOR STRUCT, nrows,
rws, rws INDICATOR, rws DURATION OCIDuration, RETURN INT);
-- ODCITableClose -----------------------------------------------------------
--
MEMBER FUNCTION ODCITableClose(
self rqEvalImpl)
RETURN PLS_INTEGER
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
RETURN self.StubTableClose();
END;
MEMBER FUNCTION StubTableClose(
self rqEvalImpl)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rqeLib
NAME "rqetNilClose"
WITH CONTEXT
PARAMETERS (context, self, self INDICATOR STRUCT, RETURN INT);
END;
/
SHOW ERRORS;
------------------------------------ rqEval -----------------------------------
--
CREATE FUNCTION rqEval(par_cur SYS_REFCURSOR, out_qry VARCHAR2,
exp_nam VARCHAR2)
RETURN SYS.AnyDataSet
PIPELINED USING rqEvalImpl;
/
SHOW ERRORS;
--***************************************************************************--
--* (*) TABLE FUNCTION: rqTableEval *--
--***************************************************************************--
-------------------------------- rqTableEvalImpl ------------------------------
--
CREATE TYPE rqTableEvalImpl AUTHID CURRENT_USER AS OBJECT (
typ SYS.AnyType,
key RAW(4),
-- ODCITableDescribe --------------------------------------------------------
--
STATIC FUNCTION ODCITableDescribe(
typ1 OUT SYS.AnyType,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER,
STATIC FUNCTION StubTableDescribe(
typ1 OUT SYS.AnyType,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER,
-- ODCITablePrepare ---------------------------------------------------------
--
STATIC FUNCTION ODCITablePrepare(
sctx OUT rqTableEvalImpl,
tf_info SYS.ODCITabFuncInfo,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER,
STATIC FUNCTION StubTablePrepare(
sctx OUT rqTableEvalImpl,
tf_info SYS.ODCITabFuncInfo,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER,
-- ODCITableStart -----------------------------------------------------------
--
STATIC FUNCTION ODCITableStart(
sctx IN OUT rqTableEvalImpl,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER,
STATIC FUNCTION StubTableStart(
sctx IN OUT rqTableEvalImpl,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER,
-- ODCITableFetch -----------------------------------------------------------
--
MEMBER FUNCTION ODCITableFetch(
self IN OUT rqTableEvalImpl,
nrows NUMBER,
rws OUT SYS.AnyDataSet)
RETURN PLS_INTEGER,
MEMBER FUNCTION StubTableFetch(
self IN OUT rqTableEvalImpl,
nrows NUMBER,
rws OUT SYS.AnyDataSet)
RETURN PLS_INTEGER,
-- ODCITableClose -----------------------------------------------------------
--
MEMBER FUNCTION ODCITableClose(
self rqTableEvalImpl)
RETURN PLS_INTEGER,
MEMBER FUNCTION StubTableClose(
self rqTableEvalImpl)
RETURN PLS_INTEGER
);
/
SHOW ERRORS;
CREATE TYPE BODY rqTableEvalImpl AS
-- ODCITableDescribe --------------------------------------------------------
--
STATIC FUNCTION ODCITableDescribe(
typ1 OUT SYS.AnyType,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
RETURN rqTableEvalImpl.StubTableDescribe(typ1, inp_cur, par_cur, out_qry,
exp_nam);
END;
STATIC FUNCTION StubTableDescribe(
typ1 OUT SYS.AnyType,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rqeLib
NAME "rqetTabDescribe"
WITH CONTEXT
PARAMETERS (context, typ1, typ1 INDICATOR, inp_cur, inp_cur INDICATOR,
par_cur, par_cur INDICATOR, out_qry STRING, out_qry INDICATOR,
exp_nam STRING, exp_nam INDICATOR, RETURN INT);
-- ODCITablePrepare ---------------------------------------------------------
--
STATIC FUNCTION ODCITablePrepare(
sctx OUT rqTableEvalImpl,
tf_info SYS.ODCITabFuncInfo,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
RETURN rqTableEvalImpl.StubTablePrepare(sctx, tf_info, inp_cur, par_cur,
out_qry, exp_nam);
END;
STATIC FUNCTION StubTablePrepare(
sctx OUT rqTableEvalImpl,
tf_info SYS.ODCITabFuncInfo,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rqeLib
NAME "rqetTabPrepare"
WITH CONTEXT
PARAMETERS (context, sctx, sctx INDICATOR STRUCT,
tf_info, tf_info INDICATOR STRUCT, inp_cur, inp_cur INDICATOR,
par_cur, par_cur INDICATOR, out_qry STRING, out_qry INDICATOR,
exp_nam STRING, exp_nam INDICATOR, RETURN INT);
-- ODCITableStart -----------------------------------------------------------
--
STATIC FUNCTION ODCITableStart(
sctx IN OUT rqTableEvalImpl,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
RETURN rqTableEvalImpl.StubTableStart(sctx, inp_cur, par_cur, out_qry,
exp_nam);
END;
STATIC FUNCTION StubTableStart(
sctx IN OUT rqTableEvalImpl,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rqeLib
NAME "rqetTabStart"
WITH CONTEXT
PARAMETERS (context, sctx, sctx INDICATOR STRUCT, inp_cur, inp_cur INDICATOR,
par_cur, par_cur INDICATOR, out_qry STRING, out_qry INDICATOR,
exp_nam STRING, exp_nam INDICATOR, RETURN INT);
-- ODCITableFetch -----------------------------------------------------------
--
MEMBER FUNCTION ODCITableFetch(
self IN OUT rqTableEvalImpl,
nrows NUMBER,
rws OUT SYS.AnyDataSet)
RETURN PLS_INTEGER
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
RETURN self.StubTableFetch(nrows, rws);
END;
MEMBER FUNCTION StubTableFetch(
self IN OUT rqTableEvalImpl,
nrows NUMBER,
rws OUT SYS.AnyDataSet)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rqeLib
NAME "rqetTabFetch"
WITH CONTEXT
PARAMETERS (context, self, self INDICATOR STRUCT, nrows,
rws, rws INDICATOR, rws DURATION OCIDuration, RETURN INT);
-- ODCITableClose -----------------------------------------------------------
--
MEMBER FUNCTION ODCITableClose(
self rqTableEvalImpl)
RETURN PLS_INTEGER
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
RETURN self.StubTableClose();
END;
MEMBER FUNCTION StubTableClose(
self rqTableEvalImpl)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rqeLib
NAME "rqetTabClose"
WITH CONTEXT
PARAMETERS (context, self, self INDICATOR STRUCT, RETURN INT);
END;
/
SHOW ERRORS;
---------------------------------- rqTableEval --------------------------------
--
CREATE FUNCTION rqTableEval(inp_cur SYS_REFCURSOR, par_cur SYS_REFCURSOR,
out_qry VARCHAR2, exp_nam VARCHAR2)
RETURN SYS.AnyDataSet
PIPELINED USING rqTableEvalImpl;
/
SHOW ERRORS;
--***************************************************************************--
--* (*) TABLE FUNCTION: rqGroupEval *--
--***************************************************************************--
-------------------------------- rqGroupEvalImpl ------------------------------
--
CREATE TYPE rqGroupEvalImpl AUTHID CURRENT_USER AS OBJECT (
typ SYS.AnyType,
key RAW(4),
-- ODCITableDescribe --------------------------------------------------------
--
STATIC FUNCTION ODCITableDescribe(
typ1 OUT SYS.AnyType,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
grp_col VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER,
STATIC FUNCTION StubTableDescribe(
typ1 OUT SYS.AnyType,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
grp_col VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER,
-- ODCITablePrepare ---------------------------------------------------------
--
STATIC FUNCTION ODCITablePrepare(
sctx OUT rqGroupEvalImpl,
tf_info SYS.ODCITabFuncInfo,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
grp_col VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER,
STATIC FUNCTION StubTablePrepare(
sctx OUT rqGroupEvalImpl,
tf_info SYS.ODCITabFuncInfo,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
grp_col VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER,
-- ODCITableStart -----------------------------------------------------------
--
STATIC FUNCTION ODCITableStart(
sctx IN OUT rqGroupEvalImpl,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
grp_col VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER,
STATIC FUNCTION StubTableStart(
sctx IN OUT rqGroupEvalImpl,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
grp_col VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER,
-- ODCITableFetch -----------------------------------------------------------
--
MEMBER FUNCTION ODCITableFetch(
self IN OUT rqGroupEvalImpl,
nrows NUMBER,
rws OUT SYS.AnyDataSet)
RETURN PLS_INTEGER,
MEMBER FUNCTION StubTableFetch(
self IN OUT rqGroupEvalImpl,
nrows NUMBER,
rws OUT SYS.AnyDataSet)
RETURN PLS_INTEGER,
-- ODCITableClose -----------------------------------------------------------
--
MEMBER FUNCTION ODCITableClose(
self rqGroupEvalImpl)
RETURN PLS_INTEGER,
MEMBER FUNCTION StubTableClose(
self rqGroupEvalImpl)
RETURN PLS_INTEGER
);
/
SHOW ERRORS;
CREATE TYPE BODY rqGroupEvalImpl AS
-- ODCITableDescribe --------------------------------------------------------
--
STATIC FUNCTION ODCITableDescribe(
typ1 OUT SYS.AnyType,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
grp_col VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
RETURN rqGroupEvalImpl.StubTableDescribe(typ1, inp_cur, par_cur, out_qry,
grp_col, exp_nam);
END;
STATIC FUNCTION StubTableDescribe(
typ1 OUT SYS.AnyType,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
grp_col VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rqeLib
NAME "rqetGrpDescribe"
WITH CONTEXT
PARAMETERS (context, typ1, typ1 INDICATOR, inp_cur, inp_cur INDICATOR,
par_cur, par_cur INDICATOR, out_qry STRING, out_qry INDICATOR,
grp_col STRING, grp_col INDICATOR, exp_nam STRING,
exp_nam INDICATOR, RETURN INT);
-- ODCITablePrepare ---------------------------------------------------------
--
STATIC FUNCTION ODCITablePrepare(
sctx OUT rqGroupEvalImpl,
tf_info SYS.ODCITabFuncInfo,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
grp_col VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
RETURN rqGroupEvalImpl.StubTablePrepare(sctx, tf_info, inp_cur, par_cur,
out_qry, grp_col, exp_nam);
END;
STATIC FUNCTION StubTablePrepare(
sctx OUT rqGroupEvalImpl,
tf_info SYS.ODCITabFuncInfo,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
grp_col VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rqeLib
NAME "rqetGrpPrepare"
WITH CONTEXT
PARAMETERS (context, sctx, sctx INDICATOR STRUCT,
tf_info, tf_info INDICATOR STRUCT, inp_cur, inp_cur INDICATOR,
par_cur, par_cur INDICATOR, out_qry STRING, out_qry INDICATOR,
grp_col STRING, grp_col INDICATOR, exp_nam STRING,
exp_nam INDICATOR, RETURN INT);
-- ODCITableStart -----------------------------------------------------------
--
STATIC FUNCTION ODCITableStart(
sctx IN OUT rqGroupEvalImpl,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
grp_col VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
RETURN rqGroupEvalImpl.StubTableStart(sctx, inp_cur, par_cur, out_qry,
grp_col, exp_nam);
END;
STATIC FUNCTION StubTableStart(
sctx IN OUT rqGroupEvalImpl,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
grp_col VARCHAR2,
exp_nam VARCHAR2)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rqeLib
NAME "rqetGrpStart"
WITH CONTEXT
PARAMETERS (context, sctx, sctx INDICATOR STRUCT, inp_cur, inp_cur INDICATOR,
par_cur, par_cur INDICATOR, out_qry STRING, out_qry INDICATOR,
grp_col STRING, grp_col INDICATOR, exp_nam STRING,
exp_nam INDICATOR, RETURN INT);
-- ODCITableFetch -----------------------------------------------------------
--
MEMBER FUNCTION ODCITableFetch(
self IN OUT rqGroupEvalImpl,
nrows NUMBER,
rws OUT SYS.AnyDataSet)
RETURN PLS_INTEGER
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
RETURN self.StubTableFetch(nrows, rws);
END;
MEMBER FUNCTION StubTableFetch(
self IN OUT rqGroupEvalImpl,
nrows NUMBER,
rws OUT SYS.AnyDataSet)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rqeLib
NAME "rqetGrpFetch"
WITH CONTEXT
PARAMETERS (context, self, self INDICATOR STRUCT, nrows,
rws, rws INDICATOR, rws DURATION OCIDuration, RETURN INT);
-- ODCITableClose -----------------------------------------------------------
--
MEMBER FUNCTION ODCITableClose(
self rqGroupEvalImpl)
RETURN PLS_INTEGER
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
RETURN self.StubTableClose();
END;
MEMBER FUNCTION StubTableClose(
self rqGroupEvalImpl)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rqeLib
NAME "rqetGrpClose"
WITH CONTEXT
PARAMETERS (context, self, self INDICATOR STRUCT, RETURN INT);
END;
/
SHOW ERRORS;
--***************************************************************************--
--* (*) TABLE FUNCTION: rqRowEval *--
--***************************************************************************--
--------------------------------- rqRowEvalImpl -------------------------------
--
CREATE TYPE rqRowEvalImpl AUTHID CURRENT_USER AS OBJECT (
typ SYS.AnyType,
key RAW(4),
-- ODCITableDescribe --------------------------------------------------------
--
STATIC FUNCTION ODCITableDescribe(
typ1 OUT SYS.AnyType,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
row_num NUMBER,
exp_nam VARCHAR2)
RETURN PLS_INTEGER,
STATIC FUNCTION StubTableDescribe(
typ1 OUT SYS.AnyType,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
row_num NUMBER,
exp_nam VARCHAR2)
RETURN PLS_INTEGER,
-- ODCITablePrepare ---------------------------------------------------------
--
STATIC FUNCTION ODCITablePrepare(
sctx OUT rqRowEvalImpl,
tf_info SYS.ODCITabFuncInfo,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
row_num NUMBER,
exp_nam VARCHAR2)
RETURN PLS_INTEGER,
STATIC FUNCTION StubTablePrepare(
sctx OUT rqRowEvalImpl,
tf_info SYS.ODCITabFuncInfo,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
row_num NUMBER,
exp_nam VARCHAR2)
RETURN PLS_INTEGER,
-- ODCITableStart -----------------------------------------------------------
--
STATIC FUNCTION ODCITableStart(
sctx IN OUT rqRowEvalImpl,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
row_num NUMBER,
exp_nam VARCHAR2)
RETURN PLS_INTEGER,
STATIC FUNCTION StubTableStart(
sctx IN OUT rqRowEvalImpl,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
row_num NUMBER,
exp_nam VARCHAR2)
RETURN PLS_INTEGER,
-- ODCITableFetch -----------------------------------------------------------
--
MEMBER FUNCTION ODCITableFetch(
self IN OUT rqRowEvalImpl,
nrows NUMBER,
rws OUT SYS.AnyDataSet)
RETURN PLS_INTEGER,
MEMBER FUNCTION StubTableFetch(
self IN OUT rqRowEvalImpl,
nrows NUMBER,
rws OUT SYS.AnyDataSet)
RETURN PLS_INTEGER,
-- ODCITableClose -----------------------------------------------------------
--
MEMBER FUNCTION ODCITableClose(
self rqRowEvalImpl)
RETURN PLS_INTEGER,
MEMBER FUNCTION StubTableClose(
self rqRowEvalImpl)
RETURN PLS_INTEGER
);
/
SHOW ERRORS;
CREATE TYPE BODY rqRowEvalImpl AS
-- ODCITableDescribe --------------------------------------------------------
--
STATIC FUNCTION ODCITableDescribe(
typ1 OUT SYS.AnyType,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
row_num NUMBER,
exp_nam VARCHAR2)
RETURN PLS_INTEGER
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
RETURN rqRowEvalImpl.StubTableDescribe(typ1, inp_cur, par_cur, out_qry,
row_num, exp_nam);
END;
STATIC FUNCTION StubTableDescribe(
typ1 OUT SYS.AnyType,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
row_num NUMBER,
exp_nam VARCHAR2)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rqeLib
NAME "rqetRowDescribe"
WITH CONTEXT
PARAMETERS (context, typ1, typ1 INDICATOR, inp_cur, inp_cur INDICATOR,
par_cur, par_cur INDICATOR, out_qry STRING, out_qry INDICATOR,
row_num OCINUMBER, row_num INDICATOR, exp_nam STRING,
exp_nam INDICATOR, RETURN INT);
-- ODCITablePrepare ---------------------------------------------------------
--
STATIC FUNCTION ODCITablePrepare(
sctx OUT rqRowEvalImpl,
tf_info SYS.ODCITabFuncInfo,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
row_num NUMBER,
exp_nam VARCHAR2)
RETURN PLS_INTEGER
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
RETURN rqRowEvalImpl.StubTablePrepare(sctx, tf_info, inp_cur, par_cur,
out_qry, row_num, exp_nam);
END;
STATIC FUNCTION StubTablePrepare(
sctx OUT rqRowEvalImpl,
tf_info SYS.ODCITabFuncInfo,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
row_num NUMBER,
exp_nam VARCHAR2)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rqeLib
NAME "rqetRowPrepare"
WITH CONTEXT
PARAMETERS (context, sctx, sctx INDICATOR STRUCT,
tf_info, tf_info INDICATOR STRUCT, inp_cur, inp_cur INDICATOR,
par_cur, par_cur INDICATOR, out_qry STRING, out_qry INDICATOR,
row_num OCINUMBER, row_num INDICATOR, exp_nam STRING,
exp_nam INDICATOR, RETURN INT);
-- ODCITableStart -----------------------------------------------------------
--
STATIC FUNCTION ODCITableStart(
sctx IN OUT rqRowEvalImpl,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
row_num NUMBER,
exp_nam VARCHAR2)
RETURN PLS_INTEGER
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
RETURN rqRowEvalImpl.StubTableStart(sctx, inp_cur, par_cur, out_qry,
row_num, exp_nam);
END;
STATIC FUNCTION StubTableStart(
sctx IN OUT rqRowEvalImpl,
inp_cur SYS_REFCURSOR,
par_cur SYS_REFCURSOR,
out_qry VARCHAR2,
row_num NUMBER,
exp_nam VARCHAR2)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rqeLib
NAME "rqetRowStart"
WITH CONTEXT
PARAMETERS (context, sctx, sctx INDICATOR STRUCT, inp_cur, inp_cur INDICATOR,
par_cur, par_cur INDICATOR, out_qry STRING, out_qry INDICATOR,
row_num OCINUMBER, row_num INDICATOR, exp_nam STRING,
exp_nam INDICATOR, RETURN INT);
-- ODCITableFetch -----------------------------------------------------------
--
MEMBER FUNCTION ODCITableFetch(
self IN OUT rqRowEvalImpl,
nrows NUMBER,
rws OUT SYS.AnyDataSet)
RETURN PLS_INTEGER
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
RETURN self.StubTableFetch(nrows, rws);
END;
MEMBER FUNCTION StubTableFetch(
self IN OUT rqRowEvalImpl,
nrows NUMBER,
rws OUT SYS.AnyDataSet)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rqeLib
NAME "rqetRowFetch"
WITH CONTEXT
PARAMETERS (context, self, self INDICATOR STRUCT, nrows,
rws, rws INDICATOR, rws DURATION OCIDuration, RETURN INT);
-- ODCITableClose -----------------------------------------------------------
--
MEMBER FUNCTION ODCITableClose(
self rqRowEvalImpl)
RETURN PLS_INTEGER
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
RETURN self.StubTableClose();
END;
MEMBER FUNCTION StubTableClose(
self rqRowEvalImpl)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rqeLib
NAME "rqetRowClose"
WITH CONTEXT
PARAMETERS (context, self, self INDICATOR STRUCT, RETURN INT);
END;
/
SHOW ERRORS;
----------------------------------- rqRowEval ---------------------------------
--
CREATE FUNCTION rqRowEval(inp_cur SYS_REFCURSOR, par_cur SYS_REFCURSOR,
out_qry VARCHAR2, row_num NUMBER, exp_nam VARCHAR2)
RETURN SYS.AnyDataSet
PIPELINED PARALLEL_ENABLE (PARTITION inp_cur BY ANY) USING rqRowEvalImpl;
/
SHOW ERRORS;
--***************************************************************************--
--* (*) TABLE FUNCTION: rqCrossprod *--
--***************************************************************************--
CREATE TYPE rqNumericElt AS OBJECT (
name NUMBER,
val NUMBER
);
/
CREATE TYPE rqNumericEltSet AS TABLE OF rqNumericElt;
/
-------------------------------- rqCrossprodImpl ------------------------------
--
CREATE TYPE rqCrossprodImpl AS OBJECT (
key RAW(4),
-- ODCITableStart -----------------------------------------------------------
--
STATIC FUNCTION ODCITableStart(sctx OUT rqCrossprodImpl,
p_cur SYS_REFCURSOR,
p_ncolb PLS_INTEGER)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqCrossprodTableStart"
WITH CONTEXT
PARAMETERS (context, sctx, sctx INDICATOR STRUCT, p_cur, p_ncolb,
RETURN INT),
-- ODCITableFetch -----------------------------------------------------------
--
MEMBER FUNCTION ODCITableFetch(self IN OUT rqCrossprodImpl,
nrows NUMBER,
rws OUT rqNumericEltSet)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqCrossprodTableFetch"
WITH CONTEXT
PARAMETERS (context, self, self INDICATOR STRUCT, nrows,
rws, rws INDICATOR, RETURN INT),
-- ODCITableClose -----------------------------------------------------------
--
MEMBER FUNCTION ODCITableClose(self rqCrossprodImpl)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqCrossprodTableClose"
WITH CONTEXT
PARAMETERS (context, self, self INDICATOR STRUCT, RETURN INT)
);
/
SHOW ERRORS;
------------------------------- rqCrossprod -----------------------------------
--
CREATE FUNCTION rqCrossprod(p_cur SYS_REFCURSOR, p_ncolb PLS_INTEGER)
RETURN rqNumericEltSet
PIPELINED PARALLEL_ENABLE (PARTITION p_cur BY ANY) USING rqCrossprodImpl;
/
SHOW ERRORS;
--***************************************************************************--
--* (*) TABLE FUNCTION: rqStepwise *--
--***************************************************************************--
CREATE TYPE rqStepwiseType AS OBJECT (
layer NUMBER,
name NUMBER,
estimate NUMBER,
column_ok NUMBER,
std_error NUMBER,
t_value NUMBER,
prob_t NUMBER
);
/
CREATE TYPE rqStepwiseTypeSet AS TABLE OF rqStepwiseType;
/
-------------------------------- rqStepwiseImpl -------------------------------
--
CREATE TYPE rqStepwiseImpl AUTHID CURRENT_USER AS OBJECT (
key RAW(4),
STATIC FUNCTION ODCITableStart(
sctx OUT RqStepwiseImpl,
cur SYS_REFCURSOR,
colStatus VARCHAR2,
maxSteps PLS_INTEGER,
direction PLS_INTEGER,
bestKModels PLS_INTEGER,
enterThreshold DOUBLE PRECISION,
leaveThreshold DOUBLE PRECISION)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqStepwiseTableStart"
WITH CONTEXT
PARAMETERS (context, sctx, sctx INDICATOR STRUCT, cur, colStatus, maxSteps,
direction, bestKModels, enterThreshold, leaveThreshold, RETURN INT),
MEMBER FUNCTION ODCITableFetch(
self IN OUT RqStepwiseImpl,
nrows NUMBER,
outSet OUT RqStepwiseTypeSet)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqStepwiseTableFetch"
WITH CONTEXT
PARAMETERS (context, self, self INDICATOR STRUCT, nrows, outSet, outSet
INDICATOR, RETURN INT),
MEMBER FUNCTION ODCITableClose(self IN RqStepwiseImpl)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqStepwiseTableClose"
WITH CONTEXT
PARAMETERS (context, self, self INDICATOR STRUCT, RETURN INT)
);
/
SHOW ERRORS
-------------------------------- rqStepwise -----------------------------------
--
CREATE FUNCTION rqStepwise(
cur SYS_REFCURSOR,
colStatus VARCHAR2,
maxSteps PLS_INTEGER,
direction PLS_INTEGER,
bestKModels PLS_INTEGER,
enterThreshold DOUBLE PRECISION,
leaveThreshold DOUBLE PRECISION)
RETURN RqStepwiseTypeSet
PIPELINED USING rqStepwiseImpl;
/
SHOW ERRORS;
--***************************************************************************--
-- Neural Network package *--
--***************************************************************************--
CREATE TYPE rqNeuralType AS OBJECT (
key NUMBER,
value NUMBER
);
/
SHOW ERRORS;
CREATE TYPE rqNeuralTypeSet AS TABLE OF rqNeuralType;
/
SHOW ERRORS;
CREATE TYPE rqNeuralImpl AUTHID CURRENT_USER AS OBJECT (
key RAW(4),
STATIC FUNCTION ODCITableStart(
sctx OUT RqNeuralImpl,
cur SYS_REFCURSOR,
actEnum VARCHAR2,
nNodes VARCHAR2,
gradTolerance DOUBLE PRECISION,
seed PLS_INTEGER,
lowerBound DOUBLE PRECISION,
upperBound DOUBLE PRECISION,
maxIterations PLS_INTEGER,
maxRows PLS_INTEGER,
probability DOUBLE PRECISION,
nUpdates PLS_INTEGER,
nInputNodes PLS_INTEGER,
nLayers PLS_INTEGER,
nThreads PLS_INTEGER,
scaleHessian PLS_INTEGER,
solver PLS_INTEGER)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqNeuralTableStart"
WITH CONTEXT
PARAMETERS (context, sctx, sctx INDICATOR STRUCT, cur, actEnum, nNodes,
gradTolerance, seed, lowerBound, upperBound, maxIterations, maxRows,
probability, nUpdates, nInputNodes, nLayers, nThreads, scaleHessian,
solver, RETURN INT),
MEMBER FUNCTION ODCITableFetch(
self IN OUT RqNeuralImpl,
nrows NUMBER,
outSet OUT RqNeuralTypeSet)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqNeuralTableFetch"
WITH CONTEXT
PARAMETERS (context, self, self INDICATOR STRUCT, nrows, outSet, outSet
INDICATOR, RETURN INT),
MEMBER FUNCTION ODCITableClose(self IN RqNeuralImpl)
RETURN PLS_INTEGER
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqNeuralTableClose"
WITH CONTEXT
PARAMETERS (context, self, self INDICATOR STRUCT, RETURN INT)
);
/
SHOW ERRORS
CREATE FUNCTION rqNeural(
cur SYS_REFCURSOR,
actEnum VARCHAR2,
nNodes VARCHAR2,
gradTolerance DOUBLE PRECISION,
seed PLS_INTEGER,
lowerBound DOUBLE PRECISION,
upperBound DOUBLE PRECISION,
maxIterations PLS_INTEGER,
maxRows PLS_INTEGER,
probability DOUBLE PRECISION,
nUpdates PLS_INTEGER,
nInputNodes PLS_INTEGER,
nLayers PLS_INTEGER,
nThreads PLS_INTEGER,
scaleHessian PLS_INTEGER,
solver PLS_INTEGER)
RETURN RqNeuralTypeSet
PIPELINED USING rqNeuralImpl;
/
SHOW ERRORS;
--***************************************************************************--
--***************************************************************************--
--* (*) TABLE FUNCTION: rqUnlistTable *--
--***************************************************************************--
CREATE FUNCTION rqUnlistTable(
refcur IN SYS_REFCURSOR,
nrow IN PLS_INTEGER, -- matrix e1 number of rows
ncol IN PLS_INTEGER, -- matrix e1 number of columns
maxfetch IN PLS_INTEGER DEFAULT 500 -- max number of rows to bulk fetch
)
RETURN rqNumericEltSet
PIPELINED
AUTHID CURRENT_USER
IS
l_cur SYS_REFCURSOR := refcur;
vcursor PLS_INTEGER; -- cursor
numtab DBMS_SQL.NUMBER_TABLE; -- number table
totfetch PLS_INTEGER; -- total number of rows fetched
nfetch PLS_INTEGER; -- number of rows fetched
fetchlim PLS_INTEGER; -- max number of rows to bulk fetch
idx PLS_INTEGER; -- array index
rowout rqNumericElt := rqNumericElt(NULL, NULL);
BEGIN
IF (nrow < maxfetch) THEN
fetchlim := nrow;
ELSE
fetchlim := maxfetch;
END IF;
-- Use DBMS_SQL for reading data
-- Convert cursor to DBMS_SQL cursor Id
vcursor := DBMS_SQL.TO_CURSOR_NUMBER(l_cur);
-- Define array types for each column
FOR j IN 1..ncol LOOP
DBMS_SQL.DEFINE_ARRAY(vcursor, j, numtab, fetchlim, 1);
END LOOP;
totfetch := 0;
LOOP
nfetch := DBMS_SQL.FETCH_ROWS(vcursor);
EXIT WHEN nfetch = 0;
FOR j in 1..ncol LOOP
DBMS_SQL.COLUMN_VALUE(vcursor, j, numtab);
FOR i in 1..nfetch LOOP
idx := i + totfetch;
rowout.name := idx + (j - 1) * nrow;
rowout.val := numtab(idx);
PIPE ROW(rowout);
END LOOP;
END LOOP;
totfetch := totfetch + nfetch;
EXIT WHEN totfetch = nrow;
END LOOP;
-- Close cursor
DBMS_SQL.CLOSE_CURSOR(vcursor);
RETURN;
EXCEPTION WHEN OTHERS THEN
-- Close cursor, if open
IF DBMS_SQL.IS_OPEN(vcursor) THEN
DBMS_SQL.CLOSE_CURSOR(vcursor);
END IF;
RAISE;
RETURN;
END rqUnlistTable;
/
SHOW ERRORS;
--***************************************************************************--
--* (*) FUNCTIONS: rqRFuncEval family *--
--***************************************************************************--
CREATE TYPE RQ_ELEM_T AS OBJECT (
NAME VARCHAR2(4000),
NUMVAL BINARY_DOUBLE,
STRVAL VARCHAR2(4000)
);
/
CREATE TYPE RQ_PARAM_T AS TABLE OF RQ_ELEM_T;
/
-------------------------------- rqRFuncEvalNum -------------------------------
--
CREATE FUNCTION rqRFuncEvalNum(exp_nam VARCHAR2, paramlst RQ_PARAM_T)
RETURN BINARY_DOUBLE
AUTHID CURRENT_USER
AS LANGUAGE C
LIBRARY rqeLib
NAME "rqFuncEvalReal"
WITH CONTEXT
PARAMETERS (context, exp_nam, exp_nam INDICATOR, paramlst, paramlst INDICATOR,
RETURN BY REFERENCE);
/
SHOW ERRORS
-------------------------------- rqRFuncEvalChr -------------------------------
--
CREATE FUNCTION rqRFuncEvalChr(exp_nam VARCHAR2, paramlst RQ_PARAM_T)
RETURN VARCHAR2
AUTHID CURRENT_USER
AS LANGUAGE C
LIBRARY rqeLib
NAME "rqFuncEvalStr"
WITH CONTEXT
PARAMETERS (context, exp_nam, exp_nam INDICATOR, paramlst, paramlst INDICATOR);
/
SHOW ERRORS
--***************************************************************************--
--* (*) FUNCTIONS: Math *--
--***************************************************************************--
---------------------------------- rqBesselI ----------------------------------
--
CREATE FUNCTION rqBesselI(
x DOUBLE PRECISION,
nu DOUBLE PRECISION,
exp DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rqeLib
NAME "rqefBesselI"
WITH CONTEXT
PARAMETERS (CONTEXT, x DOUBLE, x INDICATOR SHORT, nu DOUBLE,
nu INDICATOR SHORT, exp DOUBLE, exp INDICATOR SHORT,
RETURN INDICATOR BY REFERENCE SHORT, RETURN DOUBLE);
/
SHOW ERRORS;
---------------------------------- rqBesselK ----------------------------------
--
CREATE FUNCTION rqBesselK(
x DOUBLE PRECISION,
nu DOUBLE PRECISION,
exp DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rqeLib
NAME "rqefBesselK"
WITH CONTEXT
PARAMETERS (CONTEXT, x DOUBLE, x INDICATOR SHORT, nu DOUBLE,
nu INDICATOR SHORT, exp DOUBLE, exp INDICATOR SHORT,
RETURN INDICATOR BY REFERENCE SHORT, RETURN DOUBLE);
/
SHOW ERRORS;
---------------------------------- rqBesselJ ----------------------------------
--
CREATE FUNCTION rqBesselJ(
x DOUBLE PRECISION,
nu DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rqeLib
NAME "rqefBesselJ"
WITH CONTEXT
PARAMETERS (CONTEXT, x DOUBLE, x INDICATOR SHORT, nu DOUBLE,
nu INDICATOR SHORT, RETURN INDICATOR BY REFERENCE SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
---------------------------------- rqBesselY ----------------------------------
--
CREATE FUNCTION rqBesselY(
x DOUBLE PRECISION,
nu DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rqeLib
NAME "rqefBesselY"
WITH CONTEXT
PARAMETERS (CONTEXT, x DOUBLE, x INDICATOR SHORT, nu DOUBLE,
nu INDICATOR SHORT, RETURN INDICATOR BY REFERENCE SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
----------------------------------- rqGamma -----------------------------------
--
CREATE FUNCTION rqGamma(
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_gamma"
PARAMETERS (
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
----------------------------------- rqLgamma ----------------------------------
--
CREATE FUNCTION rqLgamma(
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_lgamma"
PARAMETERS (
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
----------------------------------- rqDigamma ---------------------------------
--
CREATE FUNCTION rqDigamma(
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_digamma"
PARAMETERS (
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
---------------------------------- rqTrigamma ---------------------------------
--
CREATE FUNCTION rqTrigamma(
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_trigamma"
PARAMETERS (
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
------------------------------------ rqErf ------------------------------------
--
CREATE FUNCTION rqErf(
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_erf"
PARAMETERS (
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
------------------------------------ rqErfc -----------------------------------
--
CREATE FUNCTION rqErfc(
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_erfc"
PARAMETERS (
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
------------------------------------ rqDbeta ----------------------------------
--
CREATE FUNCTION rqDbeta(
a DOUBLE PRECISION,
b DOUBLE PRECISION,
ncp DOUBLE PRECISION,
logP PLS_INTEGER,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_pdf_beta"
PARAMETERS (
a DOUBLE,
a INDICATOR SHORT,
b DOUBLE,
b INDICATOR SHORT,
ncp DOUBLE,
ncp INDICATOR SHORT,
logP INT,
logP INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
----------------------------------- rqPbeta -----------------------------------
--
CREATE FUNCTION rqPbeta(
a DOUBLE PRECISION,
b DOUBLE PRECISION,
ncp DOUBLE PRECISION,
lowerTail PLS_INTEGER,
logP PLS_INTEGER,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_prob_beta"
PARAMETERS (
a DOUBLE,
a INDICATOR SHORT,
b DOUBLE,
b INDICATOR SHORT,
ncp DOUBLE,
ncp INDICATOR SHORT,
lowerTail INT,
lowerTail INDICATOR SHORT,
logP INT,
logP INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
----------------------------------- rqQbeta -----------------------------------
--
CREATE FUNCTION rqQbeta(
a DOUBLE PRECISION,
b DOUBLE PRECISION,
ncp DOUBLE PRECISION,
lowerTail PLS_INTEGER,
logP PLS_INTEGER,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_quantile_beta"
PARAMETERS (
a DOUBLE,
a INDICATOR SHORT,
b DOUBLE,
b INDICATOR SHORT,
ncp DOUBLE,
ncp INDICATOR SHORT,
lowerTail INT,
lowerTail INDICATOR SHORT,
logP INT,
logP INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
----------------------------------- rqDbinom ----------------------------------
--
CREATE FUNCTION rqDbinom(
n DOUBLE PRECISION,
prob DOUBLE PRECISION,
logP PLS_INTEGER,
k DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_pdf_binomial"
PARAMETERS (
n DOUBLE,
n INDICATOR SHORT,
prob DOUBLE,
prob INDICATOR SHORT,
logP INT,
logP INDICATOR SHORT,
k DOUBLE,
k INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
----------------------------------- rqPbinom ----------------------------------
--
CREATE FUNCTION rqPbinom(
n DOUBLE PRECISION,
prob DOUBLE PRECISION,
lowerTail PLS_INTEGER,
logP PLS_INTEGER,
k DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_prob_binomial"
PARAMETERS (
n DOUBLE,
n INDICATOR SHORT,
prob DOUBLE,
prob INDICATOR SHORT,
lowerTail INT,
lowerTail INDICATOR SHORT,
logP INT,
logP INDICATOR SHORT,
k DOUBLE,
k INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
----------------------------------- rqQbinom ----------------------------------
--
CREATE FUNCTION rqQbinom(
n DOUBLE PRECISION,
prob DOUBLE PRECISION,
lowerTail PLS_INTEGER,
logP PLS_INTEGER,
p DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_quantile_binomial"
PARAMETERS (
n DOUBLE,
n INDICATOR SHORT,
prob DOUBLE,
prob INDICATOR SHORT,
lowerTail INT,
lowerTail INDICATOR SHORT,
logP INT,
logP INDICATOR SHORT,
p DOUBLE,
p INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
---------------------------------- rqQcauchy ----------------------------------
--
CREATE FUNCTION rqQcauchy(
x DOUBLE PRECISION,
loc DOUBLE PRECISION,
scale DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_quantile_cauchy"
PARAMETERS (
x DOUBLE,
x INDICATOR SHORT,
loc DOUBLE,
loc INDICATOR SHORT,
scale DOUBLE,
scale INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
---------------------------------- rqPcauchy ----------------------------------
--
CREATE FUNCTION rqPcauchy(
x DOUBLE PRECISION,
loc DOUBLE PRECISION,
scale DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_prob_cauchy"
PARAMETERS (
x DOUBLE,
x INDICATOR SHORT,
loc DOUBLE,
loc INDICATOR SHORT,
scale DOUBLE,
scale INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
----------------------------------- rqDchisq ----------------------------------
--
CREATE FUNCTION rqDchisq(
df DOUBLE PRECISION,
ncp DOUBLE PRECISION,
logP PLS_INTEGER,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_pdf_chi_square"
PARAMETERS (
df DOUBLE,
df INDICATOR SHORT,
ncp DOUBLE,
ncp INDICATOR SHORT,
logP INT,
logP INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
----------------------------------- rqPchisq ----------------------------------
--
CREATE FUNCTION rqPchisq(
df DOUBLE PRECISION,
ncp DOUBLE PRECISION,
lowerTail PLS_INTEGER,
logP PLS_INTEGER,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_prob_chi_square"
PARAMETERS (
df DOUBLE,
df INDICATOR SHORT,
ncp DOUBLE,
ncp INDICATOR SHORT,
lowerTail INT,
lowerTail INDICATOR SHORT,
logP INT,
logP INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
----------------------------------- rqQchisq ----------------------------------
--
CREATE FUNCTION rqQchisq(
df DOUBLE PRECISION,
ncp DOUBLE PRECISION,
lowerTail PLS_INTEGER,
logP PLS_INTEGER,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_quantile_chi_square"
PARAMETERS (
df DOUBLE,
df INDICATOR SHORT,
ncp DOUBLE,
ncp INDICATOR SHORT,
lowerTail INT,
lowerTail INDICATOR SHORT,
logP INT,
logP INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
------------------------------------ rqPexp -----------------------------------
--
CREATE FUNCTION rqPexp(
lambda DOUBLE PRECISION,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_prob_exponential"
PARAMETERS (
lambda DOUBLE,
lambda INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
------------------------------------ rqQexp -----------------------------------
--
CREATE FUNCTION rqQexp(
lambda DOUBLE PRECISION,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_quantile_exponential"
PARAMETERS (
lambda DOUBLE,
lambda INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
------------------------------------- rqDf ------------------------------------
--
CREATE FUNCTION rqDf(
df1 DOUBLE PRECISION,
df2 DOUBLE PRECISION,
ncp DOUBLE PRECISION,
logP PLS_INTEGER,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_pdf_f"
PARAMETERS (
df1 DOUBLE,
df1 INDICATOR SHORT,
df2 DOUBLE,
df2 INDICATOR SHORT,
ncp DOUBLE,
ncp INDICATOR SHORT,
logP INT,
logP INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
------------------------------------- rqPf ------------------------------------
--
CREATE FUNCTION rqPf(
df1 DOUBLE PRECISION,
df2 DOUBLE PRECISION,
ncp DOUBLE PRECISION,
lowerTail PLS_INTEGER,
logP PLS_INTEGER,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_prob_f"
PARAMETERS (
df1 DOUBLE,
df1 INDICATOR SHORT,
df2 DOUBLE,
df2 INDICATOR SHORT,
ncp DOUBLE,
ncp INDICATOR SHORT,
lowerTail INT,
lowerTail INDICATOR SHORT,
logP INT,
logP INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
------------------------------------ rqQf -------------------------------------
--
CREATE FUNCTION rqQf(
df1 DOUBLE PRECISION,
df2 DOUBLE PRECISION,
ncp DOUBLE PRECISION,
lowerTail PLS_INTEGER,
logP PLS_INTEGER,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_quantile_f"
PARAMETERS (
df1 DOUBLE,
df1 INDICATOR SHORT,
df2 DOUBLE,
df2 INDICATOR SHORT,
ncp DOUBLE,
ncp INDICATOR SHORT,
lowerTail INT,
lowerTail INDICATOR SHORT,
logP INT,
logP INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
----------------------------------- rqDgamma ----------------------------------
--
CREATE FUNCTION rqDgamma(
a DOUBLE PRECISION,
b DOUBLE PRECISION,
logP PLS_INTEGER,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_pdf_gamma"
PARAMETERS (
a DOUBLE,
a INDICATOR SHORT,
b DOUBLE,
b INDICATOR SHORT,
logP INT,
logP INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
----------------------------------- rqQgamma ----------------------------------
--
CREATE FUNCTION rqQgamma(
a DOUBLE PRECISION,
b DOUBLE PRECISION,
lowerTail PLS_INTEGER,
logP PLS_INTEGER,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_quantile_gamma"
PARAMETERS (
a DOUBLE,
a INDICATOR SHORT,
b DOUBLE,
b INDICATOR SHORT,
lowerTail INT,
lowerTail INDICATOR SHORT,
logP INT,
logP INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
----------------------------------- rqPgamma ----------------------------------
--
CREATE FUNCTION rqPgamma(
a DOUBLE PRECISION,
b DOUBLE PRECISION,
lowerTail PLS_INTEGER,
logP PLS_INTEGER,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_prob_gamma"
PARAMETERS (
a DOUBLE,
a INDICATOR SHORT,
b DOUBLE,
b INDICATOR SHORT,
lowerTail INT,
lowerTail INDICATOR SHORT,
logP INT,
logP INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
----------------------------------- rqDnbinom ---------------------------------
--
CREATE FUNCTION rqDnbinom(
n DOUBLE PRECISION,
prob DOUBLE PRECISION,
logP PLS_INTEGER,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_pdf_nbinom"
PARAMETERS (
n DOUBLE,
n INDICATOR SHORT,
prob DOUBLE,
prob INDICATOR SHORT,
logP INT,
logP INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
----------------------------------- rqPnbinom ---------------------------------
--
CREATE FUNCTION rqPnbinom(
n DOUBLE PRECISION,
prob DOUBLE PRECISION,
lowerTail PLS_INTEGER,
logP PLS_INTEGER,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_prob_nbinom"
PARAMETERS (
n DOUBLE,
n INDICATOR SHORT,
prob DOUBLE,
prob INDICATOR SHORT,
lowerTail INT,
lowerTail INDICATOR SHORT,
logP INT,
logP INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
----------------------------------- rqQnbinom ---------------------------------
--
CREATE FUNCTION rqQnbinom(
n DOUBLE PRECISION,
prob DOUBLE PRECISION,
lowerTail PLS_INTEGER,
logP PLS_INTEGER,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_quantile_nbinom"
PARAMETERS (
n DOUBLE,
n INDICATOR SHORT,
prob DOUBLE,
prob INDICATOR SHORT,
lowerTail INT,
lowerTail INDICATOR SHORT,
logP INT,
logP INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
----------------------------------- rqPnorm -----------------------------------
--
CREATE FUNCTION rqPnorm(
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_prob_normal"
PARAMETERS (
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
----------------------------------- rqQnorm -----------------------------------
--
CREATE FUNCTION rqQnorm(
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_quantile_normal"
PARAMETERS (
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
------------------------------------ rqDpois ----------------------------------
--
CREATE FUNCTION rqDpois(
lambda DOUBLE PRECISION,
logP PLS_INTEGER,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_pdf_poisson"
PARAMETERS (
lambda DOUBLE,
lambda INDICATOR SHORT,
logP INT,
logP INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
----------------------------------- rqPpois -----------------------------------
--
CREATE FUNCTION rqPpois(
lambda DOUBLE PRECISION,
lowerTail PLS_INTEGER,
logP PLS_INTEGER,
x PLS_INTEGER)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_prob_poisson"
PARAMETERS (
lambda DOUBLE,
lambda INDICATOR SHORT,
lowerTail INT,
lowerTail INDICATOR SHORT,
logP INT,
logP INDICATOR SHORT,
x INT,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
------------------------------------ rqQpois ----------------------------------
--
CREATE FUNCTION rqQpois(
lambda DOUBLE PRECISION,
lowerTail PLS_INTEGER,
logP PLS_INTEGER,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_quantile_poisson"
PARAMETERS (
lambda DOUBLE,
lambda INDICATOR SHORT,
lowerTail INT,
lowerTail INDICATOR SHORT,
logP INT,
logP INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
------------------------------------- rqQt ------------------------------------
--
CREATE FUNCTION rqQt(
df DOUBLE PRECISION,
ncp DOUBLE PRECISION,
lowerTail PLS_INTEGER,
logP PLS_INTEGER,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_quantile_student"
PARAMETERS (
df DOUBLE,
df INDICATOR SHORT,
ncp DOUBLE,
ncp INDICATOR SHORT,
lowerTail INT,
lowerTail INDICATOR SHORT,
logP INT,
logP INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
------------------------------------- rqPt ------------------------------------
--
CREATE FUNCTION rqPt(
df DOUBLE PRECISION,
ncp DOUBLE PRECISION,
lowerTail PLS_INTEGER,
logP PLS_INTEGER,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_prob_student"
PARAMETERS (
df DOUBLE,
df INDICATOR SHORT,
ncp DOUBLE,
ncp INDICATOR SHORT,
lowerTail INT,
lowerTail INDICATOR SHORT,
logP INT,
logP INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
---------------------------------- rqPweibull ---------------------------------
--
CREATE FUNCTION rqPweibull(
shape DOUBLE PRECISION,
scale DOUBLE PRECISION,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_prob_weibull"
PARAMETERS (
shape DOUBLE,
shape INDICATOR SHORT,
scale DOUBLE,
scale INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
---------------------------------- rqQweibull ---------------------------------
--
CREATE FUNCTION rqQweibull(
shape DOUBLE PRECISION,
scale DOUBLE PRECISION,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_quantile_weibull"
PARAMETERS (
shape DOUBLE,
shape INDICATOR SHORT,
scale DOUBLE,
scale INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
---------------------------------- rqDweibull ---------------------------------
--
CREATE FUNCTION rqDweibull(
shape DOUBLE PRECISION,
scale DOUBLE PRECISION,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_pdf_weibull"
PARAMETERS (
shape DOUBLE,
shape INDICATOR SHORT,
scale DOUBLE,
scale INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
---------------------------------- rqHarmonic ---------------------------------
--
CREATE FUNCTION rqHarmonic(
n IN PLS_INTEGER)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqHarmonic"
PARAMETERS (
n LONG,
n INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
---------------------------------- rqSignP ------------------------------------
--
CREATE FUNCTION rqSignP(
np IN PLS_INTEGER,
nn IN PLS_INTEGER)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqSignP"
PARAMETERS (
np LONG,
np INDICATOR SHORT,
nn LONG,
nn INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
---------------------------------- rqCvmP -------------------------------------
--
CREATE FUNCTION rqCvmP(
w IN DOUBLE PRECISION,
n IN PLS_INTEGER)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqCvmP"
PARAMETERS (
w DOUBLE,
w INDICATOR SHORT,
n LONG,
n INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
----------------------------------- rqDcauchy ---------------------------------
--
CREATE FUNCTION rqDcauchy(
x DOUBLE PRECISION,
loc DOUBLE PRECISION,
scale DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_pdf_cauchy"
PARAMETERS (
x DOUBLE,
x INDICATOR SHORT,
loc DOUBLE,
loc INDICATOR SHORT,
scale DOUBLE,
scale INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
------------------------------------- rqDt ------------------------------------
--
CREATE FUNCTION rqDt(
df DOUBLE PRECISION,
ncp DOUBLE PRECISION,
logP PLS_INTEGER,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_pdf_student"
PARAMETERS (
df DOUBLE,
df INDICATOR SHORT,
ncp DOUBLE,
ncp INDICATOR SHORT,
logP INT,
logP INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
----------------------------------- rqDnorm -----------------------------------
--
CREATE FUNCTION rqDnorm(
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_pdf_normal"
PARAMETERS (
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
------------------------------------ rqDexp -----------------------------------
--
CREATE FUNCTION rqDexp(
lambda DOUBLE PRECISION,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_pdf_exponential"
PARAMETERS (
lambda DOUBLE,
lambda INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
--------------------------------- rqDsignrank ---------------------------------
--
CREATE FUNCTION rqDsignrank(
n DOUBLE PRECISION,
logP PLS_INTEGER,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_pdf_signrank"
PARAMETERS (
n DOUBLE,
n INDICATOR SHORT,
logP INT,
logP INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
-------------------------------- rqPsignrank ----------------------------------
--
CREATE FUNCTION rqPsignrank(
n DOUBLE PRECISION,
lowerTail PLS_INTEGER,
logP PLS_INTEGER,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_prob_signrank"
PARAMETERS (
n DOUBLE,
n INDICATOR SHORT,
lowerTail INT,
lowerTail INDICATOR SHORT,
logP INT,
logP INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
-------------------------------- rqQsignrank ----------------------------------
--
CREATE FUNCTION rqQsignrank(
n DOUBLE PRECISION,
lowerTail PLS_INTEGER,
logP PLS_INTEGER,
x DOUBLE PRECISION)
RETURN DOUBLE PRECISION
PARALLEL_ENABLE
AS LANGUAGE C
LIBRARY rq$lib
NAME "rqss_quantile_signrank"
PARAMETERS (
n DOUBLE,
n INDICATOR SHORT,
lowerTail INT,
lowerTail INDICATOR SHORT,
logP INT,
logP INDICATOR SHORT,
x DOUBLE,
x INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN DOUBLE);
/
SHOW ERRORS;
--***************************************************************************--
--* (*) FUNCTIONS: Kolmogorov-Smirnov *--
--***************************************************************************--
-- EXPONENTIAL DISTRIBUTION ---------------------------------------------------
--
CREATE FUNCTION rqKstestPexp(
ownername IN VARCHAR2,
tablename IN VARCHAR2,
columnname IN VARCHAR2,
rate IN NUMBER
)
RETURN rqNumericEltSet
AUTHID CURRENT_USER
IS
lambda NUMBER;
mu NUMBER;
d NUMBER;
sig NUMBER;
line VARCHAR2(255);
status INTEGER;
output rqNumericEltSet;
BEGIN
lambda := rate;
mu := 0;
DBMS_OUTPUT.ENABLE(1000000);
DBMS_STAT_FUNCS.EXPONENTIAL_DIST_FIT (
ownername => DBMS_ASSERT.ENQUOTE_NAME(ownername, FALSE),
tablename => DBMS_ASSERT.ENQUOTE_NAME(tablename, FALSE),
columnname => DBMS_ASSERT.ENQUOTE_NAME(columnname, FALSE),
test_type => 'KOLMOGOROV_SMIRNOV',
lambda => lambda,
mu => mu,
sig => sig);
DBMS_OUTPUT.GET_LINE(line, status);
DBMS_OUTPUT.DISABLE;
d := TO_NUMBER(SUBSTR(line, 11));
output := rqNumericEltSet();
output.EXTEND(2);
output(1) := rqNumericElt(1, d);
output(2) := rqNumericElt(2, sig);
RETURN output;
END rqKstestPexp;
/
SHOW ERRORS;
-- NORMAL DISTRIBUTION --------------------------------------------------------
--
CREATE FUNCTION rqKstestPnorm(
ownername IN VARCHAR2,
tablename IN VARCHAR2,
columnname IN VARCHAR2,
mean IN NUMBER,
sd IN NUMBER
)
RETURN rqNumericEltSet
AUTHID CURRENT_USER
IS
meann NUMBER;
stdev NUMBER;
d NUMBER;
sig NUMBER;
line VARCHAR2(255);
status INTEGER;
output rqNumericEltSet;
BEGIN
meann := mean;
stdev := sd;
DBMS_OUTPUT.ENABLE(1000000);
DBMS_STAT_FUNCS.NORMAL_DIST_FIT (
ownername => DBMS_ASSERT.ENQUOTE_NAME(ownername, FALSE),
tablename => DBMS_ASSERT.ENQUOTE_NAME(tablename, FALSE),
columnname => DBMS_ASSERT.ENQUOTE_NAME(columnname, FALSE),
test_type => 'KOLMOGOROV_SMIRNOV',
mean => meann,
stdev => stdev,
sig => sig);
DBMS_OUTPUT.GET_LINE(line, status);
DBMS_OUTPUT.DISABLE;
d := TO_NUMBER(SUBSTR(line, 11));
output := rqNumericEltSet();
output.EXTEND(2);
output(1) := rqNumericElt(1, d);
output(2) := rqNumericElt(2, sig);
RETURN output;
END rqKstestPnorm;
/
SHOW ERRORS;
-- POISSON DISTRIBUTION -------------------------------------------------------
--
CREATE FUNCTION rqKstestPpois(
ownername IN VARCHAR2,
tablename IN VARCHAR2,
columnname IN VARCHAR2,
lambda IN NUMBER
)
RETURN rqNumericEltSet
AUTHID CURRENT_USER
IS
lambdaa NUMBER;
d NUMBER;
sig NUMBER;
line VARCHAR2(255);
status INTEGER;
output rqNumericEltSet;
BEGIN
lambdaa := lambda;
DBMS_OUTPUT.ENABLE(1000000);
DBMS_STAT_FUNCS.POISSON_DIST_FIT (
ownername => DBMS_ASSERT.ENQUOTE_NAME(ownername, FALSE),
tablename => DBMS_ASSERT.ENQUOTE_NAME(tablename, FALSE),
columnname => DBMS_ASSERT.ENQUOTE_NAME(columnname, FALSE),
test_type => 'KOLMOGOROV_SMIRNOV',
lambda => lambdaa,
sig => sig);
DBMS_OUTPUT.GET_LINE(line, status);
DBMS_OUTPUT.DISABLE;
d := TO_NUMBER(SUBSTR(line, 11));
output := rqNumericEltSet();
output.EXTEND(2);
output(1) := rqNumericElt(1, d);
output(2) := rqNumericElt(2, sig);
RETURN output;
END rqKstestPpois;
/
SHOW ERRORS;
-- UNIFORM DISTRIBUTION -------------------------------------------------------
--
CREATE FUNCTION rqKstestPunif(
ownername IN VARCHAR2,
tablename IN VARCHAR2,
columnname IN VARCHAR2,
minx IN NUMBER,
maxx IN NUMBER
)
RETURN rqNumericEltSet
AUTHID CURRENT_USER
IS
paramA NUMBER;
paramB NUMBER;
d NUMBER;
sig NUMBER;
line VARCHAR2(255);
status INTEGER;
output rqNumericEltSet;
BEGIN
paramA := minx;
paramB := maxx;
DBMS_OUTPUT.ENABLE(1000000);
DBMS_STAT_FUNCS.UNIFORM_DIST_FIT (
ownername => DBMS_ASSERT.ENQUOTE_NAME(ownername, FALSE),
tablename => DBMS_ASSERT.ENQUOTE_NAME(tablename, FALSE),
columnname => DBMS_ASSERT.ENQUOTE_NAME(columnname, FALSE),
var_type => 'CONTINUOUS',
test_type => 'KOLMOGOROV_SMIRNOV',
paramA => paramA,
paramB => paramB,
sig => sig);
DBMS_OUTPUT.GET_LINE(line, status);
DBMS_OUTPUT.DISABLE;
d := TO_NUMBER(SUBSTR(line, 11));
output := rqNumericEltSet();
output.EXTEND(2);
output(1) := rqNumericElt(1, d);
output(2) := rqNumericElt(2, sig);
RETURN output;
END rqKstestPunif;
/
SHOW ERRORS;
-- WEIBULL DISTRIBUTION -------------------------------------------------------
--
CREATE FUNCTION rqKstestPweibull(
ownername IN VARCHAR2,
tablename IN VARCHAR2,
columnname IN VARCHAR2,
shape IN NUMBER,
scale IN NUMBER
)
RETURN rqNumericEltSet
AUTHID CURRENT_USER
IS
alpha NUMBER;
mu NUMBER;
beta NUMBER;
d NUMBER;
sig NUMBER;
line VARCHAR2(255);
status INTEGER;
output rqNumericEltSet;
BEGIN
alpha := scale;
mu := 0;
beta := shape;
DBMS_OUTPUT.ENABLE(1000000);
DBMS_STAT_FUNCS.WEIBULL_DIST_FIT (
ownername => DBMS_ASSERT.ENQUOTE_NAME(ownername, FALSE),
tablename => DBMS_ASSERT.ENQUOTE_NAME(tablename, FALSE),
columnname => DBMS_ASSERT.ENQUOTE_NAME(columnname, FALSE),
test_type => 'KOLMOGOROV_SMIRNOV',
alpha => alpha,
mu => mu,
beta => beta,
sig => sig);
DBMS_OUTPUT.GET_LINE(line, status);
DBMS_OUTPUT.DISABLE;
d := TO_NUMBER(SUBSTR(line, 11));
output := rqNumericEltSet();
output.EXTEND(2);
output(1) := rqNumericElt(1, d);
output(2) := rqNumericElt(2, sig);
RETURN output;
END rqKstestPweibull;
/
SHOW ERRORS;
--***************************************************************************--
--* (*) PROCEDURE: rqForeachUpdate *--
--***************************************************************************--
CREATE PROCEDURE rqForeachUpdate(
num NUMBER)
AUTHID DEFINER
AS
BEGIN
MERGE INTO rqForeach D
USING (SELECT id
FROM (select 1 id, 1 val from dual)
MODEL DIMENSION BY (id)
MEASURES (val)
RULES (val[FOR id FROM 1 TO num INCREMENT 1]
= CV(id))) S
ON (D.id = S.id)
WHEN NOT MATCHED THEN INSERT (D.id) VALUES (S.id);
COMMIT;
END;
/
SHOW ERRORS
--***************************************************************************--
--* (*) PROCEDURES: Data Store *--
--***************************************************************************--
CREATE TYPE rqCharSet AS TABLE OF VARCHAR2(128);
/
CREATE TYPE rqNumericSet AS TABLE OF NUMBER;
/
CREATE TYPE rqRefDBObj IS OBJECT (
name VARCHAR2(128),
dtyp VARCHAR2(128),
parm VARCHAR2(128));
/
CREATE TYPE rqRefDBObjSet IS TABLE of rqRefDBObj;
/
CREATE PROCEDURE rq$AddDataStoreObjectImpl(
ds_owner IN VARCHAR2,
ds_name IN VARCHAR2,
obj_name IN VARCHAR2,
obj_class IN VARCHAR2,
obj_size IN integer,
obj_length IN integer,
obj_nrow IN integer,
obj_ncol IN integer
)
IS
v_dsID number(20);
v_objID number(20);
v_objver varchar2(16);
v_objexists integer;
BEGIN
-- get dsID from named datastore
select dsID into v_dsID
from rq$datastore
where dsowner = ds_owner AND dsname = ds_name;
-- check if objname aleardy exist in named datastore
select count(*) into v_objexists
from rq$datastoreobject
where dsID = v_dsID AND objname = obj_name;
IF v_objexists > 0 THEN
raise_application_error(-20101,
'Object already exists in named datastore');
END IF;
-- get a new objID from sequence
select rq$datastore_seq.nextval into v_objID from sys.dual;
-- get ORE version
select value into v_objver from sys.rq_config where name = 'VERSION';
-- insert object meta data
insert into rq$datastoreobject
values(v_objID, v_dsID, obj_name, obj_class, obj_size,
obj_length, obj_nrow, obj_ncol, v_objver);
return;
EXCEPTION
WHEN OTHERS THEN
RAISE;
RETURN;
END;
/
SHOW ERRORS;
CREATE PROCEDURE rq$AddDataStoreObject(
ds_name IN VARCHAR2,
obj_name IN VARCHAR2,
obj_class IN VARCHAR2,
obj_size IN integer,
obj_length IN integer,
obj_nrow IN integer,
obj_ncol IN integer
)
AUTHID CURRENT_USER
IS
ds_owner VARCHAR2(128);
BEGIN
ds_owner := SYS_CONTEXT('USERENV', 'CURRENT_USER');
rq$AddDataStoreObjectImpl(ds_owner, ds_name, obj_name,
obj_class, obj_size, obj_length, obj_nrow, obj_ncol);
END;
/
SHOW ERRORS;
CREATE PROCEDURE rq$AddDataStoreRefDBObjectImpl(
ds_owner IN VARCHAR2,
ds_name IN VARCHAR2,
obj_name IN VARCHAR2,
refobj_id IN number,
refobj_name IN VARCHAR2,
refobj_type IN VARCHAR2,
refobj_parm IN VARCHAR2,
refobj_owner IN VARCHAR2
)
IS
v_objID number(20) := NULL;
BEGIN
-- get objID
select objID into v_objID
from RQ$DATASTORE a, RQ$DATASTOREOBJECT b
where a.dsowner = ds_owner AND a.dsname = ds_name AND
b.objname = obj_name AND a.dsID = b.dsID;
-- insert objID with the associated referenced db object id
insert into RQ$DATASTOREREFDBOBJECT
values(v_objID, refobj_id);
-- insert referenced db object if not existed yet
insert into RQ$REFDBOBJECT
select refobj_id, refobj_name, refobj_type, refobj_parm, refobj_owner
from dual where refobj_id NOT IN (select refobjID from RQ$REFDBOBJECT);
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20101,
'Object ' || to_char(v_objID) || ' or ' ||
refobj_owner || ' ' || refobj_name || ' ' || upper(refobj_type) || ' does not exist in named datastore');
RETURN;
END;
/
SHOW ERRORS;
CREATE FUNCTION rq$GetRefDBObjectID(
refobj_name IN VARCHAR2,
refobj_type IN VARCHAR2,
refobj_owner IN VARCHAR2
)
RETURN number
AUTHID CURRENT_USER
IS
v_refobjID number := NULL;
v_refobjTyp VARCHAR2(16);
v_refobjNam VARCHAR2(128);
BEGIN
-- get referenced db object ID
if (refobj_type = 'rqScript') then
v_refobjTyp := 'VIEW';
v_refobjNam := refobj_name || '_V';
else
if (refobj_type = 'model') then
v_refobjTyp := 'MINING MODEL';
else
v_refobjTyp := refobj_type;
end if;
v_refobjNam := refobj_name;
end if;
select object_id into v_refobjID
from all_objects
where owner = refobj_owner AND object_name = upper(v_refobjNam) AND
object_type = upper(v_refobjTyp);
-- error out when v_refobjID is null
IF v_refobjID IS NULL THEN
raise_application_error(-20101, 'Database ' || refobj_type ||
' object ' || refobj_owner || '.' || refobj_name ||
' no longer exists');
END IF;
return v_refobjID;
END;
/
SHOW ERRORS;
CREATE PROCEDURE rq$AddDataStoreRefDBObject(
ds_name IN VARCHAR2,
obj_name IN VARCHAR2,
refobj_name IN VARCHAR2,
refobj_type IN VARCHAR2,
refobj_parm IN VARCHAR2,
refobj_owner IN VARCHAR2
)
AUTHID CURRENT_USER
IS
ds_owner VARCHAR2(128);
v_refobjID number := NULL;
BEGIN
-- get referenced db object ID
v_refobjID := rq$GetRefDBObjectID(refobj_name, refobj_type, refobj_owner);
ds_owner := SYS_CONTEXT('USERENV', 'CURRENT_USER');
rq$AddDataStoreRefDBObjectImpl(ds_owner, ds_name, obj_name,
v_refobjID, refobj_name, refobj_type,
refobj_parm, refobj_owner);
END;
/
SHOW ERRORS;
CREATE PROCEDURE rq$AddRSessionRefDBObjectImpl(
sess_owner IN VARCHAR2,
rsess IN number,
refobj_id IN number,
refobj_name IN VARCHAR2,
refobj_type IN VARCHAR2,
refobj_parm IN VARCHAR2,
refobj_owner IN VARCHAR2
)
IS
BEGIN
-- insert session info with the associated refdbobject id
insert into RQ$OREREFDBOBJECT
values(sess_owner, rsess, refobj_id);
-- insert referenced db object if not existed yet
insert into RQ$REFDBOBJECT
select refobj_id, refobj_name, refobj_type, refobj_parm, refobj_owner
from dual where refobj_id NOT IN (select refobjID from RQ$REFDBOBJECT);
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20101,
'Object ' || to_char(refobj_id) ||
' does not exist in named datastore');
RETURN;
END;
/
SHOW ERRORS;
CREATE PROCEDURE rq$AddRSessionRefDBObject(
rsess IN VARCHAR2,
refobj_name IN VARCHAR2,
refobj_type IN VARCHAR2,
refobj_parm IN VARCHAR2,
refobj_owner IN VARCHAR2
)
AUTHID CURRENT_USER
IS
v_refobjID number := NULL;
v_sessowner VARCHAR2(128);
BEGIN
-- get referenced db object ID
v_refobjID := rq$GetRefDBObjectID(refobj_name, refobj_type, refobj_owner);
v_sessowner := SYS_CONTEXT('USERENV', 'CURRENT_USER');
rq$AddRSessionRefDBObjectImpl(v_sessowner, to_number(rsess),
v_refobjID, refobj_name, refobj_type,
refobj_parm, refobj_owner);
END;
/
SHOW ERRORS;
CREATE FUNCTION rq$DeleteRefDBObjects(del_refIds rqNumericSet,
ds_owner VARCHAR2,
ds_only boolean default FALSE)
RETURN rqRefDBObjSet
IS
del_refObjs rqRefDBObjSet := NULL;
BEGIN
-- delete refdbobject record that are no longer used by
-- refdbobject owner in either datastorerefdbobject or orerefdbobject
IF (del_refIds IS NOT NULL) THEN
IF (ds_only) THEN
-- check refdbobject on datastore use only
delete from RQ$REFDBOBJECT a where a.refobjID IN (
select t.column_value from table(del_refIds) t
where t.column_value NOT IN (
select distinct b.refobjID
from RQ$DATASTOREREFDBOBJECT b, RQ$DATASTORESUMMARY c
where b.objID = c.objID and
c.dsowner = ds_owner)
) and a.refobjowner = ds_owner
returning rqRefDBObj(a.refobjName, a.refobjType, a.refobjParm)
BULK COLLECT INTO del_refObjs;
ELSE
delete from RQ$REFDBOBJECT a where a.refobjID IN (
select t.column_value from table(del_refIds) t
where t.column_value NOT IN (
select distinct b.refobjID
from RQ$DATASTOREREFDBOBJECT b, RQ$DATASTORESUMMARY c
where b.objID = c.objID and
c.dsowner = ds_owner)
AND t.column_value NOT IN (
select distinct d.refobjID from RQ$OREREFDBOBJECT d
where d.sessionowner = ds_owner)
) and a.refobjowner = ds_owner
returning rqRefDBObj(a.refobjName, a.refobjType, a.refobjParm)
BULK COLLECT INTO del_refObjs;
END IF;
ELSE
-- delete all ref db objects no longer used by owner
delete from RQ$REFDBOBJECT a where a.refobjID NOT IN (
select distinct b.refobjID
from RQ$DATASTOREREFDBOBJECT b, RQ$DATASTORESUMMARY c
where b.objID = c.objID and c.dsowner = a.refobjowner)
AND a.refobjID NOT IN (
select distinct d.refobjID from RQ$OREREFDBOBJECT d
where d.sessionowner = a.refobjowner)
returning rqRefDBObj(a.refobjName, a.refobjType, a.refobjParm)
BULK COLLECT INTO del_refObjs;
END IF;
COMMIT;
return del_refObjs;
END;
/
SHOW ERRORS;
CREATE PROCEDURE rq$DropRefDBObjects(
refObjs rqRefDBObjSet
)
AUTHID CURRENT_USER
IS
drp_qry VARCHAR2(256);
BEGIN
-- drop no-longer referenced db objects
FOR i IN refObjs.FIRST..refObjs.LAST LOOP
if (refObjs(i).dtyp = 'rqScript') then
drp_qry := 'begin rqsys.rq$OREScriptDrop(:1); end;';
execute immediate drp_qry using refObjs(i).name;
elsif (refObjs(i).dtyp = 'model') then
drp_qry := 'begin dbms_data_mining.drop_model(:1); exception when others then NULL; end;';
-- dbms_output.put_line(drp_qry || ': ' || refObjs(i).name);
execute immediate drp_qry using refObjs(i).name;
else
if (refObjs(i).dtyp = 'table') then
drp_qry := 'drop table ' ||
sys.dbms_assert.enquote_name(refObjs(i).name) || ' purge';
elsif (refObjs(i).dtyp = 'function') then
drp_qry := 'drop function ' ||
sys.dbms_assert.enquote_name(refObjs(i).name);
elsif (refObjs(i).dtyp = 'package') then
drp_qry := 'drop package ' ||
sys.dbms_assert.enquote_name(refObjs(i).name);
elsif (refObjs(i).dtyp = 'view') then
drp_qry := 'drop view ' ||
sys.dbms_assert.enquote_name(refObjs(i).name);
else
raise_application_error(-20101, refObjs(i).dtyp || ' ' ||
refObjs(i).name || ' not a supported db reference object');
end if;
execute immediate drp_qry;
end if;
END LOOP;
END;
/
SHOW ERRORS;
CREATE PROCEDURE rq$DropDataStoreImpl(
ds_owner IN VARCHAR2,
ds_name IN VARCHAR2,
del_objIds OUT rqNumericSet,
del_refIds OUT rqNumericSet
)
IS
v_dsID number := NULL;
BEGIN
del_objIds := NULL;
del_refIds := NULL;
-- get R object Ids within the named datastore
select b.objID BULK COLLECT into del_objIds
from RQ$DATASTORE a, RQ$DATASTOREOBJECT b
where a.dsowner = ds_owner AND a.dsname = ds_name AND
a.dsID = b.dsID;
-- get RefDBObject Ids used by the named datastore
select unique(c.refobjID) BULK COLLECT into del_refIds
from RQ$DATASTORE a, RQ$DATASTOREOBJECT b, RQ$DATASTOREREFDBOBJECT c
where a.dsowner = ds_owner AND a.dsname = ds_name AND
a.dsID = b.dsID AND b.objID = c.objID;
-- delete datastore record
delete from RQ$DATASTORE where dsowner = ds_owner AND dsname = ds_name
returning dsID into v_dsID;
if (v_dsID is null) then
del_objIds := NULL;
del_refIds := NULL;
end if;
COMMIT;
END;
/
SHOW ERRORS;
CREATE FUNCTION rq$getDataStoreTabImp(
ds_name VARCHAR2,
ds_owner VARCHAR2,
ds_user VARCHAR2)
RETURN VARCHAR2
IS
v_tabnam VARCHAR2(128);
BEGIN
IF ds_owner = ds_user THEN
select tabname into v_tabnam
from rq$DATASTORE
where dsowner = ds_owner and dsname = ds_name;
ELSE
select distinct tabname into v_tabnam
from rq$DATASTORE a, RQ$DATASTOREACCESS b
where (b.grantee = ds_user or
b.grantee = 'PUBLIC') and b.dsId = a.dsId and
a.dsowner = ds_owner and a.dsname = ds_name;
END IF;
IF v_tabnam IS NULL THEN
v_tabnam := 'RQ$DATASTOREINVENTORY';
END IF;
return v_tabnam;
EXCEPTION
WHEN NO_DATA_FOUND THEN
raise_application_error(-20101, 'DataStore ' || ds_name ||
' does not belong to user ' || ds_owner ||
' or the current user does not have read privilege to this datastore');
WHEN OTHERS THEN
RAISE;
END;
/
SHOW ERRORS;
CREATE FUNCTION rq$getDataStoreTab(
ds_name VARCHAR2,
ds_owner VARCHAR2 default NULL)
RETURN VARCHAR2
AUTHID CURRENT_USER
IS
v_user VARCHAR2(128);
v_owner VARCHAR2(128);
BEGIN
v_user := SYS_CONTEXT('USERENV', 'CURRENT_USER');
IF ds_owner IS NULL THEN
v_owner := v_user;
ELSE
v_owner := ds_owner;
END IF;
return rq$getDataStoreTabImp(ds_name, v_owner, v_user);
END;
/
SHOW ERRORS;
CREATE PROCEDURE rq$DeleteRObjectsImpl(
ds_owner IN VARCHAR2,
ds_name IN VARCHAR2,
obj_names IN rqCharSet,
silent IN BOOLEAN,
del_objIds OUT rqNumericSet,
del_refIds OUT rqNumericSet
)
IS
missing_ds EXCEPTION;
missing_objs EXCEPTION;
v_dsexist number;
v_objIds rqNumericSet := NULL;
delta number;
BEGIN
del_refIds := NULL;
del_objIds := NULL;
-- check if datastore exists
select count(*) into v_dsexist
from RQ$DATASTORE a
where a.dsowner = ds_owner AND a.dsname = ds_name;
IF v_dsexist = 0 THEN
IF silent = FALSE THEN
RAISE missing_ds;
ELSE
return;
END IF;
END IF;
-- delete datastore record
IF (obj_names is not null) THEN
-- delete named R objects
select b.objID BULK COLLECT into v_objIds
from RQ$DATASTORE a, RQ$DATASTOREOBJECT b, table(obj_names) c
where a.dsowner = ds_owner AND a.dsname = ds_name AND
b.objname = c.column_value AND
a.dsID = b.dsID;
ELSE
-- delete all R objects
select b.objID BULK COLLECT into v_objIds
from RQ$DATASTORE a, RQ$DATASTOREOBJECT b
where a.dsowner = ds_owner AND a.dsname = ds_name AND
a.dsID = b.dsID;
END IF;
IF (v_objIds IS NOT NULL) THEN
-- get del_refIds
select unique(refobjID) BULK COLLECT into del_refIds
from RQ$DATASTOREREFDBOBJECT a, table(v_objIds) b
where a.objID = b.column_value;
-- get del_objIds
delete from RQ$DATASTOREOBJECT where objID IN (
select column_value from table(v_objIds))
returning objID BULK COLLECT INTO del_objIds;
END IF;
IF (obj_names is not null) THEN
delta := obj_names.COUNT - del_objIds.COUNT;
IF delta <> 0 THEN
RAISE missing_objs;
END IF;
END IF;
COMMIT;
EXCEPTION
WHEN missing_ds THEN
ROLLBACK;
raise_application_error(-20101, ' Datastore ' || ds_name ||
' does not exist in user ' || ds_owner);
WHEN missing_objs THEN
ROLLBACK;
raise_application_error(-20101, to_char(delta) || ' R Objects ' ||
'do not exist in datastore ' || ds_name);
WHEN OTHERS THEN
ROLLBACK;
RAISE;
END;
/
SHOW ERRORS;
CREATE PROCEDURE rqDeleteRObjects(
ds_name IN VARCHAR2,
obj_names IN rqCharSet,
silent IN BOOLEAN DEFAULT FALSE
)
AUTHID CURRENT_USER
IS
ds_owner VARCHAR2(128);
del_objIds rqNumericSet;
del_refIds rqNumericSet;
del_refobjs rqRefDBObjSet;
tabnam VARCHAR2(128);
BEGIN
ds_owner := SYS_CONTEXT('USERENV', 'CURRENT_USER');
rq$DeleteRObjectsImpl(ds_owner, ds_name, obj_names, silent,
del_objIds, del_refIds);
IF (del_objIds IS NULL) THEN
return;
END IF;
if (del_refIds IS NOT NULL and del_refIds.count > 0) then
del_refobjs := rq$DeleteRefDBObjects(del_refIds, ds_owner);
-- drop no-longer referenced db objects
if (del_refobjs IS NOT NULL and del_refobjs.count > 0) then
rq$DropRefDBObjects(del_refobjs);
end if;
end if;
-- get datastore table name
tabnam := rqsys.rq$getDataStoreTab(ds_name);
-- remove from datastore table
execute immediate
'delete from ' || dbms_assert.enquote_name(tabnam) ||
' where objID IN (' ||
'select column_value from table(:del_objIds)) ' using del_objIds;
COMMIT;
END;
/
SHOW ERRORS;
CREATE PROCEDURE rq$DeleteORERefDBObjectImpl(
rsess IN number,
refobj_owner IN VARCHAR2,
refobj_name IN VARCHAR2,
refobj_type IN VARCHAR2,
del_refIds OUT rqNumericSet
)
IS
BEGIN
del_refIds := NULL;
IF (refobj_name IS NULL) THEN
-- delete all records kept for rsess in RQ$OREREFDBOBJECT
delete from RQ$OREREFDBOBJECT where oresession = rsess
returning refobjID BULK COLLECT INTO del_refIds;
ELSE
-- delete one record in RQ$OREREFDBOBJECT
delete from RQ$OREREFDBOBJECT
where rowid in (
select row_id from (
select rowid row_id, oresession, refobjID,
row_number() over(partition by refobjID order by refobjID) dup
from RQ$OREREFDBOBJECT) t, RQ$REFDBOBJECT a
where t.dup = 1 and a.refobjID = t.refobjID and t.oresession = rsess and
a.refobjowner = refobj_owner and a.refobjname = refobj_name and
a.refobjtype = refobj_type)
returning refobjID BULK COLLECT INTO del_refIds;
END IF;
IF (del_refIds IS NOT NULL) THEN
del_refIds := set(del_refIds);
END IF;
END;
/
SHOW ERRORS
CREATE PROCEDURE rq$DeleteORERefDBObject(
rsess IN VARCHAR2,
refobj_name IN VARCHAR2 default NULL,
refobj_type IN VARCHAR2 default NULL,
refobj_owner IN VARCHAR2 default NULL,
refobj_drop IN BOOLEAN default TRUE
)
AUTHID CURRENT_USER
IS
ds_owner VARCHAR2(128);
del_refIds rqNumericSet;
del_refobjs rqRefDBObjSet;
BEGIN
rq$DeleteORERefDBObjectImpl(to_number(rsess), refobj_owner,
refobj_name, refobj_type, del_refIds);
if (del_refIds is not null and del_refIds.count > 0) then
ds_owner := SYS_CONTEXT('USERENV', 'CURRENT_USER');
if (refobj_name is not null) then
del_refobjs := rq$DeleteRefDBObjects(del_refIds, ds_owner);
else
if (refobj_drop) then
del_refobjs := rq$DeleteRefDBObjects(del_refIds, ds_owner, TRUE);
else
del_refobjs := NULL;
end if;
end if;
if (del_refobjs is not null and del_refobjs.count > 0) then
-- drop no-longer referenced db objects
rq$DropRefDBObjects(del_refobjs);
end if;
end if;
END;
/
SHOW ERRORS;
CREATE PROCEDURE rq$AddDataStoreImpl(
ds_owner IN VARCHAR2,
ds_name IN VARCHAR2,
ds_desc IN VARCHAR2,
ds_append IN integer,
ds_tabnam IN OUT VARCHAR2
)
IS
v_dsID number(20);
v_dsexists integer;
BEGIN
-- get new dsID from sequence
select rq$datastore_seq.nextval into v_dsID from sys.dual;
-- create datastore record
insert into RQ$DATASTORE(dsID, dsowner, dsname, cdate,
description, tabname)
values(v_dsID, ds_owner, ds_name, sysdate, ds_desc, ds_tabnam);
COMMIT;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
IF ds_append = 0 THEN
raise_application_error(-20101, 'Datastore ' || ds_name ||
' already exists');
ELSE
IF (ds_append = 2) THEN
-- update cdate and description in overwrite case
update RQ$DATASTORE set cdate = sysdate, description = ds_desc
where dsowner = ds_owner and dsname = ds_name;
END IF;
-- use the existing datastore underlying table
ds_tabnam := NULL;
END IF;
RETURN;
END;
/
SHOW ERRORS;
CREATE PROCEDURE rq$AddDataStore(
ds_name IN VARCHAR2,
ds_desc IN VARCHAR2,
ds_append IN integer,
ds_tabnam IN VARCHAR2
)
AUTHID CURRENT_USER
IS
ds_owner VARCHAR2(128);
tabnam VARCHAR2(128) := ds_tabnam;
BEGIN
ds_owner := SYS_CONTEXT('USERENV', 'CURRENT_USER');
IF (ds_append = 2) THEN
-- overwrite case: delete all R objects if datastore exists
-- no error out if datastore does not exists
rqDeleteRObjects(ds_name, NULL, TRUE);
END IF;
-- create new datastore meta data if not exists
rq$AddDataStoreImpl(ds_owner, ds_name, ds_desc, ds_append, tabnam);
IF (tabnam IS NOT NULL) THEN
-- create new datastore table
execute immediate 'create table ' || dbms_assert.enquote_name(tabnam) ||
' (objID NUMBER,' ||
'chunkid NUMBER,' ||
'value RAW(2000))';
execute immediate 'create index ' ||
dbms_assert.enquote_name(tabnam || '_idx') ||
' on ' ||
dbms_assert.enquote_name(tabnam) || ' (objID)';
END IF;
END;
/
SHOW ERRORS;
CREATE PROCEDURE rq$OREScriptCreate(
v_name VARCHAR2,
v_script CLOB)
AUTHID CURRENT_USER
AS
BEGIN
EXECUTE IMMEDIATE 'begin sys.rqScriptCreate(:1, :2); end;'
using v_name, v_script;
EXECUTE IMMEDIATE 'create view ' ||
dbms_assert.enquote_name(v_name || '_V') || ' as ' ||
' select script from USER_RQ_SCRIPTS ' ||
' where name = ' ||
dbms_assert.enquote_literal(v_name);
END;
/
SHOW ERRORS;
CREATE PROCEDURE rq$OREScriptDrop(
v_name VARCHAR2)
AUTHID CURRENT_USER
AS
BEGIN
-- EXECUTE IMMEDIATE 'drop function ORE$RQS' || v_name;
EXECUTE IMMEDIATE 'drop view ' || dbms_assert.enquote_name(v_name || '_V');
EXECUTE IMMEDIATE 'begin sys.rqScriptDrop(:1); end;' using v_name;
END;
/
SHOW ERRORS;
CREATE PROCEDURE rq$ScriptDropAny(
v_owner VARCHAR2,
v_name VARCHAR2)
AS
BEGIN
delete from sys.rq$script where owner = v_owner and name = v_name;
END;
/
SHOW ERRORS;
--***************************************************************************--
--* (*) ORE 1.5 R SCRIPTS *--
--***************************************************************************--
CREATE PROCEDURE rq$GrantRevokeRefDBObjects(
refObjs rqRefDBObjSet,
v_grantee VARCHAR2,
v_type VARCHAR2
)
AUTHID CURRENT_USER
IS
qry VARCHAR2(256);
tofrm VARCHAR2(8);
grarev VARCHAR2(8);
usrnam VARCHAR2(128);
refnam VARCHAR2(128);
reftyp VARCHAR2(128);
invalid_reftyp EXCEPTION;
BEGIN
if (v_type = 'GRANT') then
tofrm := ' to ';
grarev := 'GRANT';
else
tofrm := ' from ';
grarev := 'REVOKE';
end if;
SAVEPOINT grantrevoke_refdbobj;
-- grant/revoke access to/from referenced db objects
FOR i IN refObjs.FIRST..refObjs.LAST LOOP
reftyp := refObjs(i).dtyp;
refnam := refObjs(i).name;
if (reftyp = 'rqScript') then
-- qry := v_type || ' select on ' || refObjs(i).name || '_V' ||
-- tofrm || v_grantee;
if (v_grantee = 'PUBLIC') then
usrnam := NULL;
else
usrnam := v_grantee;
end if;
if (v_type = 'GRANT') then
qry := 'begin rqGrant(:1, :2, :3); end;';
else
qry := 'begin rqRevoke(:1, :2, :3); end;';
end if;
execute immediate qry using refnam, 'rqscript', usrnam;
else
if (reftyp = 'table') then
qry := grarev || ' select on ' || dbms_assert.enquote_name(refnam) ||
tofrm || dbms_assert.enquote_name(v_grantee);
elsif (reftyp = 'model') then
qry := grarev || ' select on mining model ' ||
dbms_assert.enquote_name(refnam) ||
tofrm || dbms_assert.enquote_name(v_grantee);
elsif (reftyp = 'package' OR reftyp = 'function') then
qry := grarev || ' execute on ' || dbms_assert.enquote_name(refnam) ||
tofrm || dbms_assert.enquote_name(v_grantee);
else
RAISE invalid_reftyp;
end if;
execute immediate qry;
end if;
END LOOP;
EXCEPTION
WHEN invalid_reftyp THEN
ROLLBACK TO grantrevoke_refdbobj;
raise_application_error(-20101, 'Database ' || reftyp ||
' object ' || refnam || ' is not recognized');
WHEN OTHERS THEN
ROLLBACK TO grantrevoke_refdbobj;
raise_application_error(-20100, 'Grant or revoke access of ' ||
'reference db object ' || qry || ' failed');
END;
/
SHOW ERRORS;
------------------------------------ rq$UpdateDSAccess -------------------------
CREATE FUNCTION rq$UpdateDSAccess(
v_owner VARCHAR2,
v_name VARCHAR2,
v_grantee VARCHAR2,
v_type VARCHAR2)
return rqRefDBObjSet
IS
v_revoked VARCHAR2(128) := NULL;
acc_refObjs rqRefDBObjSet := NULL;
v_exists number;
foreign_refs EXCEPTION;
revoke_fail EXCEPTION;
BEGIN
SAVEPOINT start_DSAccess;
IF (v_type = 'REVOKE') THEN
delete from rq$DataStoreAccess
where grantee = v_grantee and dsID IN (
select dsID from rq$DataStore
where dsowner = v_owner and dsname = v_name)
returning dsID into v_revoked;
IF v_revoked IS NULL THEN
RAISE revoke_fail;
END IF;
END IF;
-- check if any refdbobject used by datastore v_name comes from other users
select count(*) into v_exists
from RQ$DATASTORE a, RQ$DATASTOREOBJECT b, RQ$DATASTOREREFDBOBJECT c,
RQ$REFDBOBJECT o
where a.dsowner = v_owner and a.dsname = v_name and
a.dsID = b.dsID and b.objID = c.objID and
c.refobjID = o.refobjID and o.refobjowner != v_owner;
IF v_exists > 0 THEN
RAISE foreign_refs;
END IF;
-- get all of reference objects used by datastore with v_owner and v_name but
-- not yet granted to v_grantee
select rqRefDBObj(o.refobjName, o.refobjType, o.refobjParm)
BULK COLLECT into acc_refObjs
from RQ$DATASTORE a, RQ$DATASTOREOBJECT b, RQ$DATASTOREREFDBOBJECT c,
RQ$REFDBOBJECT o
where a.dsowner = v_owner and a.dsname = v_name and
a.dsID = b.dsID and b.objID = c.objID and o.refobjID = c.refobjID and
c.refobjID NOT IN (
select f.refobjID
from RQ$DATASTOREACCESS d, RQ$DATASTOREOBJECT e, RQ$DATASTOREREFDBOBJECT f
where d.grantee = v_grantee and d.dsID = e.dsID and e.objID = f.objID);
IF (v_type = 'GRANT') THEN
insert into rq$DataStoreAccess (dsID, grantee)
select dsID, v_grantee from rq$DataStore
where dsowner = v_owner and dsname = v_name;
END IF;
return acc_refObjs;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
ROLLBACK TO start_DSAccess;
IF (v_type = 'GRANT') THEN
raise_application_error(-20100, v_owner || ' has already granted ' ||
'datastore ' || v_name || ' to user ' || v_grantee);
ELSE
RAISE;
END IF;
WHEN revoke_fail THEN
ROLLBACK TO start_DSAccess;
raise_application_error(-20100, v_owner || ' did not grant ' ||
'datastore ' || v_name || ' to user ' || v_grantee);
WHEN foreign_refs THEN
ROLLBACK TO start_DSAccess;
raise_application_error(-20100, 'Cannot ' || v_type ||
' privilege for datastore ' || v_name || ' containing ORE objects' ||
' that reference database objects not owned by the current user');
WHEN OTHERS THEN
ROLLBACK TO start_DSAccess;
RAISE;
END;
/
SHOW ERRORS
------------------------------------ rq$GrantRevokeDSImp ----------------------------
--
CREATE PROCEDURE rq$GrantRevokeDSImp(
v_owner VARCHAR2,
v_name VARCHAR2,
v_user VARCHAR2,
v_type VARCHAR2)
AUTHID CURRENT_USER
IS
v_grantee VARCHAR2(128);
v_tabname VARCHAR2(128);
v_refObjs rqRefDBObjSet;
BEGIN
IF (v_user IS NULL) THEN
v_grantee := 'PUBLIC';
ELSE
v_grantee := v_user;
END IF;
v_tabname := rq$getDataStoreTab(v_name);
IF v_tabname = 'RQ$DATASTOREINVENTORY' THEN
raise_application_error(-20100, 'Datastore ''' || v_name ||
''' is not grantable');
END IF;
-- update DataStoreAccess table and
-- return refDBObjects that need to grant or revoke
v_refObjs := rq$UpdateDSAccess(v_owner, v_name, v_grantee, v_type);
-- grant/revoke privilege to/from underlying datastore table
IF (v_type = 'GRANT') THEN
Execute Immediate 'grant select on ' ||
dbms_assert.enquote_name(v_tabname) || ' to ' ||
dbms_assert.enquote_name(v_grantee);
ELSE
Execute Immediate 'revoke select on ' ||
dbms_assert.enquote_name(v_tabname) || ' from ' ||
dbms_assert.enquote_name(v_grantee);
END IF;
IF (v_refObjs IS NOT NULL and v_refObjs.count > 0) THEN
-- grant/revoke access to/from ref objects
rq$GrantRevokeRefDBObjects(v_refObjs, v_grantee, v_type);
END IF;
END;
/
SHOW ERRORS
------------------------------------ rq$UpdateScriptAccess --------------------
--
CREATE PROCEDURE rq$UpdateScriptAccess(
v_owner VARCHAR2,
v_name VARCHAR2,
v_user VARCHAR2,
v_type VARCHAR2)
IS
v_grantee VARCHAR2(128);
v_revoked VARCHAR2(128) := NULL;
BEGIN
IF (v_user IS NULL) THEN
v_grantee := 'PUBLIC';
ELSE
v_grantee := v_user;
END IF;
SAVEPOINT start_ScriptAccess;
IF (v_type = 'GRANT') THEN
-- insert grant entry into access table
insert into sys.rq$scriptAccess
values (v_owner, v_name, v_user);
ELSE
IF (v_user IS NULL) THEN
delete from sys.rq$scriptAccess
where owner = v_owner and name = v_name and grantee IS NULL
returning name into v_revoked;
ELSE
delete from sys.rq$scriptAccess
where owner = v_owner and name = v_name and grantee = v_user
returning name into v_revoked;
END IF;
IF (v_revoked IS NULL) THEN
raise_application_error(-20100, 'User ''' || v_owner ||
''' did not grant access of Script ''' || v_name || ''' to ''' ||
v_grantee || '''');
END IF;
END IF;
COMMIT;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
ROLLBACK TO start_ScriptAccess;
raise_application_error(-20100, 'Access to script ''' ||
v_name || ''' has already been granted to ' || v_grantee);
WHEN OTHERS THEN
ROLLBACK TO start_ScriptAccess;
RAISE;
END;
/
SHOW ERRORS;
------------------------------------ rqGrant ----------------------------------
--
CREATE PROCEDURE rqGrant(
v_name VARCHAR2,
v_type VARCHAR2,
v_user VARCHAR2 default NULL)
AUTHID CURRENT_USER
AS
v_owner VARCHAR2(128);
v_exist number;
BEGIN
v_owner := SYS_CONTEXT('USERENV', 'CURRENT_USER');
-- check if v_user exists
IF v_user IS NOT NULL THEN
select count(*) into v_exist from all_users
where username = v_user;
IF (v_exist = 0) THEN
raise_application_error(-20100, 'User ''' || v_user ||
''' does not exist');
END IF;
END IF;
-- check v_type
IF (v_type != 'datastore' AND v_type != 'rqscript') THEN
raise_application_error(-20100, 'Only ''datastore'' and ''rqscript'' ' ||
'are supported. ''' || v_type || ''' is invalid');
END IF;
-- check current user owns the named script or datastore
IF (v_type = 'rqscript') THEN
select count(*) into v_exist from user_rq_scripts
where name = v_name;
IF v_exist = 0 THEN
-- check if this is global script
select count(*) into v_exist from all_rq_scripts
where owner = 'RQSYS' and name = v_name;
IF v_exist > 0 THEN
raise_application_error(-20100, '''' || v_name ||
''' is a global script');
ELSE
raise_application_error(-20100, 'Script ''' || v_name ||
''' does not exist or does not belong to user ' || v_owner);
END IF;
END IF;
ELSE
select count(*) into v_exist from user_rq_datastores
where dsname = v_name;
IF v_exist = 0 THEN
raise_application_error(-20100, 'Datastore ''' || v_name ||
''' does not exist or does not belong to user ' || v_owner);
END IF;
END IF;
-- check if owner and grantee is same
IF (v_owner = v_user) THEN
raise_application_error(-20100, 'No need grant access of ' ||
case v_type when 'rqscript' then 'script' else v_type end ||
' ''' || v_name || ''' to its owner ' || v_user);
END IF;
-- grant the access privilege
IF (v_type = 'rqscript') THEN
-- insert grant entry into access table
rq$UpdateScriptAccess(v_owner, v_name, v_user, 'GRANT');
ELSE
-- grant underlying table and reference objects if any to v_user
rq$GrantRevokeDSImp(v_owner, v_name, v_user, 'GRANT');
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
RAISE;
END;
/
SHOW ERRORS
------------------------------------ rqRevoke ----------------------------------
--
CREATE PROCEDURE rqRevoke(
v_name VARCHAR2,
v_type VARCHAR2,
v_user VARCHAR2 default NULL)
AUTHID CURRENT_USER
AS
v_owner VARCHAR2(128);
v_exist number;
BEGIN
v_owner := SYS_CONTEXT('USERENV', 'CURRENT_USER');
-- check if v_user exists
IF v_user IS NOT NULL THEN
select count(*) into v_exist from all_users
where username = v_user;
IF (v_exist = 0) THEN
raise_application_error(-20100, 'User ''' || v_user ||
''' does not exist');
END IF;
END IF;
-- check v_type
IF (v_type != 'datastore' AND v_type != 'rqscript') THEN
raise_application_error(-20100, 'Only ''datastore'' and ''rqscript'' ' ||
'are supported. ''' || v_type || ''' is invalid');
END IF;
-- check current user owns the named script or datastore
IF (v_type = 'rqscript') THEN
select count(*) into v_exist from user_rq_scripts
where name = v_name;
IF v_exist = 0 THEN
-- check if this is global script
select count(*) into v_exist from all_rq_scripts
where owner = 'RQSYS' and name = v_name;
IF v_exist > 0 THEN
raise_application_error(-20100, '''' || v_name ||
''' is a global script');
ELSE
raise_application_error(-20100, 'Script ''' || v_name ||
''' does not exist or does not belong to user ''' || v_owner || '''');
END IF;
END IF;
ELSE
select count(*) into v_exist from user_rq_datastores
where dsname = v_name;
IF v_exist = 0 THEN
raise_application_error(-20100, 'Datastore ''' || v_name ||
''' does not exist or does not belong to user ' || v_owner);
END IF;
END IF;
-- check if owner and grantee is same
IF (v_owner = v_user) THEN
raise_application_error(-20100, 'Cannot revoke access of ' ||
case v_type when 'rqscript' then 'script' else v_type end ||
' ''' || v_name || ''' from its owner ''' || v_user || '''');
END IF;
-- Revoke access privilege
IF (v_type = 'rqscript') THEN
-- delete grant entry from access table
rq$UpdateScriptAccess(v_owner, v_name, v_user, 'REVOKE');
ELSE
-- revoke underlying table and reference objects if any from v_user
rq$GrantRevokeDSImp(v_owner, v_name, v_user, 'REVOKE');
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
RAISE;
END;
/
SHOW ERRORS
-- rqDropDataStore calls rqRevoke
CREATE PROCEDURE rqDropDataStore(
ds_name IN VARCHAR2
)
AUTHID CURRENT_USER
IS
ds_owner VARCHAR2(128);
del_objIds rqNumericSet;
del_refIds rqNumericSet;
del_refobjs rqRefDBObjSet;
tabnam VARCHAR2(128);
v_grantees rqCharSet;
BEGIN
ds_owner := SYS_CONTEXT('USERENV', 'CURRENT_USER');
-- get datastore table name
tabnam := rqsys.rq$getDataStoreTab(ds_name);
rq$DropDataStoreImpl(ds_owner, ds_name, del_objIds, del_refIds);
IF del_objIds IS NULL THEN
raise_application_error(-20101, 'DataStore ' ||
ds_name || ' does not exist');
END IF;
if (del_refIds IS NOT NULL and del_refIds.count > 0) then
del_refobjs := rq$DeleteRefDBObjects(del_refIds, ds_owner);
-- drop no-longer referenced db objects
if (del_refobjs IS NOT NULL and del_refobjs.count > 0) then
rq$DropRefDBObjects(del_refobjs);
end if;
end if;
if (tabnam = 'RQ$DATASTOREINVENTORY') then
-- remove from rq$datastoreinventory
execute immediate
'delete from ' || dbms_assert.enquote_name(tabnam) ||
' c where c.objID IN (' ||
'select column_value from table(:del_objIds))' using del_objIds;
else
-- revoke read privilege if granted for datastore ds_name
select grantee BULK COLLECT into v_grantees
from USER_RQ_DATASTORE_PRIVS
where dsname = ds_name;
IF (v_grantees IS NOT NULL and v_grantees.count > 0) THEN
FOR i IN 1..v_grantees.count LOOP
rqRevoke(ds_name, 'datastore', v_grantees(i));
END LOOP;
END IF;
-- drop underlying table and its prvilege grant
execute immediate 'drop table ' || dbms_assert.enquote_name(tabnam);
end if;
COMMIT;
END;
/
SHOW ERRORS;
--***************************************************************************--
--* (*) OBJECT PRIVILEGES *--
--***************************************************************************--
GRANT EXECUTE ON rqObject TO PUBLIC;
GRANT EXECUTE ON rqObjSet TO PUBLIC;
GRANT EXECUTE ON rqXMLObj TO PUBLIC;
GRANT EXECUTE ON rqXMLSet TO PUBLIC;
GRANT EXECUTE ON rqImgObj TO PUBLIC;
GRANT EXECUTE ON rqImgSet TO PUBLIC;
GRANT EXECUTE ON rqCharSet TO PUBLIC;
GRANT EXECUTE ON rqNumericSet TO PUBLIC;
GRANT EXECUTE ON rq$AddDataStore TO PUBLIC;
GRANT EXECUTE ON rq$AddDataStoreObject TO PUBLIC;
GRANT EXECUTE ON rq$AddDataStoreRefDBObject TO PUBLIC;
GRANT EXECUTE ON rq$AddRSessionRefDBObject TO PUBLIC;
GRANT EXECUTE ON rq$GetDataStoreTAB TO PUBLIC;
GRANT EXECUTE ON rqDropDataStore TO PUBLIC;
GRANT EXECUTE ON rqDeleteRObjects TO PUBLIC;
GRANT EXECUTE ON rq$DeleteORERefDBObject TO PUBLIC;
GRANT EXECUTE ON rq$GetRefDBObjectID TO PUBLIC;
GRANT EXECUTE ON rq$OREScriptCreate TO PUBLIC;
GRANT EXECUTE ON rq$OREScriptDrop TO PUBLIC;
GRANT EXECUTE ON rqEvalImpl TO PUBLIC;
GRANT EXECUTE ON rqEval TO PUBLIC;
GRANT EXECUTE ON rqTableEvalImpl TO PUBLIC;
GRANT EXECUTE ON rqTableEval TO PUBLIC;
GRANT EXECUTE ON rqGroupEvalImpl TO PUBLIC;
GRANT EXECUTE ON rqRowEvalImpl TO PUBLIC;
GRANT EXECUTE ON rqRowEval TO PUBLIC;
GRANT EXECUTE ON RQ_ELEM_T TO PUBLIC;
GRANT EXECUTE ON RQ_PARAM_T TO PUBLIC;
GRANT EXECUTE ON rqRFuncEvalChr TO PUBLIC;
GRANT EXECUTE ON rqRFuncEvalNum TO PUBLIC;
GRANT EXECUTE ON rqForeachUpdate to PUBLIC;
GRANT EXECUTE ON rqBesselI TO PUBLIC;
GRANT EXECUTE ON rqBesselK TO PUBLIC;
GRANT EXECUTE ON rqBesselJ TO PUBLIC;
GRANT EXECUTE ON rqBesselY TO PUBLIC;
GRANT EXECUTE ON rqNumericEltSet TO PUBLIC;
GRANT EXECUTE ON rqKstestPexp TO PUBLIC;
GRANT EXECUTE ON rqKstestPnorm TO PUBLIC;
GRANT EXECUTE ON rqKstestPpois TO PUBLIC;
GRANT EXECUTE ON rqKstestPunif TO PUBLIC;
GRANT EXECUTE ON rqKstestPweibull TO PUBLIC;
GRANT EXECUTE ON rqCrossprodImpl TO PUBLIC;
GRANT EXECUTE ON rqCrossprod TO PUBLIC;
GRANT EXECUTE ON rqUnlistTable TO PUBLIC;
GRANT EXECUTE ON rqGamma TO PUBLIC;
GRANT EXECUTE ON rqLgamma TO PUBLIC;
GRANT EXECUTE ON rqDigamma TO PUBLIC;
GRANT EXECUTE ON rqTrigamma TO PUBLIC;
GRANT EXECUTE ON rqErf TO PUBLIC;
GRANT EXECUTE ON rqErfc TO PUBLIC;
GRANT EXECUTE ON rqPbeta TO PUBLIC;
GRANT EXECUTE ON rqQbeta TO PUBLIC;
GRANT EXECUTE ON rqQcauchy TO PUBLIC;
GRANT EXECUTE ON rqPcauchy TO PUBLIC;
GRANT EXECUTE ON rqDchisq TO PUBLIC;
GRANT EXECUTE ON rqPchisq TO PUBLIC;
GRANT EXECUTE ON rqQchisq TO PUBLIC;
GRANT EXECUTE ON rqPexp TO PUBLIC;
GRANT EXECUTE ON rqQexp TO PUBLIC;
GRANT EXECUTE ON rqDgamma TO PUBLIC;
GRANT EXECUTE ON rqQgamma TO PUBLIC;
GRANT EXECUTE ON rqPgamma TO PUBLIC;
GRANT EXECUTE ON rqDnbinom TO PUBLIC;
GRANT EXECUTE ON rqPnbinom TO PUBLIC;
GRANT EXECUTE ON rqQnbinom TO PUBLIC;
GRANT EXECUTE ON rqPnorm TO PUBLIC;
GRANT EXECUTE ON rqQnorm TO PUBLIC;
GRANT EXECUTE ON rqPpois TO PUBLIC;
GRANT EXECUTE ON rqQpois TO PUBLIC;
GRANT EXECUTE ON rqQt TO PUBLIC;
GRANT EXECUTE ON rqPt TO PUBLIC;
GRANT EXECUTE ON rqPweibull TO PUBLIC;
GRANT EXECUTE ON rqQweibull TO PUBLIC;
GRANT EXECUTE ON rqDweibull TO PUBLIC;
GRANT EXECUTE ON rqHarmonic TO PUBLIC;
GRANT EXECUTE ON rqSignP TO PUBLIC;
GRANT EXECUTE ON rqCvmP TO PUBLIC;
GRANT EXECUTE ON rqDcauchy TO PUBLIC;
GRANT EXECUTE ON rqDpois TO PUBLIC;
GRANT EXECUTE ON rqDt TO PUBLIC;
GRANT EXECUTE ON rqDnorm TO PUBLIC;
GRANT EXECUTE ON rqDexp TO PUBLIC;
GRANT EXECUTE ON rqDbeta TO PUBLIC;
GRANT EXECUTE ON rqStepwiseType TO PUBLIC;
GRANT EXECUTE ON rqStepwiseTypeSet TO PUBLIC;
GRANT EXECUTE ON rqStepwiseImpl TO PUBLIC;
GRANT EXECUTE ON rqStepwise TO PUBLIC;
GRANT EXECUTE ON rqNeuralType TO PUBLIC;
GRANT EXECUTE ON rqNeuralTypeSet TO PUBLIC;
GRANT EXECUTE ON rqNeuralImpl TO PUBLIC;
GRANT EXECUTE ON rqNeural TO PUBLIC;
GRANT EXECUTE ON rqDf TO PUBLIC;
GRANT EXECUTE ON rqPf TO PUBLIC;
GRANT EXECUTE ON rqQf TO PUBLIC;
GRANT EXECUTE ON rqDsignrank TO PUBLIC;
GRANT EXECUTE ON rqPsignrank TO PUBLIC;
GRANT EXECUTE ON rqQsignrank TO PUBLIC;
GRANT EXECUTE ON rqDbinom TO PUBLIC;
GRANT EXECUTE ON rqPbinom TO PUBLIC;
GRANT EXECUTE ON rqQbinom TO PUBLIC;
GRANT EXECUTE ON rqGrant TO rqAdmin;
GRANT EXECUTE ON rqRevoke TO rqAdmin;
--***************************************************************************--
--* (*) PUBLIC SYNONYMS *--
--***************************************************************************--
create public synonym rqObject for rqsys.rqObject;
create public synonym rqObjSet for rqsys.rqObjSet;
create public synonym rqXMLObj for rqsys.rqXMLObj;
create public synonym rqXMLSet for rqsys.rqXMLSet;
create public synonym rqImgObj for rqsys.rqImgObj;
create public synonym rqImgSet for rqsys.rqImgSet;
create public synonym rqCharSet for rqsys.rqCharSet;
create public synonym rqNumericSet for rqsys.rqNumericSet;
create public synonym rqGrant for rqsys.rqGrant;
create public synonym rqRevoke for rqsys.rqRevoke;
create public synonym rq$AddDataStore for rqsys.rq$AddDataStore;
create public synonym rq$AddDataStoreObject for rqsys.rq$AddDataStoreObject;
create public synonym rq$AddDataStoreRefDBObject for
rqsys.rq$AddDataStoreRefDBObject;
create public synonym rq$AddRSessionRefDBObject for
rqsys.rq$AddRSessionRefDBObject;
create public synonym rqDropDataStore for rqsys.rqDropDataStore;
create public synonym rqDeleteRObjects for rqsys.rqDeleteRObjects;
create public synonym rq$DeleteORERefDBObject for rqsys.rq$DeleteORERefDBObject;
create public synonym rqEvalImpl for rqsys.rqEvalImpl;
create public synonym rqEval for rqsys.rqEval;
create public synonym rqTableEvalImpl for rqsys.rqTableEvalImpl;
create public synonym rqTableEval for rqsys.rqTableEval;
create public synonym rqGroupEvalImpl for rqsys.rqGroupEvalImpl;
create public synonym rqRowEvalImpl for rqsys.rqRowEvalImpl;
create public synonym rqRowEval for rqsys.rqRowEval;
create public synonym rq_elem_t for rqsys.rq_elem_t;
create public synonym rq_param_t for rqsys.rq_param_t;
create public synonym rqRFuncEvalChr for rqsys.rqRFuncEvalChr;
create public synonym rqRFuncEvalNum for rqsys.rqRFuncEvalNum;
create public synonym rqForeachUpdate for rqsys.rqForeachUpdate;
create public synonym rqBesselI for rqsys.rqBesselI;
create public synonym rqBesselK for rqsys.rqBesselK;
create public synonym rqBesselJ for rqsys.rqBesselJ;
create public synonym rqBesselY for rqsys.rqBesselY;
create public synonym rqNumericEltSet for rqsys.rqNumericEltSet;
create public synonym rqKstestPexp for rqsys.rqKstestPexp;
create public synonym rqKstestPnorm for rqsys.rqKstestPnorm;
create public synonym rqKstestPpois for rqsys.rqKstestPpois;
create public synonym rqKstestPunif for rqsys.rqKstestPunif;
create public synonym rqKstestPweibull for rqsys.rqKstestPweibull;
create public synonym rqCrossprodImpl for rqsys.rqCrossprodImpl;
create public synonym rqCrossprod for rqsys.rqCrossprod;
create public synonym rqUnlistTable for rqsys.rqUnlistTable;
create public synonym rqGamma for rqsys.rqGamma;
create public synonym rqLgamma for rqsys.rqLgamma;
create public synonym rqDigamma for rqsys.rqDigamma;
create public synonym rqTrigamma for rqsys.rqTrigamma;
create public synonym rqErf for rqsys.rqErf;
create public synonym rqErfc for rqsys.rqErfc;
create public synonym rqPbeta for rqsys.rqPbeta;
create public synonym rqQbeta for rqsys.rqQbeta;
create public synonym rqQcauchy for rqsys.rqQcauchy;
create public synonym rqPcauchy for rqsys.rqPcauchy;
create public synonym rqDchisq for rqsys.rqDchisq;
create public synonym rqPchisq for rqsys.rqPchisq;
create public synonym rqQchisq for rqsys.rqQchisq;
create public synonym rqPexp for rqsys.rqPexp;
create public synonym rqQexp for rqsys.rqQexp;
create public synonym rqDf for rqsys.rqDf;
create public synonym rqPf for rqsys.rqPf;
create public synonym rqQf for rqsys.rqQf;
create public synonym rqDgamma for rqsys.rqDgamma;
create public synonym rqQgamma for rqsys.rqQgamma;
create public synonym rqPgamma for rqsys.rqPgamma;
create public synonym rqDnbinom for rqsys.rqDnbinom;
create public synonym rqPnbinom for rqsys.rqPnbinom;
create public synonym rqQnbinom for rqsys.rqQnbinom;
create public synonym rqPnorm for rqsys.rqPnorm;
create public synonym rqQnorm for rqsys.rqQnorm;
create public synonym rqPpois for rqsys.rqPpois;
create public synonym rqQpois for rqsys.rqQpois;
create public synonym rqQt for rqsys.rqQt;
create public synonym rqPt for rqsys.rqPt;
create public synonym rqPweibull for rqsys.rqPweibull;
create public synonym rqQweibull for rqsys.rqQweibull;
create public synonym rqDweibull for rqsys.rqDweibull;
create public synonym rqHarmonic for rqsys.rqHarmonic;
create public synonym rqSignP for rqsys.rqSignP;
create public synonym rqCvmP for rqsys.rqCvmP;
create public synonym rqDcauchy for rqsys.rqDcauchy;
create public synonym rqDpois for rqsys.rqDpois;
create public synonym rqDt for rqsys.rqDt;
create public synonym rqDnorm for rqsys.rqDnorm;
create public synonym rqDexp for rqsys.rqDexp;
create public synonym rqDbeta for rqsys.rqDbeta;
create public synonym rqStepwiseType for rqsys.rqStepwiseType;
create public synonym rqStepwiseTypeSet for rqsys.rqStepwiseTypeSet;
create public synonym rqStepwiseImpl for rqsys.rqStepwiseImpl;
create public synonym rqStepwise for rqsys.rqStepwise;
create public synonym rqNeuralType for rqsys.rqNeuralType;
create public synonym rqNeuralTypeSet for rqsys.rqNeuralTypeSet;
create public synonym rqNeuralImpl for rqsys.rqNeuralImpl;
create public synonym rqNeural for rqsys.rqNeural;
create public synonym rqPsignrank for rqsys.rqPsignrank;
create public synonym rqQsignrank for rqsys.rqQsignrank;
create public synonym rqDsignrank for rqsys.rqDsignrank;
create public synonym rqDbinom for rqsys.rqDbinom;
create public synonym rqPbinom for rqsys.rqPbinom;
create public synonym rqQbinom for rqsys.rqQbinom;
--***************************************************************************--
--* end of file rqproc.sql *--
--***************************************************************************--
OHA YOOOO