This post is also available in:
English
Oracle October 2020 Critical Patch Advisory changed objects performed by each database patch.
For more details and the catalog, check the main post: Dissecting 201020 BP, PSU, RU and RUR
What exactly changed for each?
(click to see detailed line changes)
- 11.2.0.4
- 12.1.0.2
- DVSYS.DBMS_MACADM – PACKAGE BODY 12cR1 (PSU)
- DVSYS.DBMS_MACADM – PACKAGE BODY 12cR1 (BP)
- DVSYS.DBMS_MACOLS – PACKAGE BODY 12cR1 (PSU)
- DVSYS.DBMS_MACOLS – PACKAGE BODY 12cR1 (BP)
- DVSYS.DBMS_MACSEC – PACKAGE BODY 12cR1 (BP)
- DVSYS.DBMS_MACSEC – PACKAGE BODY 12cR1 (PSU)
- DVSYS.DBMS_MACSEC_ROLES – PACKAGE BODY 12cR1 (BP)
- DVSYS.DBMS_MACUTL – PACKAGE BODY 12cR1 (PSU)
- DVSYS.DBMS_MACUTL – PACKAGE BODY 12cR1 (BP)
- DVSYS.FACTOR_TYPE$_PRIV – PACKAGE BODY 12cR1 (PSU)
- SYS.DBMS_RCVMAN – PACKAGE 12cR1 (BP)
- SYS.DBMS_RCVMAN – PACKAGE 12cR1 (PSU)
- SYS.DBMS_RCVMAN – PACKAGE BODY 12cR1 (PSU)
- SYS.DBMS_RCVMAN – PACKAGE BODY 12cR1 (BP)
- SYS.DBMS_SQLPATCH – PACKAGE BODY 12cR1 (BP)
- SYS.DBMS_STATS – PACKAGE BODY 12cR1 (BP)
- 12.2.0.1
- CTXSYS.DRVDML – PACKAGE 12cR2 (RU)
- CTXSYS.DRVDML – PACKAGE BODY 12cR2 (RU)
- DVSYS.DVLANG – FUNCTION 12cR2 (RU & JUL2020RUR & APR2020RUR)
- DVSYS.DBMS_MACADM – PACKAGE BODY 12cR2 (RU & JUL2020RUR)
- DVSYS.DBMS_MACADM – PACKAGE BODY 12cR2 (APR2020RUR)
- DVSYS.DBMS_MACOLS – PACKAGE BODY 12cR2 (RU & JUL2020RUR & APR2020RUR)
- DVSYS.DBMS_MACOLS_SESSION – PACKAGE BODY 12cR2 (RU & JUL2020RUR & APR2020RUR)
- DVSYS.DBMS_MACSEC – PACKAGE BODY 12cR2 (RU & JUL2020RUR & APR2020RUR)
- DVSYS.DBMS_MACSEC_RULES – PACKAGE BODY 12cR2 (RU & JUL2020RUR & APR2020RUR)
- DVSYS.DBMS_MACUTL – PACKAGE BODY 12cR2 (RU & JUL2020RUR & APR2020RUR)
- DVSYS.EVENT – PACKAGE BODY 12cR2 (RU & JUL2020RUR & APR2020RUR)
- DVSYS.DBA_DV_STATUS – VIEW 12cR2 (RU & JUL2020RUR & APR2020RUR)
- DVSYS.DBA_DV_USER_PRIVS_ALL – VIEW 12cR2 (RU & JUL2020RUR & APR2020RUR)
- SYS.DBMS_SNAPSHOT_KKXRCA – PACKAGE BODY 12cR2 (RU)
- SYS.DBMS_SQLPATCH – PACKAGE BODY 12cR2 (RU)
- SYS.DBMS_STATS – PACKAGE BODY 12cR2 (RU)
- SYS.DBMS_FEATURE_ACTIVE_DATA_GUARD – PROCEDURE 12cR2 (RU)
- 18.0.0.0
- SYS.DBMS_BACKUP_RESTORE – PACKAGE 18c (18.10RUR)
- SYS.DBMS_BACKUP_RESTORE – PACKAGE 18c (RU)
- SYS.DBMS_BACKUP_RESTORE – PACKAGE 18c (18.11RUR)
- SYS.DBMS_REGISTRY – PACKAGE 18c (18.11RUR)
- SYS.DBMS_REGISTRY – PACKAGE 18c (RU)
- SYS.DBMS_REGISTRY – PACKAGE 18c (18.10RUR)
- SYS.DBMS_RCVMAN – PACKAGE BODY 18c (RU)
- SYS.DBMS_RCVMAN – PACKAGE BODY 18c (18.10RUR)
- SYS.DBMS_RCVMAN – PACKAGE BODY 18c (18.11RUR)
- SYS.DBMS_SNAPSHOT_KKXRCA – PACKAGE BODY 18c (RU)
- SYS.DBMS_STATS – PACKAGE BODY 18c (RU)
- 19.0.0.0
- DBSFWUSER.DBMS_SFW_ACL_ADMIN – PACKAGE BODY 19c (RU)
- MDSYS.SDO_RDF_INTERNAL – PACKAGE BODY 19c (RU)
- SYS.DBMS_BACKUP_RESTORE – PACKAGE 19c (19.7RUR)
- SYS.DBMS_BACKUP_RESTORE – PACKAGE 19c (19.8RUR)
- SYS.DBMS_BACKUP_RESTORE – PACKAGE 19c (RU)
- SYS.DBMS_CRYPTO – PACKAGE 19c (RU)
- SYS.DBMS_CRYPTO_FFI – PACKAGE 19c (RU)
- SYS.DBMS_JSON0 – PACKAGE 19c (RU)
- SYS.DBMS_PARALLEL_EXECUTE_INTERNAL – PACKAGE 19c (RU)
- SYS.DBMS_REGISTRY – PACKAGE 19c (19.8RUR)
- SYS.DBMS_REGISTRY – PACKAGE 19c (19.7RUR)
- SYS.DBMS_REGISTRY – PACKAGE 19c (RU)
- SYS.DBMS_RULE_IMP_OBJ – PACKAGE 19c (RU)
- SYS.DBMS_SODA – PACKAGE 19c (RU)
- SYS.DBMS_SODA_UTIL – PACKAGE 19c (RU)
- SYS.DBMS_SPM_INTERNAL – PACKAGE 19c (RU & 19.8RUR)
- SYS.PRVTEMX_PERF – PACKAGE 19c (RU)
- SYS.DBMS_AUTO_INDEX_INTERNAL – PACKAGE BODY 19c (RU & 19.8RUR)
- SYS.DBMS_CRYPTO – PACKAGE BODY 19c (RU)
- SYS.DBMS_CRYPTO_FFI – PACKAGE BODY 19c (RU)
- SYS.DBMS_ISCHED – PACKAGE BODY 19c (RU)
- SYS.DBMS_JSON0 – PACKAGE BODY 19c (RU)
- SYS.DBMS_PARALLEL_EXECUTE – PACKAGE BODY 19c (RU)
- SYS.DBMS_PARALLEL_EXECUTE_INTERNAL – PACKAGE BODY 19c (RU)
- SYS.DBMS_RCVMAN – PACKAGE BODY 19c (19.7RUR)
- SYS.DBMS_RCVMAN – PACKAGE BODY 19c (19.8RUR)
- SYS.DBMS_RCVMAN – PACKAGE BODY 19c (RU)
- SYS.DBMS_RULE_IMP_OBJ – PACKAGE BODY 19c (RU)
- SYS.DBMS_SNAPSHOT_KKXRCA – PACKAGE BODY 19c (RU)
- SYS.DBMS_SODA – PACKAGE BODY 19c (RU)
- SYS.DBMS_SODA_UTIL – PACKAGE BODY 19c (RU)
- SYS.DBMS_SPM – PACKAGE BODY 19c (RU & 19.8RUR)
- SYS.DBMS_SPM_INTERNAL – PACKAGE BODY 19c (RU & 19.8RUR)
- SYS.DBMS_STATS – PACKAGE BODY 19c (RU)
- SYS.DBMS_XPLAN – PACKAGE BODY 19c (RU)
- SYS.PRVTEMX_ADMIN – PACKAGE BODY 19c (RU)
- SYS.PRVTEMX_PERF – PACKAGE BODY 19c (RU)
- SYS.STANDARD – PACKAGE BODY 19c (RU)
- SYS.DBMS_FEATURE_UNIFIED_AUDIT – PROCEDURE 19c (RU)
- SYS.SODA_COLLECTION_T – TYPE 19c (RU)
- SYS.SODA_OPERATION_T – TYPE 19c (RU)
- SYS.SODA_COLLECTION_T – TYPE BODY 19c (RU)
- SYS.SODA_OPERATION_T – TYPE BODY 19c (RU)
- SYS.WRI$_REPT_SESSION – TYPE BODY 19c (RU)
- SYS.DBA_PARALLEL_EXECUTE_CHUNKS – VIEW 19c (RU)
- SYS.DBA_PARALLEL_EXECUTE_TASKS – VIEW 19c (RU)
- XDB.DBMS_JSON – PACKAGE 19c (RU)
- XDB.DBMS_JSON_INT – PACKAGE 19c (RU)
- XDB.DBMS_SODA_ADMIN – PACKAGE 19c (RU)
- XDB.DBMS_SODA_DML – PACKAGE 19c (RU)
- XDB.DBMS_SODA_DOM – PACKAGE 19c (RU)
- XDB.DBMS_JSON – PACKAGE BODY 19c (RU)
- XDB.DBMS_JSON_INT – PACKAGE BODY 19c (RU)
- XDB.DBMS_SODA_ADMIN – PACKAGE BODY 19c (RU)
- XDB.DBMS_SODA_DML – PACKAGE BODY 19c (RU)
- XDB.DBMS_SODA_DOM – PACKAGE BODY 19c (RU)
Changed Objects
P.S:
> = Added Lines
< = Removed Lines
11.2.0.4
272c272,274 < ROWNUM-1 as tbspNum, -- + tsn_kpdbts --- > ROWNUM-1 as newTbspNum, -- + tsn_kpdbts > -- bug 31506720: but to fetch datafile info, we need to use real ts# > ts# as tbspNum, 1045c1047 < appendDataNode(doc, tbsNode, 'tsn', tablespaces(ts).tbspInfo.tbspNum); --- > appendDataNode(doc, tbsNode, 'tsn', tablespaces(ts).tbspInfo.newTbspNum);
12.1.0.2
27c27 < V_XSL_XMLTYPE XMLTYPE; --- > V_XSL_XMLTYPE SYS.XMLTYPE; 37c37 < P_XSL IN XMLTYPE) IS --- > P_XSL IN SYS.XMLTYPE) IS 42,43c42,43 < V_DLF_XMLTYPE XMLTYPE; < V_CONTEXT DBMS_XMLSTORE.CTXTYPE; --- > V_DLF_XMLTYPE SYS.XMLTYPE; > V_CONTEXT SYS.DBMS_XMLSTORE.CTXTYPE; 59c59 < V_DLF_XMLTYPE := XMLTYPE.CREATEXML(XMLDATA=>V_DLF_BLOB, CSID=>NULL, SCHEMA=>NULL); --- > V_DLF_XMLTYPE := SYS.XMLTYPE.CREATEXML(XMLDATA=>V_DLF_BLOB, CSID=>NULL, SCHEMA=>NULL); 61,63c61,63 < V_CONTEXT := DBMS_XMLSTORE.NEWCONTEXT(P_TABLE_OWNER||'.'||V_TABLE_NAME); < DBMS_XMLSTORE.SETROWTAG(V_CONTEXT, 'ROW'); < V_ROWS := DBMS_XMLSTORE.INSERTXML(V_CONTEXT, --- > V_CONTEXT := SYS.DBMS_XMLSTORE.NEWCONTEXT(P_TABLE_OWNER||'.'||V_TABLE_NAME); > SYS.DBMS_XMLSTORE.SETROWTAG(V_CONTEXT, 'ROW'); > V_ROWS := SYS.DBMS_XMLSTORE.INSERTXML(V_CONTEXT, 65c65 < DBMS_XMLSTORE.CLOSECONTEXT(V_CONTEXT); --- > SYS.DBMS_XMLSTORE.CLOSECONTEXT(V_CONTEXT); 120c120 < SELECT PLATFORM_ID INTO V_PFID FROM V$DATABASE; --- > SELECT PLATFORM_ID INTO V_PFID FROM SYS.V_$DATABASE; 138c138 < V_XSL_XMLTYPE := XMLTYPE.CREATEXML(XMLDATA=>V_XSL_BLOB, CSID=>NULL, SCHEMA=>NULL); --- > V_XSL_XMLTYPE := SYS.XMLTYPE.CREATEXML(XMLDATA=>V_XSL_BLOB, CSID=>NULL, SCHEMA=>NULL); 1994,1995d1993 < < 2299c2297 < ADD_RULE_TO_RULE_SET ( RULE_SET_NAME,RULE_NAME,RULE_ORDER,DVSYS.DBMS_MACUTL.G_YES); --- > ADD_RULE_TO_RULE_SET (RULE_SET_NAME,RULE_NAME,RULE_ORDER,DVSYS.DBMS_MACUTL.G_YES);
27c27 < V_XSL_XMLTYPE XMLTYPE; --- > V_XSL_XMLTYPE SYS.XMLTYPE; 37c37 < P_XSL IN XMLTYPE) IS --- > P_XSL IN SYS.XMLTYPE) IS 42,43c42,43 < V_DLF_XMLTYPE XMLTYPE; < V_CONTEXT DBMS_XMLSTORE.CTXTYPE; --- > V_DLF_XMLTYPE SYS.XMLTYPE; > V_CONTEXT SYS.DBMS_XMLSTORE.CTXTYPE; 59c59 < V_DLF_XMLTYPE := XMLTYPE.CREATEXML(XMLDATA=>V_DLF_BLOB, CSID=>NULL, SCHEMA=>NULL); --- > V_DLF_XMLTYPE := SYS.XMLTYPE.CREATEXML(XMLDATA=>V_DLF_BLOB, CSID=>NULL, SCHEMA=>NULL); 61,63c61,63 < V_CONTEXT := DBMS_XMLSTORE.NEWCONTEXT(P_TABLE_OWNER||'.'||V_TABLE_NAME); < DBMS_XMLSTORE.SETROWTAG(V_CONTEXT, 'ROW'); < V_ROWS := DBMS_XMLSTORE.INSERTXML(V_CONTEXT, --- > V_CONTEXT := SYS.DBMS_XMLSTORE.NEWCONTEXT(P_TABLE_OWNER||'.'||V_TABLE_NAME); > SYS.DBMS_XMLSTORE.SETROWTAG(V_CONTEXT, 'ROW'); > V_ROWS := SYS.DBMS_XMLSTORE.INSERTXML(V_CONTEXT, 65c65 < DBMS_XMLSTORE.CLOSECONTEXT(V_CONTEXT); --- > SYS.DBMS_XMLSTORE.CLOSECONTEXT(V_CONTEXT); 120c120 < SELECT PLATFORM_ID INTO V_PFID FROM V$DATABASE; --- > SELECT PLATFORM_ID INTO V_PFID FROM SYS.V_$DATABASE; 138c138 < V_XSL_XMLTYPE := XMLTYPE.CREATEXML(XMLDATA=>V_XSL_BLOB, CSID=>NULL, SCHEMA=>NULL); --- > V_XSL_XMLTYPE := SYS.XMLTYPE.CREATEXML(XMLDATA=>V_XSL_BLOB, CSID=>NULL, SCHEMA=>NULL); 1994,1995d1993 < < 2299,2300c2297,2298 < ADD_RULE_TO_RULE_SET ( RULE_SET_NAME,RULE_NAME,RULE_ORDER,DVSYS.DBMS_MACUTL.G_YES); < END; --- > ADD_RULE_TO_RULE_SET (RULE_SET_NAME,RULE_NAME,RULE_ORDER,DVSYS.DBMS_MACUTL.G_YES); > END;
85c85 < LABEL_IND = DBMS_MACUTL.G_YES) --- > LABEL_IND = DVSYS.DBMS_MACUTL.G_YES) 107,109c107,109 < L_LABEL := NUMERIC_LABEL_TO_CHAR < (SA_UTL.MERGE_LABEL < (LABEL1 => CHAR_TO_LABEL(POLICY_NAME => L_POLICY, --- > L_LABEL := LBACSYS.NUMERIC_LABEL_TO_CHAR > (LBACSYS.SA_UTL.MERGE_LABEL > (LABEL1 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => L_POLICY, 111c111 < LABEL2 => CHAR_TO_LABEL(POLICY_NAME => L_POLICY, --- > LABEL2 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => L_POLICY, 238c238 < L_SESSION_LABEL := SA_SESSION.LABEL(POLICY_NAME => POLICY.POL_NAME); --- > L_SESSION_LABEL := LBACSYS.SA_SESSION.LABEL(POLICY_NAME => POLICY.POL_NAME); 275,277c275,277 < L_MAC_LABEL := NUMERIC_LABEL_TO_CHAR < (SA_UTL.MERGE_LABEL < (LABEL1 => CHAR_TO_LABEL(POLICY_NAME => POLICY.POL_NAME, --- > L_MAC_LABEL := LBACSYS.NUMERIC_LABEL_TO_CHAR > (LBACSYS.SA_UTL.MERGE_LABEL > (LABEL1 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => POLICY.POL_NAME, 279c279 < LABEL2 => CHAR_TO_LABEL(POLICY_NAME => POLICY.POL_NAME, --- > LABEL2 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => POLICY.POL_NAME, 290c290 < SA_UTL.DOMINATES(LABEL1 => CHAR_TO_LABEL(POLICY_NAME => POLICY.POL_NAME, --- > LBACSYS.SA_UTL.DOMINATES(LABEL1 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => POLICY.POL_NAME, 292c292 < LABEL2 => CHAR_TO_LABEL(POLICY_NAME => POLICY.POL_NAME, --- > LABEL2 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => POLICY.POL_NAME, 296,298c296,298 < L_SESSION_LABEL := NUMERIC_LABEL_TO_CHAR < (SA_UTL.MERGE_LABEL < (LABEL1 => CHAR_TO_LABEL(POLICY_NAME => POLICY.POL_NAME, --- > L_SESSION_LABEL := LBACSYS.NUMERIC_LABEL_TO_CHAR > (LBACSYS.SA_UTL.MERGE_LABEL > (LABEL1 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => POLICY.POL_NAME, 300c300 < LABEL2 => CHAR_TO_LABEL(POLICY_NAME => POLICY.POL_NAME, --- > LABEL2 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => POLICY.POL_NAME, 391c391 < DBMS_SESSION.SET_CONTEXT(NAMESPACE => DBMS_MACUTL.G_CONTEXT_SESSION_LABEL || --- > SYS.DBMS_SESSION.SET_CONTEXT(NAMESPACE => DBMS_MACUTL.G_CONTEXT_SESSION_LABEL ||
85c85 < LABEL_IND = DBMS_MACUTL.G_YES) --- > LABEL_IND = DVSYS.DBMS_MACUTL.G_YES) 107,109c107,109 < L_LABEL := NUMERIC_LABEL_TO_CHAR < (SA_UTL.MERGE_LABEL < (LABEL1 => CHAR_TO_LABEL(POLICY_NAME => L_POLICY, --- > L_LABEL := LBACSYS.NUMERIC_LABEL_TO_CHAR > (LBACSYS.SA_UTL.MERGE_LABEL > (LABEL1 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => L_POLICY, 111c111 < LABEL2 => CHAR_TO_LABEL(POLICY_NAME => L_POLICY, --- > LABEL2 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => L_POLICY, 238c238 < L_SESSION_LABEL := SA_SESSION.LABEL(POLICY_NAME => POLICY.POL_NAME); --- > L_SESSION_LABEL := LBACSYS.SA_SESSION.LABEL(POLICY_NAME => POLICY.POL_NAME); 275,277c275,277 < L_MAC_LABEL := NUMERIC_LABEL_TO_CHAR < (SA_UTL.MERGE_LABEL < (LABEL1 => CHAR_TO_LABEL(POLICY_NAME => POLICY.POL_NAME, --- > L_MAC_LABEL := LBACSYS.NUMERIC_LABEL_TO_CHAR > (LBACSYS.SA_UTL.MERGE_LABEL > (LABEL1 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => POLICY.POL_NAME, 279c279 < LABEL2 => CHAR_TO_LABEL(POLICY_NAME => POLICY.POL_NAME, --- > LABEL2 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => POLICY.POL_NAME, 290c290 < SA_UTL.DOMINATES(LABEL1 => CHAR_TO_LABEL(POLICY_NAME => POLICY.POL_NAME, --- > LBACSYS.SA_UTL.DOMINATES(LABEL1 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => POLICY.POL_NAME, 292c292 < LABEL2 => CHAR_TO_LABEL(POLICY_NAME => POLICY.POL_NAME, --- > LABEL2 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => POLICY.POL_NAME, 296,298c296,298 < L_SESSION_LABEL := NUMERIC_LABEL_TO_CHAR < (SA_UTL.MERGE_LABEL < (LABEL1 => CHAR_TO_LABEL(POLICY_NAME => POLICY.POL_NAME, --- > L_SESSION_LABEL := LBACSYS.NUMERIC_LABEL_TO_CHAR > (LBACSYS.SA_UTL.MERGE_LABEL > (LABEL1 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => POLICY.POL_NAME, 300c300 < LABEL2 => CHAR_TO_LABEL(POLICY_NAME => POLICY.POL_NAME, --- > LABEL2 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => POLICY.POL_NAME,
315,317c315,317 < L_NAMESPACE SESSION_CONTEXT.NAMESPACE%TYPE; < L_ATTRIBUTE SESSION_CONTEXT.ATTRIBUTE%TYPE; < L_VALUE SESSION_CONTEXT.VALUE%TYPE; --- > L_NAMESPACE SYS.SESSION_CONTEXT.NAMESPACE%TYPE; > L_ATTRIBUTE SYS.SESSION_CONTEXT.ATTRIBUTE%TYPE; > L_VALUE SYS.SESSION_CONTEXT.VALUE%TYPE; 319c319 < L_NAME FACTOR$.NAME%TYPE; --- > L_NAME DVSYS.FACTOR$.NAME%TYPE; 323c323 < L_FACTOR_NAME FACTOR$.NAME%TYPE; --- > L_FACTOR_NAME DVSYS.FACTOR$.NAME%TYPE;
315,317c315,317 < L_NAMESPACE SESSION_CONTEXT.NAMESPACE%TYPE; < L_ATTRIBUTE SESSION_CONTEXT.ATTRIBUTE%TYPE; < L_VALUE SESSION_CONTEXT.VALUE%TYPE; --- > L_NAMESPACE SYS.SESSION_CONTEXT.NAMESPACE%TYPE; > L_ATTRIBUTE SYS.SESSION_CONTEXT.ATTRIBUTE%TYPE; > L_VALUE SYS.SESSION_CONTEXT.VALUE%TYPE; 319c319 < L_NAME FACTOR$.NAME%TYPE; --- > L_NAME DVSYS.FACTOR$.NAME%TYPE; 323c323 < L_FACTOR_NAME FACTOR$.NAME%TYPE; --- > L_FACTOR_NAME DVSYS.FACTOR$.NAME%TYPE;
67c67 < DBMS_SESSION.SET_ROLE(L_TO_BE_SET); --- > SYS.DBMS_SESSION.SET_ROLE(L_TO_BE_SET);
217c217 < FROM V$OPTION --- > FROM SYS.V_$OPTION 551,552c551,552 < DOMAIN IN ROLE_ARRAY DEFAULT NULL, < DOMAIN_STR IN ROLENAME_ARRAY DEFAULT NULL) --- > DOMAIN IN SYS.ROLE_ARRAY DEFAULT NULL, > DOMAIN_STR IN SYS.ROLENAME_ARRAY DEFAULT NULL) 616d615 < 904,905c903,904 < C IN (SELECT ATTRIBUTE, VALUE FROM SESSION_CONTEXT < WHERE NAMESPACE = DBMS_MACUTL.G_CONTEXT_FACTOR) --- > C IN (SELECT ATTRIBUTE, VALUE FROM SYS.SESSION_CONTEXT > WHERE NAMESPACE = DVSYS.DBMS_MACUTL.G_CONTEXT_FACTOR) 988c987 < FROM V$OPTION --- > FROM SYS.V_$OPTION
217c217 < FROM V$OPTION --- > FROM SYS.V_$OPTION 551,552c551,552 < DOMAIN IN ROLE_ARRAY DEFAULT NULL, < DOMAIN_STR IN ROLENAME_ARRAY DEFAULT NULL) --- > DOMAIN IN SYS.ROLE_ARRAY DEFAULT NULL, > DOMAIN_STR IN SYS.ROLENAME_ARRAY DEFAULT NULL) 905c905 < WHERE NAMESPACE = DBMS_MACUTL.G_CONTEXT_FACTOR) --- > WHERE NAMESPACE = DVSYS.DBMS_MACUTL.G_CONTEXT_FACTOR) 988c988 < FROM V$OPTION --- > FROM SYS.V_$OPTION
85c85 < DBMS_MACADM.GET_ORA_LANG LANG FROM DUAL) B --- > DBMS_MACADM.GET_ORA_LANG LANG FROM SYS.DUAL) B
3503a3504,3505 > PROCEDURE setSkipOfflineRangeAboveSCN(maxCheckpointSCN IN NUMBER); >
3494a3495,3496 > PROCEDURE setSkipOfflineRangeAboveSCN(maxCheckpointSCN IN NUMBER); >
187a188,200 > > > > > > > > > SKIPOFFLINERANGEABOVESCN NUMBER := NULL; > > > > 11457a11471,11476 > END IF; > > IF (ACTION.TYPE_CON = OFFLINERANGEREC_CON_T AND > (FROMSCN > SKIPOFFLINERANGEABOVESCN OR > TOSCN > SKIPOFFLINERANGEABOVESCN)) THEN > RETURN ACTION_SKIP; 29364a29384,29392 > > > PROCEDURE SETSKIPOFFLINERANGEABOVESCN(MAXCHECKPOINTSCN IN NUMBER) > IS > BEGIN > DEB(DEB_ENTER, 'setSkipOfflineRangeAboveSCN'); > SKIPOFFLINERANGEABOVESCN := MAXCHECKPOINTSCN; > DEB(DEB_EXIT); > END SETSKIPOFFLINERANGEABOVESCN;
176a177,189 > > > > > > > > > SKIPOFFLINERANGEABOVESCN NUMBER := NULL; > > > > 11408a11422,11427 > END IF; > > IF (ACTION.TYPE_CON = OFFLINERANGEREC_CON_T AND > (FROMSCN > SKIPOFFLINERANGEABOVESCN OR > TOSCN > SKIPOFFLINERANGEABOVESCN)) THEN > RETURN ACTION_SKIP; 29157a29177,29185 > > > PROCEDURE SETSKIPOFFLINERANGEABOVESCN(MAXCHECKPOINTSCN IN NUMBER) > IS > BEGIN > DEB(DEB_ENTER, 'setSkipOfflineRangeAboveSCN'); > SKIPOFFLINERANGEABOVESCN := MAXCHECKPOINTSCN; > DEB(DEB_EXIT); > END SETSKIPOFFLINERANGEABOVESCN;
33a34,36
> USE_ROLLBACK_FILES BOOLEAN := FALSE;
>
>
786,790c789,841
< IF CURRENT_PATCH.ACTION = 'APPLY' THEN
< RETURN OH_SQL_FILE;
< ELSE
< RETURN ROLLBACK_SQL_FILE;
< END IF;
---
> IF CURRENT_PATCH_DESCRIPTOR IS NULL THEN
>
> IF CURRENT_PATCH.ACTION = 'APPLY' THEN
> DEBUG_PUT_LINE(' NO descriptor available; action APPLY, pick from OH');
> RETURN OH_SQL_FILE;
> ELSE
> DEBUG_PUT_LINE(' NO descriptor available; action ROLLBACK, pick from rollback_files');
> RETURN ROLLBACK_SQL_FILE;
> END IF;
> ELSE
>
> BEGIN
> SELECT F_NEW INTO FILE_NEW
> FROM XMLTABLE(
> '/sqlPatch/sqlFiles/file'
> PASSING CURRENT_PATCH_DESCRIPTOR
> COLUMNS F_NAME VARCHAR2(256) PATH 'normalize-space(.)',
> F_ACTION VARCHAR2(20) PATH '@mode',
> F_NEW VARCHAR2(3) PATH '@new')
> WHERE F_NAME = SQL_FILE
> AND UPPER(F_ACTION) LIKE '%' || CURRENT_PATCH.ACTION || '%';
> EXCEPTION
> WHEN NO_DATA_FOUND THEN
>
>
> RAISE_APPLICATION_ERROR(-20000, 'File ' || SQL_FILE ||
> ' does not exist in descriptor ');
> END;
>
> DEBUG_PUT_LINE('file new? : ' || FILE_NEW);
>
> IF CURRENT_PATCH.ACTION = 'APPLY' THEN
> DEBUG_PUT_LINE(' descriptor available; action APPLY, pick from OH');
> RETURN OH_SQL_FILE;
> ELSE
> IF FILE_NEW = 'yes' THEN
>
> DEBUG_PUT_LINE(' descriptor available; action ROLLBACK, new file, pick from rollback_files');
> RETURN ROLLBACK_SQL_FILE;
> ELSE
> IF USE_ROLLBACK_FILES THEN
>
> DEBUG_PUT_LINE(' descriptor available; action ROLLBACK, existing file, use_rollback_files is true; pick from rollback_files');
> RETURN ROLLBACK_SQL_FILE;
> ELSE
>
> DEBUG_PUT_LINE(' descriptor available; action ROLLBACK, existing file, pick from OH');
> RETURN OH_SQL_FILE;
> END IF;
> END IF;
> END IF;
> END IF;
>
1043c1094,1095
< P_DEBUG IN BOOLEAN := FALSE) IS
---
> P_DEBUG IN BOOLEAN := FALSE,
> P_USE_ROLLBACK_FILES IN BOOLEAN := FALSE) IS
1048a1101
> USE_ROLLBACK_FILES := P_USE_ROLLBACK_FILES;
33725a33726,33727 > > STSFLAGS := 0; 34752c34754 < (PREPARESTATJOBS OR SEQSTATJOBS) AND --- > (PREPARESTATJOBS OR SEQSTATJOBS OR EXECUTESTATJOBS) AND 34760a34763,34770 > > > > > > > >
12.2.0.1
113c113,115 < p_rids in varchar2 --- > p_rids in varchar2, > p_utab in varchar2, > p_pname in varchar2
352c352,354
< P_RIDS IN VARCHAR2
---
> P_RIDS IN VARCHAR2,
> P_UTAB IN VARCHAR2,
> P_PNAME IN VARCHAR2
366a369,385
>
> IF P_UTAB IS NOT NULL THEN
> IF P_PNAME IS NOT NULL THEN
> FORALL I IN 1..RIDCOUNT
> EXECUTE IMMEDIATE
> 'delete from '||DBMS_ASSERT.QUALIFIED_SQL_NAME(P_UTAB)||
> ' partition ('||DBMS_ASSERT.SIMPLE_SQL_NAME(P_PNAME)||')'||
> ' where rid = :1'
> USING RIDS(I);
> ELSE
> FORALL I IN 1..RIDCOUNT
> EXECUTE IMMEDIATE
> 'delete from '||DBMS_ASSERT.QUALIFIED_SQL_NAME(P_UTAB)||
> ' where rid = :1'
> USING RIDS(I);
> END IF;
> END IF;
385a405,410
> FOUND BOOLEAN := TRUE;
> IDX DR_DEF.IDX_REC;
> IXP DR_DEF.IXP_REC;
> UTAB DRVUTL.DR_QLID2 := NULL;
> PNAME DRVUTL.DR_QLID := NULL;
> L_IXPID NUMBER := P_IXPID;
391a417,433
> IF DRIXMD.CHKINDEXOPTION(P_IDXID, 'u') = 1 THEN
> IDX := DRIXMD.GETINDEXRECBYID(P_IDXID);
> IF (P_IXPID != 0) THEN
> IXP := DRIXMD.GETPARTITIONRECBYID(P_IXPID, P_IDXID);
> END IF;
>
> IF (P_IXPID != 0 AND IDX.IDX_TYPE = DRIXMD.IDX_TYPE_CONTEXT2) THEN
> L_IXPID := NULL;
> PNAME := DBMS_ASSERT.SIMPLE_SQL_NAME(IXP.IXP_NAME);
> END IF;
>
> UTAB := DBMS_ASSERT.QUALIFIED_SQL_NAME(
> DRVXTAB.GET_OBJECT_NAME(IDX.IDX_OWNER, IDX.IDX_NAME,
> IDX.IDX_ID, L_IXPID, 'U'));
> END IF;
>
>
411a454
> FOUND := TRUE;
414,415c457
< DRIDML.DELETEPENDING(P_IDXID, P_IXPID, C1.PND_ROWID);
< COMMIT;
---
> FOUND := FALSE;
419,420c461
< DRIDML.DELETEPENDING(P_IDXID, P_IXPID, C1.PND_ROWID);
< COMMIT;
---
> FOUND := FALSE;
424,425c465
< DRIDML.DELETEPENDING(P_IDXID, P_IXPID, C1.PND_ROWID);
< COMMIT;
---
> FOUND := FALSE;
430a471,489
>
>
> IF NOT FOUND THEN
> DRIDML.DELETEPENDING(P_IDXID, P_IXPID, C1.PND_ROWID);
>
> IF UTAB IS NOT NULL THEN
> IF PNAME IS NOT NULL THEN
> EXECUTE IMMEDIATE
> 'delete from '||UTAB||' partition ('||PNAME||') where rid = :1'
> USING C1.PND_ROWID;
> ELSE
> EXECUTE IMMEDIATE
> 'delete from '||UTAB||' where rid = :1'
> USING C1.PND_ROWID;
> END IF;
> END IF;
>
> COMMIT;
> END IF;
25c25 < sys.dbms_sql.parse( l_cursor, l_stmt, dbms_sql.native ); --- > sys.dbms_sql.parse( l_cursor, l_stmt, sys.dbms_sql.native );
1031,1032c1031,1032 < ADD_AUTH_TO_REALM(REALM_NAME, GRANTEE, NULL, DBMS_MACUTL.G_REALM_AUTH_PARTICIPANT, < DBMS_MACUTL.G_SCOPE_LOCAL); --- > ADD_AUTH_TO_REALM(REALM_NAME, GRANTEE, NULL, DVSYS.DBMS_MACUTL.G_REALM_AUTH_PARTICIPANT, > DVSYS.DBMS_MACUTL.G_SCOPE_LOCAL); 1041c1041 < DBMS_MACUTL.G_SCOPE_LOCAL); --- > DVSYS.DBMS_MACUTL.G_SCOPE_LOCAL); 1049,1050c1049,1050 < ADD_AUTH_TO_REALM(REALM_NAME, GRANTEE, RULE_SET_NAME, DBMS_MACUTL.G_REALM_AUTH_PARTICIPANT, < DBMS_MACUTL.G_SCOPE_LOCAL); --- > ADD_AUTH_TO_REALM(REALM_NAME, GRANTEE, RULE_SET_NAME, DVSYS.DBMS_MACUTL.G_REALM_AUTH_PARTICIPANT, > DVSYS.DBMS_MACUTL.G_SCOPE_LOCAL); 1365c1365 < ADD_RULE_TO_RULE_SET (RULE_SET_NAME,RULE_NAME,RULE_ORDER,DBMS_MACUTL.G_YES); --- > ADD_RULE_TO_RULE_SET (RULE_SET_NAME,RULE_NAME,RULE_ORDER,DVSYS.DBMS_MACUTL.G_YES); 1394c1394 < ADD_RULE_TO_RULE_SET ( RULE_SET_NAME,RULE_NAME,L_RULE_ORDER,DBMS_MACUTL.G_YES); --- > ADD_RULE_TO_RULE_SET ( RULE_SET_NAME,RULE_NAME,L_RULE_ORDER,DVSYS.DBMS_MACUTL.G_YES);
1031,1032c1031,1032 < ADD_AUTH_TO_REALM(REALM_NAME, GRANTEE, NULL, DBMS_MACUTL.G_REALM_AUTH_PARTICIPANT, < DBMS_MACUTL.G_SCOPE_LOCAL); --- > ADD_AUTH_TO_REALM(REALM_NAME, GRANTEE, NULL, DVSYS.DBMS_MACUTL.G_REALM_AUTH_PARTICIPANT, > DVSYS.DBMS_MACUTL.G_SCOPE_LOCAL); 1041c1041 < DBMS_MACUTL.G_SCOPE_LOCAL); --- > DVSYS.DBMS_MACUTL.G_SCOPE_LOCAL); 1049,1050c1049,1050 < ADD_AUTH_TO_REALM(REALM_NAME, GRANTEE, RULE_SET_NAME, DBMS_MACUTL.G_REALM_AUTH_PARTICIPANT, < DBMS_MACUTL.G_SCOPE_LOCAL); --- > ADD_AUTH_TO_REALM(REALM_NAME, GRANTEE, RULE_SET_NAME, DVSYS.DBMS_MACUTL.G_REALM_AUTH_PARTICIPANT, > DVSYS.DBMS_MACUTL.G_SCOPE_LOCAL); 1365c1365 < ADD_RULE_TO_RULE_SET (RULE_SET_NAME,RULE_NAME,RULE_ORDER,DBMS_MACUTL.G_YES); --- > ADD_RULE_TO_RULE_SET (RULE_SET_NAME,RULE_NAME,RULE_ORDER,DVSYS.DBMS_MACUTL.G_YES); 1394c1394 < ADD_RULE_TO_RULE_SET ( RULE_SET_NAME,RULE_NAME,L_RULE_ORDER,DBMS_MACUTL.G_YES); --- > ADD_RULE_TO_RULE_SET ( RULE_SET_NAME,RULE_NAME,L_RULE_ORDER,DVSYS.DBMS_MACUTL.G_YES);
85c85 < LABEL_IND = DBMS_MACUTL.G_YES) --- > LABEL_IND = DVSYS.DBMS_MACUTL.G_YES) 107,109c107,109 < L_LABEL := NUMERIC_LABEL_TO_CHAR < (SA_UTL.MERGE_LABEL < (LABEL1 => CHAR_TO_LABEL(POLICY_NAME => L_POLICY, --- > L_LABEL := LBACSYS.NUMERIC_LABEL_TO_CHAR > (LBACSYS.SA_UTL.MERGE_LABEL > (LABEL1 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => L_POLICY, 111c111 < LABEL2 => CHAR_TO_LABEL(POLICY_NAME => L_POLICY, --- > LABEL2 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => L_POLICY, 238c238 < L_SESSION_LABEL := SA_SESSION.LABEL(POLICY_NAME => POLICY.POL_NAME); --- > L_SESSION_LABEL := LBACSYS.SA_SESSION.LABEL(POLICY_NAME => POLICY.POL_NAME); 275,277c275,277 < L_MAC_LABEL := NUMERIC_LABEL_TO_CHAR < (SA_UTL.MERGE_LABEL < (LABEL1 => CHAR_TO_LABEL(POLICY_NAME => POLICY.POL_NAME, --- > L_MAC_LABEL := LBACSYS.NUMERIC_LABEL_TO_CHAR > (LBACSYS.SA_UTL.MERGE_LABEL > (LABEL1 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => POLICY.POL_NAME, 279c279 < LABEL2 => CHAR_TO_LABEL(POLICY_NAME => POLICY.POL_NAME, --- > LABEL2 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => POLICY.POL_NAME, 290c290 < SA_UTL.DOMINATES(LABEL1 => CHAR_TO_LABEL(POLICY_NAME => POLICY.POL_NAME, --- > LBACSYS.SA_UTL.DOMINATES(LABEL1 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => POLICY.POL_NAME, 292c292 < LABEL2 => CHAR_TO_LABEL(POLICY_NAME => POLICY.POL_NAME, --- > LABEL2 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => POLICY.POL_NAME, 296,298c296,298 < L_SESSION_LABEL := NUMERIC_LABEL_TO_CHAR < (SA_UTL.MERGE_LABEL < (LABEL1 => CHAR_TO_LABEL(POLICY_NAME => POLICY.POL_NAME, --- > L_SESSION_LABEL := LBACSYS.NUMERIC_LABEL_TO_CHAR > (LBACSYS.SA_UTL.MERGE_LABEL > (LABEL1 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => POLICY.POL_NAME, 300c300 < LABEL2 => CHAR_TO_LABEL(POLICY_NAME => POLICY.POL_NAME, --- > LABEL2 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => POLICY.POL_NAME, 312c312 < SYS.DBMS_SESSION.SET_CONTEXT(NAMESPACE => DBMS_MACUTL.G_CONTEXT_SESSION_LABEL || --- > SYS.DBMS_SESSION.SET_CONTEXT(NAMESPACE => DVSYS.DBMS_MACUTL.G_CONTEXT_SESSION_LABEL || 314c314 < ATTRIBUTE => DBMS_MACUTL.G_USER_POLICY_LABEL, --- > ATTRIBUTE => DVSYS.DBMS_MACUTL.G_USER_POLICY_LABEL, 318c318 < SYS.DBMS_SESSION.SET_CONTEXT(NAMESPACE => DBMS_MACUTL.G_CONTEXT_SESSION_LABEL || --- > SYS.DBMS_SESSION.SET_CONTEXT(NAMESPACE => DVSYS.DBMS_MACUTL.G_CONTEXT_SESSION_LABEL || 320c320 < ATTRIBUTE => DBMS_MACUTL.G_MIN_POLICY_LABEL, --- > ATTRIBUTE => DVSYS.DBMS_MACUTL.G_MIN_POLICY_LABEL, 323c323 < SYS.DBMS_SESSION.SET_CONTEXT(NAMESPACE => DBMS_MACUTL.G_CONTEXT_SESSION_LABEL || --- > SYS.DBMS_SESSION.SET_CONTEXT(NAMESPACE => DVSYS.DBMS_MACUTL.G_CONTEXT_SESSION_LABEL || 325c325 < ATTRIBUTE => DBMS_MACUTL.G_MAX_SESSION_LABEL, --- > ATTRIBUTE => DVSYS.DBMS_MACUTL.G_MAX_SESSION_LABEL, 329c329 < SYS.DBMS_SESSION.SET_CONTEXT(NAMESPACE => DBMS_MACUTL.G_CONTEXT_SESSION_LABEL || --- > SYS.DBMS_SESSION.SET_CONTEXT(NAMESPACE => DVSYS.DBMS_MACUTL.G_CONTEXT_SESSION_LABEL || 331c331 < ATTRIBUTE => DBMS_MACUTL.G_OLS_SESSION_LABEL, --- > ATTRIBUTE => DVSYS.DBMS_MACUTL.G_OLS_SESSION_LABEL,
65c65 < L_POLICY_LABEL := CHAR_TO_LABEL(POLICY_NAME,LABEL); --- > L_POLICY_LABEL := LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME,LABEL); 81c81 < L_RESULT := DOMINATES(LABEL1=>CHAR_TO_LABEL(POLICY_NAME,L_MAX_SESSION_LABEL), --- > L_RESULT := LBACSYS.NUMERIC_DOMINATES(LABEL1=>LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME,L_MAX_SESSION_LABEL), 136c136 < DBMS_MACUTL.G_MAX_SESSION_LABEL || '=' || --- > DVSYS.DBMS_MACUTL.G_MAX_SESSION_LABEL || '=' || 183c183 < SA_UTL.DOMINATES(LABEL1 => CHAR_TO_LABEL(POLICY_NAME => POLICY.POL_NAME, --- > LBACSYS.SA_UTL.DOMINATES(LABEL1 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => POLICY.POL_NAME, 185c185 < LABEL2 => CHAR_TO_LABEL(POLICY_NAME => POLICY.POL_NAME, --- > LABEL2 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => POLICY.POL_NAME, 189,191c189,191 < X_SESSION_LABEL := NUMERIC_LABEL_TO_CHAR < (SA_UTL.MERGE_LABEL < (LABEL1 => CHAR_TO_LABEL(POLICY_NAME => POLICY.POL_NAME, --- > X_SESSION_LABEL := LBACSYS.NUMERIC_LABEL_TO_CHAR > (LBACSYS.SA_UTL.MERGE_LABEL > (LABEL1 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => POLICY.POL_NAME, 193c193 < LABEL2 => CHAR_TO_LABEL(POLICY_NAME => POLICY.POL_NAME, --- > LABEL2 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => POLICY.POL_NAME, 224c224 < L_SESSION_LABEL := SA_SESSION.LABEL(POLICY_NAME); --- > L_SESSION_LABEL := LBACSYS.SA_SESSION.LABEL(POLICY_NAME); 234,235c234,235 < (STRICTLY_DOMINATES(LABEL1=>CHAR_TO_LABEL(POLICY_NAME,L_SESSION_LABEL), < LABEL2=>CHAR_TO_LABEL(POLICY_NAME,P_MAX_SESSION_LABEL)) = 1) THEN --- > (LBACSYS.NUMERIC_STRICTLY_DOMINATES(LABEL1=>LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME,L_SESSION_LABEL), > LABEL2=>LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME,P_MAX_SESSION_LABEL)) = 1) THEN 243,245c243,245 < X_NEW_SESSION_LABEL := NUMERIC_LABEL_TO_CHAR < (SA_UTL.MERGE_LABEL < (LABEL1 => CHAR_TO_LABEL(POLICY_NAME => POLICY_NAME, --- > X_NEW_SESSION_LABEL := LBACSYS.NUMERIC_LABEL_TO_CHAR > (LBACSYS.SA_UTL.MERGE_LABEL > (LABEL1 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => POLICY_NAME, 247c247 < LABEL2 => CHAR_TO_LABEL(POLICY_NAME => POLICY_NAME, --- > LABEL2 => LBACSYS.TO_NUMERIC_LABEL(POLICY_NAME => POLICY_NAME,
296c296 < (NVL(L_RULE_SET.FAIL_OPTIONS, DBMS_MACUTL.G_RULESET_FAIL_SHOW) = --- > (NVL(L_RULE_SET.FAIL_OPTIONS, DVSYS.DBMS_MACUTL.G_RULESET_FAIL_SHOW) = 315,317c315,317 < L_NAMESPACE SESSION_CONTEXT.NAMESPACE%TYPE; < L_ATTRIBUTE SESSION_CONTEXT.ATTRIBUTE%TYPE; < L_VALUE SESSION_CONTEXT.VALUE%TYPE; --- > L_NAMESPACE SYS.SESSION_CONTEXT.NAMESPACE%TYPE; > L_ATTRIBUTE SYS.SESSION_CONTEXT.ATTRIBUTE%TYPE; > L_VALUE SYS.SESSION_CONTEXT.VALUE%TYPE; 319c319 < L_NAME FACTOR$.NAME%TYPE; --- > L_NAME DVSYS.FACTOR$.NAME%TYPE; 323c323 < L_FACTOR_NAME FACTOR$.NAME%TYPE; --- > L_FACTOR_NAME DVSYS.FACTOR$.NAME%TYPE;
50c50
< L_SQL_COUNT := ORA_SQL_TXT(L_SQL_LIST);
---
> L_SQL_COUNT := SYS.SQL_TXT(L_SQL_LIST);
56,62c56,62
< DVSYS.EVENT.SET(P_SYSEVENT => ORA_SYSEVENT,
< P_LOGIN_USER => ORA_LOGIN_USER,
< P_INSTANCE_NUM => ORA_INSTANCE_NUM,
< P_DATABASE_NAME => ORA_DATABASE_NAME,
< P_DICT_OBJ_TYPE => ORA_DICT_OBJ_TYPE,
< P_DICT_OBJ_OWNER => ORA_DICT_OBJ_OWNER,
< P_DICT_OBJ_NAME => ORA_DICT_OBJ_NAME,
---
> DVSYS.EVENT.SET(P_SYSEVENT => SYS.SYSEVENT,
> P_LOGIN_USER => SYS.LOGIN_USER,
> P_INSTANCE_NUM => SYS.INSTANCE_NUM,
> P_DATABASE_NAME => SYS.DATABASE_NAME,
> P_DICT_OBJ_TYPE => SYS.DICTIONARY_OBJ_TYPE,
> P_DICT_OBJ_OWNER => SYS.DICTIONARY_OBJ_OWNER,
> P_DICT_OBJ_NAME => SYS.DICTIONARY_OBJ_NAME,
107c107
< OUT.PL(' Command=' || ORA_SYSEVENT || ' RuleSet_ID=' || P_RSET_ID#
---
> OUT.PL(' Command=' || SYS.SYSEVENT || ' RuleSet_ID=' || P_RSET_ID#
109,111c109,111
< OUT.PL(' Current_User=' || ORA_LOGIN_USER);
< OUT.PL(' Object_Owner=' || ORA_DICT_OBJ_OWNER || ' Object_Name=' ||
< ORA_DICT_OBJ_NAME || ' Object_Type=' || ORA_DICT_OBJ_TYPE);
---
> OUT.PL(' Current_User=' || SYS.LOGIN_USER);
> OUT.PL(' Object_Owner=' || SYS.DICTIONARY_OBJ_OWNER || ' Object_Name=' ||
> SYS.DICTIONARY_OBJ_NAME || ' Object_Type=' || SYS.DICTIONARY_OBJ_TYPE);
217c217 < FROM V$OPTION --- > FROM SYS.V_$OPTION 551,552c551,552 < DOMAIN IN ROLE_ARRAY DEFAULT NULL, < DOMAIN_STR IN ROLENAME_ARRAY DEFAULT NULL) --- > DOMAIN IN SYS.ROLE_ARRAY DEFAULT NULL, > DOMAIN_STR IN SYS.ROLENAME_ARRAY DEFAULT NULL) 626c626 < L_OK := DBMS_MACUTL.ALTER_SYSTEM_DUMP_ALLOWED; --- > L_OK := DVSYS.DBMS_MACUTL.ALTER_SYSTEM_DUMP_ALLOWED; 970,971c970,971 < C IN (SELECT ATTRIBUTE, VALUE FROM SESSION_CONTEXT < WHERE NAMESPACE = DBMS_MACUTL.G_CONTEXT_FACTOR) --- > C IN (SELECT ATTRIBUTE, VALUE FROM SYS.SESSION_CONTEXT > WHERE NAMESPACE = DVSYS.DBMS_MACUTL.G_CONTEXT_FACTOR) 1054c1054 < FROM V$OPTION --- > FROM SYS.V_$OPTION
57,58c57,58 < dvsys.event.set(ORA_SYSEVENT, ORA_LOGIN_USER, ORA_INSTANCE_NUM, ORA_DATABASE_NAME, < ORA_DICT_OBJ_TYPE, ORA_DICT_OBJ_OWNER, ORA_DICT_OBJ_NAME, ''); --- > dvsys.event.set(SYS.SYSEVENT, SYS.LOGIN_USER, SYS.INSTANCE_NUM, SYS.DATABASE_NAME, > SYS.DICTIONARY_OBJ_TYPE, SYS.DICTIONARY_OBJ_OWNER, SYS.DICTIONARY_OBJ_NAME, '');
6c6 < from v$option --- > from sys.v_$option
12c12 < table_privilege_map tpm --- > sys.table_privilege_map tpm
294a295 > CVAL INTEGER; 300a302 > 329,331c331,338 < INSERT INTO SYS.MVREF$_RUN_STATS( < RUN_OWNER_USER#, REFRESH_ID, NUM_MVS_TOTAL, < NUM_MVS_CURRENT, ROLLBACK_SEG, ATOMIC_REFRESH, --- > SELECT COLLECTION_LEVEL INTO CVAL > FROM SYS.MVREF$_STATS_SYS_DEFAULTS > FETCH FIRST ROW ONLY; > > IF ( CVAL <> 0 ) THEN > INSERT INTO SYS.MVREF$_RUN_STATS( > RUN_OWNER_USER#, REFRESH_ID, NUM_MVS_TOTAL, > NUM_MVS_CURRENT, ROLLBACK_SEG, ATOMIC_REFRESH, 336,343c343,351 < VALUES ( < RUN_OWNER1, REFRESH_ID1, SNAPCNT, < SNAPCNT, ROLLBACK_SEG1, ATOMIC_REFRESH2, < NULL, NULL, NULL, NULL, NULL, < 'Y', 0, 0, 0, < MV_LIST_BUF, METHOD1, PUSH_DEFERRED_RPC2, OUT_OF_PLACE2, NESTED2, < REFRESH_AFTER_ERRORS2, PURGE_OPTION1, PARALLELISM1, HEAP_SIZE1); < --- > VALUES ( > RUN_OWNER1, REFRESH_ID1, SNAPCNT, > SNAPCNT, ROLLBACK_SEG1, ATOMIC_REFRESH2, > NULL, NULL, NULL, NULL, NULL, > 'Y', 0, 0, 0, > MV_LIST_BUF, METHOD1, PUSH_DEFERRED_RPC2, OUT_OF_PLACE2, NESTED2, > REFRESH_AFTER_ERRORS2, PURGE_OPTION1, PARALLELISM1, HEAP_SIZE1); > END IF; >
322c322 < RETURN '$Header: rdbms/src/server/dict/plsicds/prvtsqlpatch.sql /st_rdbms_12.2.0.1.0dbbp/5 2018/12/18 08:17:21 sanagara Exp $'; --- > RETURN '$Header: rdbms/src/server/dict/plsicds/prvtsqlpatch.sql /st_rdbms_12.2.0.1.0dbbp/6 2020/07/08 07:45:37 apfwkr Exp $'; 764,765c764,766 < SELECT F_COMPONENT < INTO FILE_COMPONENT --- > BEGIN > SELECT F_COMPONENT, F_NEW > INTO FILE_COMPONENT, FILE_NEW 768a770,771 > F_ACTION VARCHAR2(20) PATH '@mode', > F_NEW VARCHAR2(3) PATH '@new', 770c773,781 < WHERE F_NAME = SQL_FILE; --- > WHERE F_NAME = SQL_FILE > AND UPPER(F_ACTION) LIKE '%' || CURRENT_PATCH.ACTION || '%'; > EXCEPTION > WHEN NO_DATA_FOUND THEN > > > RAISE_APPLICATION_ERROR(-20000, 'File ' || SQL_FILE || > ' does not exist in descriptor ' || SQLERRM); > END; 778c789,795 < RETURN ROLLBACK_SQL_FILE; --- > IF FILE_NEW = 'yes' THEN > > RETURN ROLLBACK_SQL_FILE; > ELSE > > RETURN OH_SQL_FILE; > END IF;
35380a35381,35382 > > STSFLAGS := 0; 36425,36426c36427,36428 < (PREPARESTATJOBS OR SEQSTATJOBS) AND < NOT DBMS_STATS_INTERNAL.IS_TEMP_TAB(NULL, NULL, TOBJN, TRANS_GTT)) --- > (PREPARESTATJOBS OR SEQSTATJOBS OR EXECUTESTATJOBS) AND > NOT DBMS_STATS_INTERNAL.IS_TEMP_TAB(NULL, NULL, TOBJN, TRANS_GTT)) 36433d36434 < 36436c36437,36444 < --- > > > > > > > >
64c64,65 < 'where (PARENT_DBUN not in ' || --- > 'where (DEST_ROLE != ''LOGICAL STANDBY'') ' || > 'and (PARENT_DBUN not in ' ||
18.0.0.0
12c12
< bannerVersion CONSTANT VARCHAR2(15) := '18.11.00.00';
---
> bannerVersion CONSTANT VARCHAR2(15) := '18.12.00.00';
24,26c24,26
< fsn CONSTANT NUMBER := instr('18.11.00.00', '.');
< msn CONSTANT NUMBER := instr('18.11.00.00', '.', fsn + 1);
< psn CONSTANT NUMBER := instr('18.11.00.00', '.', msn + 1);
---
> fsn CONSTANT NUMBER := instr('18.12.00.00', '.');
> msn CONSTANT NUMBER := instr('18.12.00.00', '.', fsn + 1);
> psn CONSTANT NUMBER := instr('18.12.00.00', '.', msn + 1);
29c29
< to_number(substr('18.11.00.00', 1, fsn - 1));
---
> to_number(substr('18.12.00.00', 1, fsn - 1));
31c31
< to_number(substr('18.11.00.00', fsn + 1, msn - fsn - 1));
---
> to_number(substr('18.12.00.00', fsn + 1, msn - fsn - 1));
33c33
< to_number(substr('18.11.00.00', msn + 1, psn - msn - 1));
---
> to_number(substr('18.12.00.00', msn + 1, psn - msn - 1));
35c35
< to_number(substr('18.11.00.00', psn + 1));
---
> to_number(substr('18.12.00.00', psn + 1));
12c12
< bannerVersion CONSTANT VARCHAR2(15) := '18.10.01.00';
---
> bannerVersion CONSTANT VARCHAR2(15) := '18.10.02.00';
24,26c24,26
< fsn CONSTANT NUMBER := instr('18.10.01.00', '.');
< msn CONSTANT NUMBER := instr('18.10.01.00', '.', fsn + 1);
< psn CONSTANT NUMBER := instr('18.10.01.00', '.', msn + 1);
---
> fsn CONSTANT NUMBER := instr('18.10.02.00', '.');
> msn CONSTANT NUMBER := instr('18.10.02.00', '.', fsn + 1);
> psn CONSTANT NUMBER := instr('18.10.02.00', '.', msn + 1);
29c29
< to_number(substr('18.10.01.00', 1, fsn - 1));
---
> to_number(substr('18.10.02.00', 1, fsn - 1));
31c31
< to_number(substr('18.10.01.00', fsn + 1, msn - fsn - 1));
---
> to_number(substr('18.10.02.00', fsn + 1, msn - fsn - 1));
33c33
< to_number(substr('18.10.01.00', msn + 1, psn - msn - 1));
---
> to_number(substr('18.10.02.00', msn + 1, psn - msn - 1));
35c35
< to_number(substr('18.10.01.00', psn + 1));
---
> to_number(substr('18.10.02.00', psn + 1));
12c12
< bannerVersion CONSTANT VARCHAR2(15) := '18.11.00.00';
---
> bannerVersion CONSTANT VARCHAR2(15) := '18.11.01.00';
24,26c24,26
< fsn CONSTANT NUMBER := instr('18.11.00.00', '.');
< msn CONSTANT NUMBER := instr('18.11.00.00', '.', fsn + 1);
< psn CONSTANT NUMBER := instr('18.11.00.00', '.', msn + 1);
---
> fsn CONSTANT NUMBER := instr('18.11.01.00', '.');
> msn CONSTANT NUMBER := instr('18.11.01.00', '.', fsn + 1);
> psn CONSTANT NUMBER := instr('18.11.01.00', '.', msn + 1);
29c29
< to_number(substr('18.11.00.00', 1, fsn - 1));
---
> to_number(substr('18.11.01.00', 1, fsn - 1));
31c31
< to_number(substr('18.11.00.00', fsn + 1, msn - fsn - 1));
---
> to_number(substr('18.11.01.00', fsn + 1, msn - fsn - 1));
33c33
< to_number(substr('18.11.00.00', msn + 1, psn - msn - 1));
---
> to_number(substr('18.11.01.00', msn + 1, psn - msn - 1));
35c35
< to_number(substr('18.11.00.00', psn + 1));
---
> to_number(substr('18.11.01.00', psn + 1));
13c13 < '18.11.0.0.0'; --- > '18.12.0.0.0';
13c13 < '18.11.0.0.0'; --- > '18.11.1.0.0';
13c13 < '18.10.1.0.0'; --- > '18.10.2.0.0';
122c122 < CATALOGVERSION CONSTANT VARCHAR2(11) := '18.11.00.00'; --- > CATALOGVERSION CONSTANT VARCHAR2(11) := '18.12.00.00';
122c122 < CATALOGVERSION CONSTANT VARCHAR2(11) := '18.10.01.00'; --- > CATALOGVERSION CONSTANT VARCHAR2(11) := '18.10.02.00';
122c122 < CATALOGVERSION CONSTANT VARCHAR2(11) := '18.11.00.00'; --- > CATALOGVERSION CONSTANT VARCHAR2(11) := '18.11.01.00';
297a298 > CVAL INTEGER; 303a305 > 332,334c334,341 < INSERT INTO SYS.MVREF$_RUN_STATS( < RUN_OWNER_USER#, REFRESH_ID, NUM_MVS_TOTAL, < NUM_MVS_CURRENT, ROLLBACK_SEG, ATOMIC_REFRESH, --- > SELECT COLLECTION_LEVEL INTO CVAL > FROM SYS.MVREF$_STATS_SYS_DEFAULTS > FETCH FIRST ROW ONLY; > > IF ( CVAL <> 0 ) THEN > INSERT INTO SYS.MVREF$_RUN_STATS( > RUN_OWNER_USER#, REFRESH_ID, NUM_MVS_TOTAL, > NUM_MVS_CURRENT, ROLLBACK_SEG, ATOMIC_REFRESH, 340,347c347,355 < VALUES ( < RUN_OWNER1, REFRESH_ID1, SNAPCNT, < SNAPCNT, ROLLBACK_SEG1, ATOMIC_REFRESH2, < NULL, NULL, NULL, NULL, NULL, < 'Y', 0, 0, 0, < MV_LIST_BUF, METHOD1, PUSH_DEFERRED_RPC2, OUT_OF_PLACE2, NESTED2, < REFRESH_AFTER_ERRORS2, PURGE_OPTION1, PARALLELISM1, HEAP_SIZE1); < --- > VALUES ( > RUN_OWNER1, REFRESH_ID1, SNAPCNT, > SNAPCNT, ROLLBACK_SEG1, ATOMIC_REFRESH2, > NULL, NULL, NULL, NULL, NULL, > 'Y', 0, 0, 0, > MV_LIST_BUF, METHOD1, PUSH_DEFERRED_RPC2, OUT_OF_PLACE2, NESTED2, > REFRESH_AFTER_ERRORS2, PURGE_OPTION1, PARALLELISM1, HEAP_SIZE1); > END IF; >
37240a37241,37242 > > STSFLAGS := 0; 38333c38335 < (PREPARESTATJOBS OR SEQSTATJOBS) AND --- > (PREPARESTATJOBS OR SEQSTATJOBS OR EXECUTESTATJOBS) AND 38341d38342 < 38344c38345,38352 < --- > > > > > > > >
19.0.0.0
7a8,10
>
> TYPE XS_ACE_LIST IS TABLE OF XS$ACE_TYPE;
>
25a29,37
> FUNCTION KSACL_ISPERCONACLENABLED RETURN BOOLEAN;
> PRAGMA INTERFACE (C, KSACL_ISPERCONACLENABLED);
>
> FUNCTION KSACL_ISFEATUREENABLED RETURN BOOLEAN;
> PRAGMA INTERFACE (C, KSACL_ISFEATUREENABLED);
>
> FUNCTION KSACL_ISACLEXISTINROOT(SVC IN VARCHAR2) RETURN BOOLEAN;
> PRAGMA INTERFACE (C, KSACL_ISACLEXISTINROOT);
>
109c121
< PROCEDURE XS_APPEND_ACE(ACES IN OUT NOCOPY XS$ACE_LIST,
---
> PROCEDURE XS_APPEND_ACE(ACES IN OUT NOCOPY XS_ACE_LIST,
125c137,138
< ACES XS$ACE_LIST := XS$ACE_LIST();
---
> ACES XS_ACE_LIST := XS_ACE_LIST();
> BATCH XS$ACE_LIST := XS$ACE_LIST();
152a166,167
>
>
154c169,184
< SYS.XS_ACL.APPEND_ACES(XS_FULL_NAME(ACL_OWNER, ACL_NAME), ACES);
---
> FOR ACE_ORDER IN 1 .. ACES.COUNT LOOP
> BATCH.EXTEND;
> BATCH(BATCH.LAST) := ACES(ACE_ORDER);
> IF MOD(ACE_ORDER, (BATCH.LIMIT - 1)) = 0 THEN
>
> SYS.XS_ACL.APPEND_ACES(XS_FULL_NAME(ACL_OWNER, ACL_NAME), BATCH);
>
>
> BATCH := XS$ACE_LIST();
> END IF;
> END LOOP;
>
>
> IF (BATCH.COUNT > 0) THEN
> SYS.XS_ACL.APPEND_ACES(XS_FULL_NAME(ACL_OWNER, ACL_NAME), BATCH);
> END IF;
314,315c344
< PROCEDURE CHECK_CDBROOT
< AS
---
> FUNCTION IN_PDB RETURN BOOLEAN IS
324c353,355
< RAISE_APPLICATION_ERROR(-20012, 'Must run in CDB$ROOT container');
---
> RETURN TRUE;
> ELSE
> RETURN FALSE;
325a357,358
> ELSE
> RETURN FALSE;
332d364
< CHECK_CDBROOT;
340d371
< CHECK_CDBROOT;
352d382
< CHECK_CDBROOT;
361d390
< CHECK_CDBROOT;
387d415
< CHECK_CDBROOT;
452d479
< CHECK_CDBROOT;
494d520
< CHECK_CDBROOT;
516d541
< CHECK_CDBROOT;
540d564
< CHECK_CDBROOT;
565d588
< CHECK_CDBROOT;
587d609
< CHECK_CDBROOT;
600d621
< CHECK_CDBROOT;
614d634
< CHECK_CDBROOT;
631d650
< CHECK_CDBROOT;
645d663
< CHECK_CDBROOT;
678d695
< CHECK_CDBROOT;
691d707
< CHECK_CDBROOT;
708d723
< CHECK_CDBROOT;
724d738
< CHECK_CDBROOT;
744d757
< CHECK_CDBROOT;
764d776
< CHECK_CDBROOT;
782d793
< CHECK_CDBROOT;
796a808,895
> PROCEDURE IP_VALIDATE_SVC(
> P_SVC_NAME IN VARCHAR2,
> REMOVE_OP IN BOOLEAN DEFAULT FALSE
> )
> AS
> FOUND NUMBER := 0;
> CON_ID NUMBER := 0;
> ACL_FOUND NUMBER := 0;
> DB_DOMAIN VARCHAR2(1024);
> Q_SVC_NAME VARCHAR2(512);
> BEGIN
> IF (NOT KSACL_ISFEATUREENABLED) THEN
> RAISE_APPLICATION_ERROR(-20018, 'Feature NOT enabled');
> END IF;
>
> IF P_SVC_NAME IS NULL THEN
> RAISE_APPLICATION_ERROR(-20003, 'Service is missing');
> END IF;
>
> SELECT INSTR(P_SVC_NAME, '.') INTO FOUND FROM DUAL;
> IF FOUND = 0 THEN
> SELECT VALUE INTO DB_DOMAIN FROM SYS.V_$PARAMETER WHERE
> LOWER(NAME) = 'db_domain';
> IF DB_DOMAIN IS NOT NULL THEN
> Q_SVC_NAME := P_SVC_NAME || '.' || DB_DOMAIN;
> ELSE
> Q_SVC_NAME := P_SVC_NAME;
> END IF;
> ELSE
> Q_SVC_NAME := P_SVC_NAME;
> END IF;
>
> IF IN_PDB() THEN
> IF (NOT KSACL_ISPERCONACLENABLED) THEN
> RAISE_APPLICATION_ERROR(-20015, 'Per-Container ACL is not enabled');
> END IF;
>
> IF (KSACL_ISACLEXISTINROOT(Q_SVC_NAME)) THEN
> RAISE_APPLICATION_ERROR(-20017,
> 'Service ACL ' || Q_SVC_NAME ||
> ' Already Exists in ROOT container');
> END IF;
>
> BEGIN
> SELECT 1 INTO FOUND FROM DUAL
> WHERE UPPER(P_SVC_NAME) IN (SELECT UPPER(NAME) FROM SYS.SERVICE$);
> EXCEPTION
> WHEN NO_DATA_FOUND THEN NULL;
> END;
>
> IF (FOUND = 0 AND NOT REMOVE_OP) THEN
> BEGIN
> SELECT 1 INTO FOUND FROM DUAL
> WHERE UPPER(P_SVC_NAME) IN (SELECT UPPER(NAME) FROM SYS.SERVICE$);
> EXCEPTION
> WHEN NO_DATA_FOUND THEN
> RAISE_APPLICATION_ERROR(-20014,
> 'Service ' || P_SVC_NAME || ' not found in current container');
> END;
> END IF;
> ELSE
> IF (KSACL_ISPERCONACLENABLED) THEN
> BEGIN
> SELECT CON_ID# INTO CON_ID FROM SYS.CDB_SERVICE$
> WHERE UPPER(NAME) = UPPER(P_SVC_NAME);
> EXCEPTION
> WHEN NO_DATA_FOUND THEN NULL;
> END;
>
> IF (CON_ID = 0) THEN
> BEGIN
> SELECT CON_ID# INTO CON_ID FROM SYS.CDB_SERVICE$
> WHERE UPPER(NAME) = UPPER(Q_SVC_NAME);
> EXCEPTION
> WHEN NO_DATA_FOUND THEN
> RAISE_APPLICATION_ERROR(-20014,
> 'Service ' || P_SVC_NAME || ' not found in current container');
> END;
> END IF;
>
> IF (CON_ID <> 1) THEN
> RAISE_APPLICATION_ERROR(-20016,
> 'Cross-container ACL operation is disabled');
> END IF;
> END IF;
> END IF;
> END;
>
804d902
< CHECK_CDBROOT;
805a904
> IP_VALIDATE_SVC(P_SERVICE_NAME);
843c942
< CHECK_CDBROOT;
---
> IP_VALIDATE_SVC(P_SERVICE_NAME, TRUE);
864c963
< CHECK_CDBROOT;
---
> IP_VALIDATE_SVC(P_SERVICE_NAME, TRUE);
884d982
< CHECK_CDBROOT;
897d994
< CHECK_CDBROOT;
909,915c1006,1015
< IF P_PDB_NAME IS NULL THEN
< RAISE_APPLICATION_ERROR(-20003, 'Service is missing');
< END IF;
<
< CHECK_CDBROOT;
<
< FOR R IN (SELECT NAME
---
> IP_VALIDATE_SVC(P_PDB_NAME);
> IF IN_PDB() THEN
>
> FOR R IN (SELECT NAME
> FROM SYS.SERVICE$
> WHERE UPPER(P_PDB_NAME) = UPPER(PDB)) LOOP
> IP_ADD_ACE(R.NAME, P_HOST);
> END LOOP;
> ELSE
> FOR R IN (SELECT NAME
917c1017
< WHERE CON_ID# = (SELECT CON_ID
---
> WHERE CON_ID# = (SELECT CON_ID
919,922c1019,1022
< WHERE UPPER(NAME) = UPPER(P_PDB_NAME)
< )) LOOP
< IP_ADD_ACE(R.NAME, P_HOST);
< END LOOP;
---
> WHERE UPPER(NAME) = UPPER(P_PDB_NAME))) LOOP
> IP_ADD_ACE(R.NAME, P_HOST);
> END LOOP;
> END IF;
930,932c1030
< IF P_PDB_NAME IS NULL THEN
< RAISE_APPLICATION_ERROR(-20003, 'Service is missing');
< END IF;
---
> IP_VALIDATE_SVC(P_PDB_NAME, TRUE);
934,946c1032,1048
< CHECK_CDBROOT;
< BEGIN
< FOR R IN (SELECT NAME
< FROM SYS.CDB_SERVICE$
< WHERE CON_ID# = (SELECT CON_ID
< FROM SYS.V_$PDBS
< WHERE UPPER(NAME) = UPPER(P_PDB_NAME)
< )) LOOP
< IP_REMOVE_ACE(R.NAME, P_HOST);
< END LOOP;
< EXCEPTION
< WHEN OTHERS THEN NULL;
< END;
---
> IF IN_PDB() THEN
>
> FOR R IN (SELECT NAME
> FROM SYS.SERVICE$
> WHERE UPPER(P_PDB_NAME) = UPPER(PDB)) LOOP
> IP_REMOVE_ACE(R.NAME, P_HOST);
> END LOOP;
> ELSE
> FOR R IN (SELECT NAME
> FROM SYS.CDB_SERVICE$
> WHERE CON_ID# = (SELECT CON_ID
> FROM SYS.V_$PDBS
> WHERE UPPER(NAME) = UPPER(P_PDB_NAME)
> )) LOOP
> IP_REMOVE_ACE(R.NAME, P_HOST);
> END LOOP;
> END IF;
951a1054
> CNAME VARCHAR2(128);
953,954c1056,1077
< IF P_PDB_NAME IS NULL THEN
< RAISE_APPLICATION_ERROR(-20003, 'Service is missing');
---
> IP_VALIDATE_SVC(P_PDB_NAME, TRUE);
> IF IN_PDB() THEN
> SELECT SYS_CONTEXT('USERENV', 'CON_NAME') AS CUR_CONTAINER INTO CNAME
> FROM DUAL;
> IF UPPER(P_PDB_NAME) <> UPPER(CNAME) THEN
> RAISE_APPLICATION_ERROR(-20014,
> 'Service ' || P_PDB_NAME || ' not found in current container');
> END IF;
>
> FOR R IN (SELECT TRIM('"' FROM SERVICE_NAME) NAME
> FROM IP_ACL) LOOP
> IP_REMOVE_ACL(R.NAME);
> END LOOP;
> ELSE
> FOR R IN (SELECT NAME
> FROM SYS.CDB_SERVICE$
> WHERE CON_ID# = (SELECT CON_ID
> FROM SYS.V_$PDBS
> WHERE UPPER(NAME) = UPPER(P_PDB_NAME)
> )) LOOP
> IP_REMOVE_ACL(R.NAME);
> END LOOP;
956,969d1078
<
< CHECK_CDBROOT;
< BEGIN
< FOR R IN (SELECT NAME
< FROM SYS.CDB_SERVICE$
< WHERE CON_ID# = (SELECT CON_ID
< FROM SYS.V_$PDBS
< WHERE UPPER(NAME) = UPPER(P_PDB_NAME)
< )) LOOP
< IP_REMOVE_ACL(R.NAME);
< END LOOP;
< EXCEPTION
< WHEN OTHERS THEN NULL;
< END;
17459c17459,17461 < INSTR(ROLES_AND_PRIVS,' DATAPUMP_EXP_FULL_DATABASE ') > 0) THEN --- > INSTR(ROLES_AND_PRIVS,' DATAPUMP_EXP_FULL_DATABASE ') > 0 OR > INSTR(ROLES_AND_PRIVS,' DATAPUMP_CLOUD_IMP ') > 0 OR > INSTR(ROLES_AND_PRIVS,' DATAPUMP_CLOUD_EXP ') > 0) THEN 26057c26059,26060 < DYN_SQL_STMT VARCHAR2(4000); --- > ROLE_NOT_FOUND EXCEPTION; > PRAGMA EXCEPTION_INIT(ROLE_NOT_FOUND, -1917); 26083a26087,26103 > > BEGIN > EXECUTE IMMEDIATE > 'grant execute on ' || V_PFX_FOR_RDF_OBJ_NAME || > 'rdf_sys_callout to DATAPUMP_CLOUD_IMP'; > EXCEPTION > WHEN ROLE_NOT_FOUND THEN NULL; > WHEN OTHERS THEN RAISE; > END; > BEGIN > EXECUTE IMMEDIATE > 'grant execute on ' || V_PFX_FOR_RDF_OBJ_NAME || > 'rdf_sys_callout to DATAPUMP_CLOUD_EXP'; > EXCEPTION > WHEN ROLE_NOT_FOUND THEN NULL; > WHEN OTHERS THEN RAISE; > END; 26091a26112,26114 > DYN_SQL_STMT LONG; > ROLE_NOT_FOUND EXCEPTION; > PRAGMA EXCEPTION_INIT(ROLE_NOT_FOUND, -1917); 26129a26153,26169 > > BEGIN > EXECUTE IMMEDIATE > 'grant execute on ' || V_PFX_FOR_RDF_OBJ_NAME || > 'rdf_sys_callout_imp to DATAPUMP_CLOUD_IMP'; > EXCEPTION > WHEN ROLE_NOT_FOUND THEN NULL; > WHEN OTHERS THEN RAISE; > END; > BEGIN > EXECUTE IMMEDIATE > 'grant execute on ' || V_PFX_FOR_RDF_OBJ_NAME || > 'rdf_sys_callout_imp to DATAPUMP_CLOUD_EXP'; > EXCEPTION > WHEN ROLE_NOT_FOUND THEN NULL; > WHEN OTHERS THEN RAISE; > END; 26183a26224 > ROLE_NOT_FOUND EXCEPTION; 26192a26234 > PRAGMA EXCEPTION_INIT(ROLE_NOT_FOUND, -1917); 26287c26329,26331 < INSTR(ROLES_AND_PRIVS,' DATAPUMP_EXP_FULL_DATABASE ') > 0) THEN --- > INSTR(ROLES_AND_PRIVS,' DATAPUMP_EXP_FULL_DATABASE ') > 0 OR > INSTR(ROLES_AND_PRIVS,' DATAPUMP_CLOUD_IMP ') > 0 OR > INSTR(ROLES_AND_PRIVS,' DATAPUMP_CLOUD_EXP ') > 0) THEN 26337a26382,26398 > > > BEGIN > EXECUTE IMMEDIATE > 'grant read on ' || V_PFX_FOR_RDF_OBJ_NAME || 'rdf_parameter to DATAPUMP_CLOUD_IMP'; > EXCEPTION > WHEN ROLE_NOT_FOUND THEN NULL; > WHEN OTHERS THEN RAISE; > END; > > BEGIN > EXECUTE IMMEDIATE > 'grant read on ' || V_PFX_FOR_RDF_OBJ_NAME || 'rdf_parameter to DATAPUMP_CLOUD_EXP'; > EXCEPTION > WHEN ROLE_NOT_FOUND THEN NULL; > WHEN OTHERS THEN RAISE; > END;
12c12
< bannerVersion CONSTANT VARCHAR2(15) := '19.07.01.00';
---
> bannerVersion CONSTANT VARCHAR2(15) := '19.07.02.00';
24,26c24,26
< fsn CONSTANT NUMBER := instr('19.07.01.00', '.');
< msn CONSTANT NUMBER := instr('19.07.01.00', '.', fsn + 1);
< psn CONSTANT NUMBER := instr('19.07.01.00', '.', msn + 1);
---
> fsn CONSTANT NUMBER := instr('19.07.02.00', '.');
> msn CONSTANT NUMBER := instr('19.07.02.00', '.', fsn + 1);
> psn CONSTANT NUMBER := instr('19.07.02.00', '.', msn + 1);
29c29
< to_number(substr('19.07.01.00', 1, fsn - 1));
---
> to_number(substr('19.07.02.00', 1, fsn - 1));
31c31
< to_number(substr('19.07.01.00', fsn + 1, msn - fsn - 1));
---
> to_number(substr('19.07.02.00', fsn + 1, msn - fsn - 1));
33c33
< to_number(substr('19.07.01.00', msn + 1, psn - msn - 1));
---
> to_number(substr('19.07.02.00', msn + 1, psn - msn - 1));
35c35
< to_number(substr('19.07.01.00', psn + 1));
---
> to_number(substr('19.07.02.00', psn + 1));
12c12
< bannerVersion CONSTANT VARCHAR2(15) := '19.08.00.00';
---
> bannerVersion CONSTANT VARCHAR2(15) := '19.08.01.00';
24,26c24,26
< fsn CONSTANT NUMBER := instr('19.08.00.00', '.');
< msn CONSTANT NUMBER := instr('19.08.00.00', '.', fsn + 1);
< psn CONSTANT NUMBER := instr('19.08.00.00', '.', msn + 1);
---
> fsn CONSTANT NUMBER := instr('19.08.01.00', '.');
> msn CONSTANT NUMBER := instr('19.08.01.00', '.', fsn + 1);
> psn CONSTANT NUMBER := instr('19.08.01.00', '.', msn + 1);
29c29
< to_number(substr('19.08.00.00', 1, fsn - 1));
---
> to_number(substr('19.08.01.00', 1, fsn - 1));
31c31
< to_number(substr('19.08.00.00', fsn + 1, msn - fsn - 1));
---
> to_number(substr('19.08.01.00', fsn + 1, msn - fsn - 1));
33c33
< to_number(substr('19.08.00.00', msn + 1, psn - msn - 1));
---
> to_number(substr('19.08.01.00', msn + 1, psn - msn - 1));
35c35
< to_number(substr('19.08.00.00', psn + 1));
---
> to_number(substr('19.08.01.00', psn + 1));
12c12
< bannerVersion CONSTANT VARCHAR2(15) := '19.08.00.00';
---
> bannerVersion CONSTANT VARCHAR2(15) := '19.09.00.00';
24,26c24,26
< fsn CONSTANT NUMBER := instr('19.08.00.00', '.');
< msn CONSTANT NUMBER := instr('19.08.00.00', '.', fsn + 1);
< psn CONSTANT NUMBER := instr('19.08.00.00', '.', msn + 1);
---
> fsn CONSTANT NUMBER := instr('19.09.00.00', '.');
> msn CONSTANT NUMBER := instr('19.09.00.00', '.', fsn + 1);
> psn CONSTANT NUMBER := instr('19.09.00.00', '.', msn + 1);
29c29
< to_number(substr('19.08.00.00', 1, fsn - 1));
---
> to_number(substr('19.09.00.00', 1, fsn - 1));
31c31
< to_number(substr('19.08.00.00', fsn + 1, msn - fsn - 1));
---
> to_number(substr('19.09.00.00', fsn + 1, msn - fsn - 1));
33c33
< to_number(substr('19.08.00.00', msn + 1, psn - msn - 1));
---
> to_number(substr('19.09.00.00', msn + 1, psn - msn - 1));
35c35
< to_number(substr('19.08.00.00', psn + 1));
---
> to_number(substr('19.09.00.00', psn + 1));
83a84,102 > -- Public Key Encryption Algorithm > PKENCRYPT_RSA_PKCS1_OAEP CONSTANT PLS_INTEGER := 1; > > -- Public Key Type Algorithm > KEY_TYPE_RSA CONSTANT PLS_INTEGER := 1; > > -- Public Key Signature Type Algorithm > SIGN_SHA1_RSA CONSTANT PLS_INTEGER := 1; > SIGN_MD2_RSA CONSTANT PLS_INTEGER := 2; > SIGN_MD5_RSA CONSTANT PLS_INTEGER := 3; > SIGN_RSA_PKCS1_OAEP_SHA256 CONSTANT PLS_INTEGER := 4; > SIGN_SHA1_RSA_X931 CONSTANT PLS_INTEGER := 5; > SIGN_SHA224_RSA CONSTANT PLS_INTEGER := 6; > SIGN_SHA256_RSA CONSTANT PLS_INTEGER := 7; > SIGN_SHA256_RSA_X931 CONSTANT PLS_INTEGER := 8; > SIGN_SHA384_RSA CONSTANT PLS_INTEGER := 9; > SIGN_SHA384_RSA_X931 CONSTANT PLS_INTEGER := 10; > SIGN_SHA512_RSA CONSTANT PLS_INTEGER := 11; > SIGN_SHA512_RSA_X931 CONSTANT PLS_INTEGER := 12; 339a359,401 > > ------------------------------------------------------------------------ > -- > -- NAME: Asymmetric Key Operations > -- > -- DESCRIPTION: > -- > -- New API for Asymmetric Key Operations which are encrypt, decrypt, > -- sign and verify > -- > -- PARAMETERS > -- > -- > ------------------------------------------------------------------------ > > > FUNCTION PKENCRYPT (src IN RAW, > pub_key IN RAW, > pubkey_alg IN PLS_INTEGER, > enc_alg IN PLS_INTEGER) > RETURN RAW; > > > FUNCTION PKDECRYPT (src IN RAW, > prv_key IN RAW, > pubkey_alg IN PLS_INTEGER, > enc_alg IN PLS_INTEGER) > RETURN RAW; > > > FUNCTION SIGN (src IN RAW, > prv_key IN RAW, > pubkey_alg IN PLS_INTEGER, > sign_alg IN PLS_INTEGER) > RETURN RAW; > > > FUNCTION VERIFY (src IN RAW, > sign IN RAW, > pub_key IN RAW, > pubkey_alg IN PLS_INTEGER, > sign_alg IN PLS_INTEGER) > RETURN BOOLEAN;
86a87,115 > FUNCTION PKENCRYPT (SRC IN RAW, > PUB_KEY IN RAW, > PUBKEY_ALG IN PLS_INTEGER, > ENC_ALG IN PLS_INTEGER) > RETURN RAW; > > > > FUNCTION PKDECRYPT (SRC IN RAW, > PRV_KEY IN RAW, > PUBKEY_ALG IN PLS_INTEGER, > ENC_ALG IN PLS_INTEGER) > RETURN RAW; > > > FUNCTION SIGN (SRC IN RAW, > PRV_KEY IN RAW, > PUBKEY_ALG IN PLS_INTEGER, > SIGN_ALG IN PLS_INTEGER) > RETURN RAW; > > > FUNCTION VERIFY (SRC IN RAW, > SIGN IN RAW, > PUB_KEY IN RAW, > PUBKEY_ALG IN PLS_INTEGER, > SIGN_ALG IN PLS_INTEGER) > RETURN BOOLEAN; >
23,24c23 < TNAME VARCHAR2, < CNAME VARCHAR2) RETURN BOOLEAN; --- > TNAME VARCHAR2) RETURN BOOLEAN;
15d14 < 33c32,36 < NUM_ROW IN NUMBER); --- > NUM_ROW IN NUMBER, > BLOCKS IN NUMBER, > NUM_ROWS IN NUMBER, > FROM_STATS IN BOOLEAN) > ACCESSIBLE BY (PACKAGE SYS.DBMS_PARALLEL_EXECUTE); 39c42,43 < NUM_BLOCK IN NUMBER); --- > NUM_BLOCK IN NUMBER) > ACCESSIBLE BY (PACKAGE SYS.DBMS_PARALLEL_EXECUTE); 46c50,51 < CHUNK_SIZE IN NUMBER); --- > CHUNK_SIZE IN NUMBER) > ACCESSIBLE BY (PACKAGE SYS.DBMS_PARALLEL_EXECUTE); 50,51c55,56 < SQL_STMT IN CLOB, < BY_ROWID IN BOOLEAN); --- > BY_ROWID IN BOOLEAN) > ACCESSIBLE BY (PACKAGE SYS.DBMS_PARALLEL_EXECUTE); 96,98c101,102 < PROCEDURE RUN_INTERNAL_WORKER(OWNER# IN NUMBER, < TASK_NAME IN VARCHAR2, < JOB_NAME IN VARCHAR2); --- > PROCEDURE RUN_INTERNAL_WORKER(JOB_NAME IN VARCHAR2) > ACCESSIBLE BY (PACKAGE SYS.DBMS_PARALLEL_EXECUTE); 119a124,142 > > FUNCTION IS_STOP_FLAG_SET(OWNER# IN NUMBER, > TASK IN VARCHAR2) RETURN BOOLEAN > ACCESSIBLE BY (PACKAGE SYS.DBMS_PARALLEL_EXECUTE); > > PROCEDURE SET_TASK_STATUS(OWNER# IN NUMBER, > TASK IN VARCHAR2, > NEW_STATUS IN NUMBER) > ACCESSIBLE BY (PACKAGE SYS.DBMS_PARALLEL_EXECUTE); > > PROCEDURE INSERT_CHUNKS_ROW(OWNER# NUMBER, TASK_NAME VARCHAR2, > STATUS NUMBER, START_ID NUMBER, END_ID NUMBER, > START_ROWID UROWID, END_ROWID UROWID) > ACCESSIBLE BY (PACKAGE SYS.DBMS_PARALLEL_EXECUTE); > > PROCEDURE GET_BLOCKS_NUM_ROWS(TABLE_OWNER IN VARCHAR2, > TABLE_NAME IN VARCHAR2, > BLOCKS OUT NUMBER, NUM_ROWS OUT NUMBER) > ACCESSIBLE BY (PACKAGE SYS.DBMS_PARALLEL_EXECUTE);
13c13 < '19.8.0.0.0'; --- > '19.8.1.0.0';
13c13 < '19.7.1.0.0'; --- > '19.7.2.0.0';
13c13 < '19.8.0.0.0'; --- > '19.9.0.0.0';
2c2 < --- > PRAGMA SUPPLEMENTAL_LOG_DATA(DEFAULT, AUTO);
19c19,21 < FUNCTION drop_Collection (collection_Name NVARCHAR2) --- > FUNCTION drop_Collection (collection_Name NVARCHAR2, > purge BOOLEAN DEFAULT FALSE, > drop_Mapped_Table BOOLEAN DEFAULT FALSE) 26a29,31 > > FUNCTION TO_UUID (placeholder IN VARCHAR2) > RETURN VARCHAR2;
9c9 < function isJDCS return boolean; --- > function getServiceName return varchar2; 10a11 > function checkAndGetCompat return number;
21c21,22 < AUTO_EVOLVE_TASK_NAME CONSTANT DBMS_ID := 'SYS_AUTO_SPM_EVOLVE_TASK'; --- > AUTO_EVOLVE_TASK_NAME CONSTANT DBMS_ID := > 'SYS_AUTO_SPM_EVOLVE_TASK'; 24a26,27 > > AUTO_INDEX_EVOLVE_TASK_OWNER CONSTANT DBMS_ID := 'SYS'; 769a773,789 > > > > > > > > > > > > > > > > > PROCEDURE HIGH_FREQ_EVOLVE_TASK_PROC;
34a35,50 > > > > > > > > > > > > > > > > 44a61,62 > P_REPORT_LEVEL IN VARCHAR2 DEFAULT 'all', > P_COMPRESS_XML IN NUMBER DEFAULT 1,
6542a6543 > and sql_text not like '%/* SQL Analyze(%'
136a137,175 > FUNCTION PKENCRYPT (SRC IN RAW, > PUB_KEY IN RAW, > PUBKEY_ALG IN PLS_INTEGER, > ENC_ALG IN PLS_INTEGER) > RETURN RAW IS > BEGIN > RETURN DBMS_CRYPTO_FFI.PKENCRYPT(SRC, PUB_KEY, PUBKEY_ALG, ENC_ALG); > END PKENCRYPT; > > > FUNCTION PKDECRYPT (SRC IN RAW, > PRV_KEY IN RAW, > PUBKEY_ALG IN PLS_INTEGER, > ENC_ALG IN PLS_INTEGER) > RETURN RAW IS > BEGIN > RETURN DBMS_CRYPTO_FFI.PKDECRYPT(SRC, PRV_KEY, PUBKEY_ALG, ENC_ALG); > END PKDECRYPT; > > > FUNCTION SIGN (SRC IN RAW, > PRV_KEY IN RAW, > PUBKEY_ALG IN PLS_INTEGER, > SIGN_ALG IN PLS_INTEGER) > RETURN RAW IS > BEGIN > RETURN DBMS_CRYPTO_FFI.SIGN(SRC, PRV_KEY, PUBKEY_ALG, SIGN_ALG); > END SIGN; > > > FUNCTION VERIFY (SRC IN RAW, > SIGN IN RAW, > PUB_KEY IN RAW, > PUBKEY_ALG IN PLS_INTEGER, > SIGN_ALG IN PLS_INTEGER) > RETURN BOOLEAN IS > BEGIN > RETURN DBMS_CRYPTO_FFI.VERIFY(SRC, SIGN, PUB_KEY, PUBKEY_ALG, SIGN_ALG); > END VERIFY;
257a258,351 > FUNCTION PKENCRYPT (SRC IN RAW, > PUB_KEY IN RAW, > PUBKEY_ALG IN PLS_INTEGER, > ENC_ALG IN PLS_INTEGER) > RETURN RAW > IS EXTERNAL NAME "kzstea" > PARAMETERS (CONTEXT, > SRC OCIRAW, > SRC INDICATOR SB4, > SRC LENGTH UB4, > PUB_KEY OCIRAW, > PUB_KEY INDICATOR SB4, > PUB_KEY LENGTH UB4, > PUBKEY_ALG SB4, > PUBKEY_ALG INDICATOR SB4, > ENC_ALG SB4, > ENC_ALG INDICATOR SB4, > RETURN INDICATOR SB4, > RETURN LENGTH UB4) > LIBRARY CRYPTO_TOOLKIT_LIBRARY > WITH CONTEXT; > > > FUNCTION PKDECRYPT (SRC IN RAW, > PRV_KEY IN RAW, > PUBKEY_ALG IN PLS_INTEGER, > ENC_ALG IN PLS_INTEGER) > RETURN RAW > IS EXTERNAL NAME "kzstde" > PARAMETERS (CONTEXT, > SRC OCIRAW, > SRC INDICATOR SB4, > SRC LENGTH UB4, > PRV_KEY OCIRAW, > PRV_KEY INDICATOR SB4, > PRV_KEY LENGTH UB4, > PUBKEY_ALG SB4, > PUBKEY_ALG INDICATOR SB4, > ENC_ALG SB4, > ENC_ALG INDICATOR SB4, > RETURN INDICATOR SB4, > RETURN LENGTH UB4) > LIBRARY CRYPTO_TOOLKIT_LIBRARY > WITH CONTEXT; > > > FUNCTION SIGN (SRC IN RAW, > PRV_KEY IN RAW, > PUBKEY_ALG IN PLS_INTEGER, > SIGN_ALG IN PLS_INTEGER) > RETURN RAW > IS EXTERNAL NAME "kzsts" > PARAMETERS (CONTEXT, > SRC OCIRAW, > SRC INDICATOR SB4, > SRC LENGTH UB4, > PRV_KEY OCIRAW, > PRV_KEY INDICATOR SB4, > PRV_KEY LENGTH UB4, > PUBKEY_ALG SB4, > PUBKEY_ALG INDICATOR SB4, > SIGN_ALG SB4, > SIGN_ALG INDICATOR SB4, > RETURN INDICATOR SB4, > RETURN LENGTH UB4) > LIBRARY CRYPTO_TOOLKIT_LIBRARY > WITH CONTEXT; > > > FUNCTION VERIFY (SRC IN RAW, > SIGN IN RAW, > PUB_KEY IN RAW, > PUBKEY_ALG IN PLS_INTEGER, > SIGN_ALG IN PLS_INTEGER) > RETURN BOOLEAN > IS EXTERNAL NAME "kzstv" > PARAMETERS (CONTEXT, > SRC OCIRAW, > SRC INDICATOR SB4, > SRC LENGTH UB4, > SIGN OCIRAW, > SIGN INDICATOR SB4, > SIGN LENGTH UB4, > PUB_KEY OCIRAW, > PUB_KEY INDICATOR SB4, > PUB_KEY LENGTH UB4, > PUBKEY_ALG SB4, > PUBKEY_ALG INDICATOR SB4, > SIGN_ALG SB4, > SIGN_ALG INDICATOR SB4, > RETURN SB2) > LIBRARY CRYPTO_TOOLKIT_LIBRARY > WITH CONTEXT; >
9140,9155c9140 < < < < < < < < < < < < DELETE FROM SYS.SCHEDULER$_DBMSJOB_MAP < WHERE JOB_NAME NOT IN (SELECT NAME < FROM SYS.OBJ$ < WHERE NAME LIKE 'DBMS_JOB$_%'); < INSERT INTO SYS.SCHEDULER$_DBMSJOB_MAP --- > INSERT INTO SYS.SCHEDULER$_DBMSJOB_MAP (DBMS_JOB_NUMBER, JOB_OWNER, JOB_NAME)
55a56 > 157,159c158,159 < OWNER VARCHAR2, < TNAME VARCHAR2, < CNAME VARCHAR2) RETURN BOOLEAN --- > OWNER VARCHAR2, > TNAME VARCHAR2) RETURN BOOLEAN 161,162c161 < CURSOR CHECK_CUR(OWN VARCHAR2, TNM VARCHAR2, CNM VARCHAR2, < COM VARCHAR2) --- > CURSOR CHECK_CUR(OWN VARCHAR2, TNM VARCHAR2, CNM VARCHAR2) 164,173c163,166 < SELECT 1 FROM COL$ C, USER$ U, COM$ CO, OBJ$ O < WHERE O.OWNER# = U.USER# < AND U.NAME = OWN < AND O.TYPE# IN (2,4) < AND O.OBJ# = C.OBJ# < AND C.OBJ# = CO.OBJ#(+) < AND C.INTCOL# = CO.COL#(+) < AND O.NAME = TNM < AND C.NAME = CNM < AND (CO.COMMENT$ IS NULL OR CO.COMMENT$ != COM); --- > SELECT 1 FROM DBA_TAB_COLS C > WHERE C.OWNER = OWN > AND C.TABLE_NAME = TNM > AND C.COLUMN_NAME = CNM; 175,176c168 < NAMEOK BOOLEAN := FALSE; < COMNT VARCHAR2(135); --- > VCEXISTS BOOLEAN := FALSE; 178,179c170 < COMNT := CNAME||' dg'; < OPEN CHECK_CUR(OWNER, TNAME, VCNAME, COMNT); --- > OPEN CHECK_CUR(OWNER, TNAME, VCNAME); 182,183c173,174 < IF QUERYRET IS NULL THEN < NAMEOK := TRUE; --- > IF QUERYRET IS NOT NULL THEN > VCEXISTS := TRUE; 185c176 < RETURN NAMEOK; --- > RETURN VCEXISTS;
117a118,123
> BLOCKS NUMBER;
> NUM_ROWS NUMBER;
> QUOTED_TABLE_OWNER DBMS_QUOTED_ID;
> QUOTED_TABLE_NAME DBMS_QUOTED_ID;
> CALLED_DBMS_STATS BOOLEAN := FALSE;
> SQL_STMT VARCHAR2(32767);
123a130,178
>
>
>
>
>
>
>
>
>
>
>
>
> DBMS_PARALLEL_EXECUTE_INTERNAL.GET_BLOCKS_NUM_ROWS(
> TABLE_OWNER, TABLE_NAME, BLOCKS, NUM_ROWS);
>
> IF (BLOCKS IS NULL OR NUM_ROWS IS NULL) THEN
> CALLED_DBMS_STATS := TRUE;
>
>
>
>
> BLOCKS := DBMS_STATS_INTERNAL.GET_TABLE_BLOCK_COUNT(
> TABLE_OWNER,
> TABLE_NAME,
> PARTNAME => NULL,
> SUBPARTNAME => NULL,
> IGNORE_ERRORS => 'TRUE');
>
> QUOTED_TABLE_OWNER := DBMS_ASSERT.ENQUOTE_NAME(TABLE_OWNER, FALSE);
> QUOTED_TABLE_NAME := DBMS_ASSERT.ENQUOTE_NAME(TABLE_NAME, FALSE);
>
> NUM_ROWS := DBMS_STATS.GET_ROW_COUNT_ESTIMATE(
> OWNNAME => QUOTED_TABLE_OWNER,
> TABNAME => QUOTED_TABLE_NAME,
> PARTNAME => NULL,
> NBLKS => NULL,
> DEGREE => NULL);
> END IF;
>
> IF NUM_ROWS = 0 THEN
>
>
>
> SQL_STMT := 'select count(*) from ' ||
> DBMS_ASSERT.ENQUOTE_NAME(TABLE_OWNER) || '.' ||
> DBMS_ASSERT.ENQUOTE_NAME(TABLE_NAME);
> EXECUTE IMMEDIATE SQL_STMT INTO NUM_ROWS;
> END IF;
>
126c181,182
< NUM_ROW=>CHUNK_SIZE);
---
> NUM_ROW=>CHUNK_SIZE, BLOCKS=>BLOCKS, NUM_ROWS=>NUM_ROWS,
> FROM_STATS=>CALLED_DBMS_STATS);
144a201,220
> L_MIN_VAL NUMBER;
> L_MAX_VAL NUMBER;
> L_TBL_OWN DBMS_ID;
> L_TBL_NM DBMS_ID;
> L_COL_NM DBMS_ID;
> L_AST_TBL_OWN DBMS_QUOTED_ID;
> L_AST_TBL_NM DBMS_QUOTED_ID;
> L_AST_COL_NM DBMS_QUOTED_ID;
> L_SQL VARCHAR2(1000);
> L_START_ID NUMBER;
> L_END_ID NUMBER;
> L_SEQ NUMBER;
> L_USR_CUR INTEGER;
> L_ROWS NUMBER;
> L_STATUS NUMBER;
> L_CHUNK_SIZE NUMBER;
> L_CNT NUMBER := 0;
> L_START_ROWID UROWID;
> L_END_ROWID UROWID;
> OWNER# NUMBER := USERENV('SCHEMAID');
148,149c224,293
< USERENV('SCHEMAID'), TASK_NAME, TABLE_OWNER, TABLE_NAME,
< TABLE_COLUMN, CHUNK_SIZE);
---
> OWNER#, TASK_NAME, TABLE_OWNER, TABLE_NAME, TABLE_COLUMN, CHUNK_SIZE);
>
> L_AST_TBL_NM := DBMS_ASSERT.ENQUOTE_NAME(TABLE_NAME, FALSE);
> L_AST_TBL_OWN := DBMS_ASSERT.ENQUOTE_NAME(TABLE_OWNER, FALSE);
> L_AST_COL_NM := DBMS_ASSERT.ENQUOTE_NAME(TABLE_COLUMN, FALSE);
> L_CHUNK_SIZE := CHUNK_SIZE;
> IF (L_CHUNK_SIZE < 1) THEN L_CHUNK_SIZE := 1; END IF;
>
>
>
> BEGIN
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> L_SQL := 'select min('||L_AST_COL_NM||'), max('||L_AST_COL_NM||')
> from ' || L_AST_TBL_OWN || '.' || L_AST_TBL_NM;
> EXECUTE IMMEDIATE L_SQL INTO L_MIN_VAL, L_MAX_VAL;
>
>
> IF (L_MIN_VAL IS NULL OR L_MAX_VAL IS NULL) THEN
> RETURN;
> END IF;
>
>
> L_END_ID := L_MIN_VAL-1;
> LOOP
>
> L_START_ID := L_END_ID + 1;
> L_END_ID := LEAST(L_MAX_VAL, L_START_ID + L_CHUNK_SIZE - 1);
>
>
> DBMS_PARALLEL_EXECUTE_INTERNAL.INSERT_CHUNKS_ROW(
> OWNER#, TASK_NAME, DBMS_PARALLEL_EXECUTE.UNASSIGNED,
> L_START_ID, L_END_ID, NULL, NULL);
>
> COMMIT;
> L_CNT := L_CNT + 1;
>
>
> IF (L_END_ID = L_MAX_VAL) THEN
> EXIT;
> END IF;
> END LOOP;
>
>
> IF (L_CNT = 0) THEN
> DBMS_PARALLEL_EXECUTE_INTERNAL.SET_TASK_STATUS
> (OWNER#, TASK_NAME, DBMS_PARALLEL_EXECUTE.NO_CHUNKS);
> ELSE
> DBMS_PARALLEL_EXECUTE_INTERNAL.SET_TASK_STATUS
> (OWNER#, TASK_NAME, DBMS_PARALLEL_EXECUTE.CHUNKED);
> END IF;
>
> EXCEPTION WHEN OTHERS THEN
>
> DBMS_PARALLEL_EXECUTE_INTERNAL.SET_TASK_STATUS(OWNER#, TASK_NAME,
> DBMS_PARALLEL_EXECUTE.CHUNKING_FAILED);
> RAISE;
> END;
160a305,312
> L_START_ID NUMBER;
> L_END_ID NUMBER;
> L_START_ROWID UROWID;
> L_END_ROWID UROWID;
> L_SOURCE_CURSOR INTEGER;
> L_IGNORE NUMBER;
> L_CNT NUMBER := 0;
> OWNER# NUMBER := USERENV('SCHEMAID');
163c315,374
< USERENV('SCHEMAID'), TASK_NAME, SQL_STMT, BY_ROWID);
---
> OWNER#, TASK_NAME, BY_ROWID);
>
>
>
> BEGIN
>
> L_SOURCE_CURSOR := DBMS_SQL.OPEN_CURSOR;
> DBMS_SQL.PARSE(L_SOURCE_CURSOR, SQL_STMT, DBMS_SQL.NATIVE);
> IF (BY_ROWID = FALSE) THEN
> DBMS_SQL.DEFINE_COLUMN(L_SOURCE_CURSOR, 1, L_START_ID);
> DBMS_SQL.DEFINE_COLUMN(L_SOURCE_CURSOR, 2, L_END_ID);
> ELSE
> DBMS_SQL.DEFINE_COLUMN(L_SOURCE_CURSOR, 1, L_START_ROWID);
> DBMS_SQL.DEFINE_COLUMN(L_SOURCE_CURSOR, 2, L_END_ROWID);
> END IF;
> L_IGNORE := DBMS_SQL.EXECUTE(L_SOURCE_CURSOR);
>
>
> LOOP
> IF (DBMS_SQL.FETCH_ROWS(L_SOURCE_CURSOR)=0) THEN
> EXIT;
> END IF;
>
>
> IF (BY_ROWID = FALSE) THEN
> DBMS_SQL.COLUMN_VALUE(L_SOURCE_CURSOR, 1, L_START_ID);
> DBMS_SQL.COLUMN_VALUE(L_SOURCE_CURSOR, 2, L_END_ID);
> ELSE
> DBMS_SQL.COLUMN_VALUE(L_SOURCE_CURSOR, 1, L_START_ROWID);
> DBMS_SQL.COLUMN_VALUE(L_SOURCE_CURSOR, 2, L_END_ROWID);
> END IF;
>
>
> DBMS_PARALLEL_EXECUTE_INTERNAL.INSERT_CHUNKS_ROW(
> OWNER#, TASK_NAME, DBMS_PARALLEL_EXECUTE.UNASSIGNED,
> L_START_ID, L_END_ID, L_START_ROWID, L_END_ROWID);
> L_CNT := L_CNT + 1;
> END LOOP;
>
>
> DBMS_SQL.CLOSE_CURSOR(L_SOURCE_CURSOR);
>
>
> IF (L_CNT = 0) THEN
> DBMS_PARALLEL_EXECUTE_INTERNAL.SET_TASK_STATUS(
> OWNER#, TASK_NAME, DBMS_PARALLEL_EXECUTE.NO_CHUNKS);
> ELSE
> DBMS_PARALLEL_EXECUTE_INTERNAL.SET_TASK_STATUS(
> OWNER#, TASK_NAME, DBMS_PARALLEL_EXECUTE.CHUNKED);
> END IF;
>
> EXCEPTION WHEN OTHERS THEN
> IF DBMS_SQL.IS_OPEN(L_SOURCE_CURSOR) THEN
> DBMS_SQL.CLOSE_CURSOR(L_SOURCE_CURSOR);
> END IF;
>
> DBMS_PARALLEL_EXECUTE_INTERNAL.SET_TASK_STATUS(
> OWNER#, TASK_NAME, DBMS_PARALLEL_EXECUTE.CHUNKING_FAILED);
> RAISE;
> END;
259a471,480
> L_START_ID NUMBER;
> L_END_ID NUMBER;
> L_START_ROWID ROWID;
> L_END_ROWID ROWID;
> L_ROWS_PROCESSED NUMBER;
> L_CUR INTEGER;
> L_FIRE_APPLY_TRIGGER BOOLEAN;
> L_CHUNK_ID NUMBER;
> L_TASK DBMS_PARALLEL_EXECUTE_INTERNAL.TASK_TYPE;
> OWNER# NUMBER := USERENV('SCHEMAID');
261,262c482,572
< DBMS_PARALLEL_EXECUTE_INTERNAL.RUN_INTERNAL_WORKER(
< USERENV('SCHEMAID'), TASK_NAME, JOB_NAME);
---
> DBMS_PARALLEL_EXECUTE_INTERNAL.RUN_INTERNAL_WORKER(JOB_NAME);
>
>
> L_TASK := DBMS_PARALLEL_EXECUTE_INTERNAL.READ_TASK(OWNER#, TASK_NAME);
>
>
> IF (L_TASK.FIRE_APPLY_TRIGGER = 'TRUE') THEN L_FIRE_APPLY_TRIGGER := TRUE;
> ELSE L_FIRE_APPLY_TRIGGER := FALSE;
> END IF;
>
>
>
>
> L_CUR := DBMS_SQL.OPEN_CURSOR;
> DBMS_SQL.PARSE(L_CUR,
> DBMS_ASSERT.NOOP(L_TASK.SQL_STMT),
> L_TASK.LANGUAGE_FLAG,
> L_TASK.EDITION,
> L_TASK.APPLY_CROSSEDITION_TRIGGER,
> L_FIRE_APPLY_TRIGGER);
>
>
>
>
>
>
> LOOP
>
>
>
> IF (DBMS_PARALLEL_EXECUTE_INTERNAL.IS_STOP_FLAG_SET(OWNER#,
> TASK_NAME)) THEN
> EXIT;
> END IF;
>
>
>
>
>
> IF (DBMS_PARALLEL_EXECUTE_INTERNAL.GET_RANGE(OWNER#, TASK_NAME,
> L_CHUNK_ID, L_START_ROWID, L_END_ROWID, L_START_ID, L_END_ID)
> = FALSE) THEN
> EXIT;
> END IF;
>
>
>
>
>
>
>
>
> BEGIN
> IF (L_TASK.CHUNK_TYPE =
> DBMS_PARALLEL_EXECUTE_INTERNAL.ROWID_RANGE) THEN
> DBMS_SQL.BIND_VARIABLE(L_CUR, ':start_id', L_START_ROWID);
> DBMS_SQL.BIND_VARIABLE(L_CUR, ':end_id', L_END_ROWID);
> ELSE
> DBMS_SQL.BIND_VARIABLE(L_CUR, ':start_id', L_START_ID);
> DBMS_SQL.BIND_VARIABLE(L_CUR, ':end_id', L_END_ID);
> END IF;
>
> L_ROWS_PROCESSED := DBMS_SQL.EXECUTE(L_CUR);
>
>
>
>
>
> DBMS_PARALLEL_EXECUTE_INTERNAL.SET_CHUNK_STATUS(OWNER#, TASK_NAME,
> L_CHUNK_ID, DBMS_PARALLEL_EXECUTE.PROCESSED);
> EXCEPTION WHEN OTHERS THEN
>
>
>
>
>
> DBMS_PARALLEL_EXECUTE_INTERNAL.SET_CHUNK_STATUS(OWNER#, TASK_NAME,
> L_CHUNK_ID, DBMS_PARALLEL_EXECUTE.PROCESSED_WITH_ERROR,
> SQLCODE, SQLERRM);
> END;
>
>
>
>
> COMMIT;
> END LOOP;
>
>
>
>
> DBMS_SQL.CLOSE_CURSOR(L_CUR);
408a719
> L_STATUS NUMBER;
411c722,723
< IF (TASK_STATUS(TASK_NAME) = NO_CHUNKS) THEN
---
> L_STATUS := TASK_STATUS(TASK_NAME);
> IF (L_STATUS = NO_CHUNKS) THEN
413c725
< ELSIF (TASK_STATUS(TASK_NAME) != CHUNKED) THEN
---
> ELSIF (L_STATUS != CHUNKED) THEN
165a166
> ACCESSIBLE BY (PACKAGE SYS.DBMS_PARALLEL_EXECUTE)
179a181
> ACCESSIBLE BY (PACKAGE SYS.DBMS_PARALLEL_EXECUTE)
268d269
<
364c365,369
< NUM_ROW IN NUMBER)
---
> NUM_ROW IN NUMBER,
> BLOCKS IN NUMBER,
> NUM_ROWS IN NUMBER,
> FROM_STATS IN BOOLEAN)
> ACCESSIBLE BY (PACKAGE SYS.DBMS_PARALLEL_EXECUTE)
368,369d372
< L_QUOTED_TABLE_OWNER DBMS_QUOTED_ID;
< L_QUOTED_TABLE_NAME DBMS_QUOTED_ID;
371,372d373
< L_BLOCKS NUMBER;
< L_NUM_ROWS NUMBER;
374,375d374
< L_SQL_STMT VARCHAR2(1000);
< L_CALLED_DBMS_STATS BOOLEAN := FALSE;
386,400d384
<
<
<
<
<
<
< SELECT T.BLOCKS, T.NUM_ROWS
< INTO L_BLOCKS, L_NUM_ROWS
< FROM DBA_TABLES T
< WHERE T.OWNER = L_TABLE_OWNER
< AND T.TABLE_NAME = L_TABLE_NAME;
<
< IF (L_BLOCKS IS NULL OR
< L_NUM_ROWS IS NULL) THEN
< L_CALLED_DBMS_STATS := TRUE;
401a386
> IF NUM_ROWS = 0 THEN
404,421c389,398
<
< L_BLOCKS := DBMS_STATS_INTERNAL.GET_TABLE_BLOCK_COUNT(
< L_TABLE_OWNER,
< L_TABLE_NAME,
< PARTNAME => NULL,
< SUBPARTNAME => NULL,
< IGNORE_ERRORS => 'TRUE');
<
< L_QUOTED_TABLE_OWNER := DBMS_ASSERT.ENQUOTE_NAME(L_TABLE_OWNER, FALSE);
< L_QUOTED_TABLE_NAME := DBMS_ASSERT.ENQUOTE_NAME(L_TABLE_NAME, FALSE);
<
< L_NUM_ROWS := DBMS_STATS.GET_ROW_COUNT_ESTIMATE(
< OWNNAME => L_QUOTED_TABLE_OWNER,
< TABNAME => L_QUOTED_TABLE_NAME,
< PARTNAME => NULL,
< NBLKS => L_BLOCKS,
< DEGREE => NULL);
< END IF;
---
> UPDATE DBMS_PARALLEL_EXECUTE_TASK$
> SET STATUS = DBMS_PARALLEL_EXECUTE.NO_CHUNKS,
> CHUNK_TYPE = ROWID_RANGE,
> TABLE_OWNER = L_TABLE_OWNER,
> TABLE_NAME = L_TABLE_NAME
> WHERE TASK_OWNER# = OWNER#
> AND TASK_NAME = CREATE_CHUNKS_BY_ROWID.TASK_NAME
> AND STATUS IN (DBMS_PARALLEL_EXECUTE.CREATED,
> DBMS_PARALLEL_EXECUTE.CHUNKING_FAILED)
> RETURNING STATUS INTO L_STATUS;
423,424d399
< IF L_NUM_ROWS = 0 THEN
<
427,449c402,404
< L_SQL_STMT := 'select count(*) from ' ||
< DBMS_ASSERT.ENQUOTE_NAME(L_TABLE_OWNER) || '.' ||
< DBMS_ASSERT.ENQUOTE_NAME(L_TABLE_NAME);
< EXECUTE IMMEDIATE L_SQL_STMT INTO L_NUM_ROWS;
< IF L_NUM_ROWS = 0 THEN
<
<
< UPDATE DBMS_PARALLEL_EXECUTE_TASK$
< SET STATUS = DBMS_PARALLEL_EXECUTE.NO_CHUNKS,
< CHUNK_TYPE = ROWID_RANGE,
< TABLE_OWNER = L_TABLE_OWNER,
< TABLE_NAME = L_TABLE_NAME
< WHERE TASK_OWNER# = OWNER#
< AND TASK_NAME = CREATE_CHUNKS_BY_ROWID.TASK_NAME
< AND STATUS IN (DBMS_PARALLEL_EXECUTE.CREATED,
< DBMS_PARALLEL_EXECUTE.CHUNKING_FAILED)
< RETURNING STATUS INTO L_STATUS;
<
<
<
< IF (L_STATUS IS NULL) THEN
< RAISE DBMS_PARALLEL_EXECUTE.INVALID_STATE_FOR_CHUNK;
< END IF;
---
> IF (L_STATUS IS NULL) THEN
> RAISE DBMS_PARALLEL_EXECUTE.INVALID_STATE_FOR_CHUNK;
> END IF;
451c406
< COMMIT;
---
> COMMIT;
453,454c408
< RETURN;
< END IF;
---
> RETURN;
459c413
< (L_BLOCKS / L_NUM_ROWS));
---
> (BLOCKS / NUM_ROWS));
466,467c420,421
< ', l_called_dbms_stats = ' ||
< CASE L_CALLED_DBMS_STATS
---
> ', dbms_stats = ' ||
> CASE FROM_STATS
471,472c425,426
< ', l_blocks = ' || L_BLOCKS ||
< ', l_num_rows = ' || L_NUM_ROWS ||
---
> ', blocks = ' || BLOCKS ||
> ', num_rows = ' || NUM_ROWS ||
586a541
> ACCESSIBLE BY (PACKAGE SYS.DBMS_PARALLEL_EXECUTE)
739a695
> ACCESSIBLE BY (PACKAGE SYS.DBMS_PARALLEL_EXECUTE)
747,755d702
< L_AST_TBL_OWN DBMS_QUOTED_ID;
< L_AST_TBL_NM DBMS_QUOTED_ID;
< L_AST_COL_NM DBMS_QUOTED_ID;
< L_SQL VARCHAR2(1000);
< L_START_ID NUMBER;
< L_END_ID NUMBER;
< L_SEQ NUMBER;
< L_USR_CUR INTEGER;
< L_ROWS NUMBER;
757,758d703
< L_CHUNK_SIZE NUMBER;
< L_CNT NUMBER := 0;
768,773d712
< L_AST_TBL_NM := DBMS_ASSERT.ENQUOTE_NAME(TABLE_NAME, FALSE);
< L_AST_TBL_OWN := DBMS_ASSERT.ENQUOTE_NAME(TABLE_OWNER, FALSE);
< L_AST_COL_NM := DBMS_ASSERT.ENQUOTE_NAME(TABLE_COLUMN, FALSE);
< L_CHUNK_SIZE := CHUNK_SIZE;
< IF (L_CHUNK_SIZE < 1) THEN L_CHUNK_SIZE := 1; END IF;
<
803,870d741
<
<
< BEGIN
<
<
<
<
<
<
<
<
<
<
<
<
<
<
< L_SQL := 'select min('||L_AST_COL_NM||'), max('||L_AST_COL_NM||')
< from ' || L_AST_TBL_OWN || '.' || L_AST_TBL_NM;
< L_USR_CUR := DBMS_SYS_SQL.OPEN_CURSOR;
< DBMS_SYS_SQL.PARSE_AS_USER(L_USR_CUR, L_SQL, DBMS_SQL.NATIVE, OWNER#);
< DBMS_SYS_SQL.DEFINE_COLUMN(L_USR_CUR, 1, L_MIN_VAL);
< DBMS_SYS_SQL.DEFINE_COLUMN(L_USR_CUR, 2, L_MAX_VAL);
<
< L_ROWS := DBMS_SYS_SQL.EXECUTE_AND_FETCH(L_USR_CUR);
< DBMS_SYS_SQL.COLUMN_VALUE(L_USR_CUR, 1, L_MIN_VAL);
< DBMS_SYS_SQL.COLUMN_VALUE(L_USR_CUR, 2, L_MAX_VAL);
<
<
< IF (L_MIN_VAL IS NULL OR L_MAX_VAL IS NULL) THEN
< RETURN;
< END IF;
<
<
< L_END_ID := L_MIN_VAL-1;
< LOOP
<
< L_START_ID := L_END_ID + 1;
< L_END_ID := LEAST(L_MAX_VAL, L_START_ID + L_CHUNK_SIZE - 1);
<
<
< L_SEQ := SEQ_NEXT_VAL;
< INSERT INTO DBMS_PARALLEL_EXECUTE_CHUNKS$(
< CHUNK_ID, TASK_OWNER#, TASK_NAME, STATUS, START_ID, END_ID)
< VALUES(L_SEQ, OWNER#, L_TASK_NAME, DBMS_PARALLEL_EXECUTE.UNASSIGNED,
< L_START_ID, L_END_ID);
< COMMIT;
< L_CNT := L_CNT + 1;
<
<
< IF (L_END_ID = L_MAX_VAL) THEN
< EXIT;
< END IF;
< END LOOP;
<
<
< IF (L_CNT = 0) THEN
< SET_TASK_STATUS(OWNER#, L_TASK_NAME, DBMS_PARALLEL_EXECUTE.NO_CHUNKS);
< ELSE
< SET_TASK_STATUS(OWNER#, L_TASK_NAME, DBMS_PARALLEL_EXECUTE.CHUNKED);
< END IF;
<
< EXCEPTION WHEN OTHERS THEN
<
< SET_TASK_STATUS(OWNER#, L_TASK_NAME,
< DBMS_PARALLEL_EXECUTE.CHUNKING_FAILED);
< RAISE;
< END;
880d750
< SQL_STMT IN CLOB,
881a752
> ACCESSIBLE BY (PACKAGE SYS.DBMS_PARALLEL_EXECUTE)
885,891d755
< L_START_ID NUMBER;
< L_END_ID NUMBER;
< L_START_ROWID UROWID;
< L_END_ROWID UROWID;
< L_SEQ NUMBER;
< L_SOURCE_CURSOR INTEGER;
< L_IGNORE NUMBER;
893d756
< L_CNT NUMBER := 0;
921,977c784
< BEGIN
<
< L_SOURCE_CURSOR := DBMS_SYS_SQL.OPEN_CURSOR;
< DBMS_SYS_SQL.PARSE_AS_USER(L_SOURCE_CURSOR, SQL_STMT, DBMS_SQL.NATIVE,
< OWNER#);
< IF (BY_ROWID = FALSE) THEN
< DBMS_SYS_SQL.DEFINE_COLUMN(L_SOURCE_CURSOR, 1, L_START_ID);
< DBMS_SYS_SQL.DEFINE_COLUMN(L_SOURCE_CURSOR, 2, L_END_ID);
< ELSE
< DBMS_SYS_SQL.DEFINE_COLUMN(L_SOURCE_CURSOR, 1, L_START_ROWID);
< DBMS_SYS_SQL.DEFINE_COLUMN(L_SOURCE_CURSOR, 2, L_END_ROWID);
< END IF;
< L_IGNORE := DBMS_SQL.EXECUTE(L_SOURCE_CURSOR);
<
<
< LOOP
< IF (DBMS_SYS_SQL.FETCH_ROWS(L_SOURCE_CURSOR)=0) THEN
< EXIT;
< END IF;
<
<
< IF (BY_ROWID = FALSE) THEN
< DBMS_SYS_SQL.COLUMN_VALUE(L_SOURCE_CURSOR, 1, L_START_ID);
< DBMS_SYS_SQL.COLUMN_VALUE(L_SOURCE_CURSOR, 2, L_END_ID);
< ELSE
< DBMS_SYS_SQL.COLUMN_VALUE(L_SOURCE_CURSOR, 1, L_START_ROWID);
< DBMS_SYS_SQL.COLUMN_VALUE(L_SOURCE_CURSOR, 2, L_END_ROWID);
< END IF;
<
<
< L_SEQ := SEQ_NEXT_VAL;
< INSERT INTO DBMS_PARALLEL_EXECUTE_CHUNKS$
< (CHUNK_ID, TASK_OWNER#, TASK_NAME, STATUS,
< START_ID, END_ID, START_ROWID, END_ROWID)
< VALUES (L_SEQ, OWNER#, L_TASK_NAME,
< DBMS_PARALLEL_EXECUTE.UNASSIGNED,
< L_START_ID, L_END_ID, L_START_ROWID, L_END_ROWID);
< COMMIT;
< L_CNT := L_CNT + 1;
< END LOOP;
<
<
< DBMS_SYS_SQL.CLOSE_CURSOR(L_SOURCE_CURSOR);
<
<
< IF (L_CNT = 0) THEN
< SET_TASK_STATUS(OWNER#, L_TASK_NAME, DBMS_PARALLEL_EXECUTE.NO_CHUNKS);
< ELSE
< SET_TASK_STATUS(OWNER#, L_TASK_NAME, DBMS_PARALLEL_EXECUTE.CHUNKED);
< END IF;
<
< EXCEPTION WHEN OTHERS THEN
<
< SET_TASK_STATUS(OWNER#, L_TASK_NAME,
< DBMS_PARALLEL_EXECUTE.CHUNKING_FAILED);
< RAISE;
< END;
---
>
1159a967
> L_TASK_NAME := TASK_NAME;
1298a1107
>
1314,1329c1123,1126
< PROCEDURE RUN_INTERNAL_WORKER(OWNER# IN NUMBER,
< TASK_NAME IN VARCHAR2,
< JOB_NAME IN VARCHAR2)
< IS
< L_START_ID NUMBER;
< L_END_ID NUMBER;
< L_START_ROWID ROWID;
< L_END_ROWID ROWID;
< L_ROWS_PROCESSED NUMBER;
< L_CUR INTEGER;
< L_FIRE_APPLY_TRIGGER BOOLEAN;
< L_CHUNK_ID NUMBER;
< L_TASK TASK_TYPE;
< BEGIN
<
< L_TASK := READ_TASK(OWNER#, TASK_NAME);
---
>
>
>
>
1331,1334c1128,1131
<
< IF (L_TASK.FIRE_APPLY_TRIGGER = 'TRUE') THEN L_FIRE_APPLY_TRIGGER := TRUE;
< ELSE L_FIRE_APPLY_TRIGGER := FALSE;
< END IF;
---
> PROCEDURE RUN_INTERNAL_WORKER(JOB_NAME IN VARCHAR2)
> ACCESSIBLE BY (PACKAGE SYS.DBMS_PARALLEL_EXECUTE)
> IS
> BEGIN
1344,1425d1140
<
<
<
<
< L_CUR := DBMS_SYS_SQL.OPEN_CURSOR;
< DBMS_SYS_SQL.PARSE_AS_USER(L_CUR,
< DBMS_ASSERT.NOOP(L_TASK.SQL_STMT),
< L_TASK.LANGUAGE_FLAG,
< OWNER#,
< FALSE,
< L_TASK.EDITION,
< L_TASK.APPLY_CROSSEDITION_TRIGGER,
< L_FIRE_APPLY_TRIGGER);
<
<
<
<
<
<
< LOOP
<
<
<
< IF (IS_STOP_FLAG_SET(OWNER#, TASK_NAME)) THEN
< EXIT;
< END IF;
<
<
<
<
<
< IF (GET_RANGE(OWNER#, TASK_NAME, L_CHUNK_ID,
< L_START_ROWID, L_END_ROWID, L_START_ID, L_END_ID)
< = FALSE) THEN
< EXIT;
< END IF;
<
<
<
<
<
<
<
<
< BEGIN
< IF (L_TASK.CHUNK_TYPE = ROWID_RANGE) THEN
< DBMS_SYS_SQL.BIND_VARIABLE(L_CUR, ':start_id', L_START_ROWID);
< DBMS_SYS_SQL.BIND_VARIABLE(L_CUR, ':end_id', L_END_ROWID);
< ELSE
< DBMS_SYS_SQL.BIND_VARIABLE(L_CUR, ':start_id', L_START_ID);
< DBMS_SYS_SQL.BIND_VARIABLE(L_CUR, ':end_id', L_END_ID);
< END IF;
<
< L_ROWS_PROCESSED := DBMS_SYS_SQL.EXECUTE(L_CUR);
<
<
<
<
<
< SET_CHUNK_STATUS(OWNER#, TASK_NAME, L_CHUNK_ID,
< DBMS_PARALLEL_EXECUTE.PROCESSED);
< EXCEPTION WHEN OTHERS THEN
<
<
<
<
<
< SET_CHUNK_STATUS(OWNER#, TASK_NAME, L_CHUNK_ID,
< DBMS_PARALLEL_EXECUTE.PROCESSED_WITH_ERROR,
< SQLCODE, SQLERRM);
< END;
<
<
<
<
< COMMIT;
< END LOOP;
<
<
<
<
< DBMS_SYS_SQL.CLOSE_CURSOR(L_CUR);
1428d1142
<
1449a1164
>
1505a1221,1250
> END;
>
> PROCEDURE INSERT_CHUNKS_ROW(OWNER# NUMBER, TASK_NAME VARCHAR2,
> STATUS NUMBER, START_ID NUMBER, END_ID NUMBER,
> START_ROWID UROWID, END_ROWID UROWID)
> ACCESSIBLE BY (PACKAGE SYS.DBMS_PARALLEL_EXECUTE) IS
> L_SEQ NUMBER;
> BEGIN
> L_SEQ := SEQ_NEXT_VAL;
> INSERT INTO DBMS_PARALLEL_EXECUTE_CHUNKS$
> (CHUNK_ID, TASK_OWNER#, TASK_NAME, STATUS,
> START_ID, END_ID, START_ROWID, END_ROWID)
> VALUES (L_SEQ, OWNER#, TASK_NAME, STATUS, START_ID, END_ID,
> START_ROWID, END_ROWID);
>
> COMMIT;
> END;
>
> PROCEDURE GET_BLOCKS_NUM_ROWS(TABLE_OWNER IN VARCHAR2,
> TABLE_NAME IN VARCHAR2,
> BLOCKS OUT NUMBER, NUM_ROWS OUT NUMBER)
> ACCESSIBLE BY (PACKAGE SYS.DBMS_PARALLEL_EXECUTE) IS
> L_TABLE_NAME DBMS_ID := TABLE_NAME;
> BEGIN
>
> SELECT T.BLOCKS, T.NUM_ROWS
> INTO BLOCKS, NUM_ROWS
> FROM DBA_TABLES T
> WHERE T.OWNER = TABLE_OWNER
> AND T.TABLE_NAME = L_TABLE_NAME;
122c122 < CATALOGVERSION CONSTANT VARCHAR2(11) := '19.07.01.00'; --- > CATALOGVERSION CONSTANT VARCHAR2(11) := '19.07.02.00';
122c122 < CATALOGVERSION CONSTANT VARCHAR2(11) := '19.08.00.00'; --- > CATALOGVERSION CONSTANT VARCHAR2(11) := '19.08.01.00';
122c122 < CATALOGVERSION CONSTANT VARCHAR2(11) := '19.08.00.00'; --- > CATALOGVERSION CONSTANT VARCHAR2(11) := '19.09.00.00'; 25966,25968c25966,25968 < IF ((UNTILTIME IS NULL AND UNTILSCN IS NULL) OR < LBREC.DF_CKP_MOD_TIME < UNTILTIME OR < LBREC.DF_CHECKPOINT_CHANGE# <= UNTILSCN) THEN --- > IF (LBREC.DF_CKP_MOD_TIME < UNTILTIME OR > (UNTILTIME IS NULL AND > LBREC.DF_CHECKPOINT_CHANGE# <= UNTILSCN)) THEN
11a12 > STMT_BUF VARCHAR2(4000); 15c16,18 < --- > STMT_BUF := 'ALTER SESSION SET EVENTS ''25475 TRACE NAME' > ||' CONTEXT FOREVER, LEVEL 1'''; > EXECUTE IMMEDIATE STMT_BUF; 35a39 > STMT_BUF VARCHAR2(4000); 38a43,45 > STMT_BUF := 'ALTER SESSION SET EVENTS ''25475 TRACE NAME' > ||' CONTEXT FOREVER, LEVEL 1'''; > EXECUTE IMMEDIATE STMT_BUF; 58a66 > STMT_BUF VARCHAR2(4000); 62c70,73 < --- > STMT_BUF := 'ALTER SESSION SET EVENTS ''25475 TRACE NAME' > ||' CONTEXT FOREVER, LEVEL 1'''; > EXECUTE IMMEDIATE STMT_BUF; > 103c114,118 < --- > STMT_BUF := 'ALTER SESSION SET EVENTS ''25475 TRACE NAME' > ||' CONTEXT FOREVER, LEVEL 1'''; > EXECUTE IMMEDIATE STMT_BUF; > STMT_BUF := NULL; >
305a306 > CVAL INTEGER; 312a314 > 345,347c347,354 < INSERT INTO SYS.MVREF$_RUN_STATS( < RUN_OWNER_USER#, REFRESH_ID, NUM_MVS_TOTAL, < NUM_MVS_CURRENT, ROLLBACK_SEG, ATOMIC_REFRESH, --- > SELECT COLLECTION_LEVEL INTO CVAL > FROM SYS.MVREF$_STATS_SYS_DEFAULTS > FETCH FIRST ROW ONLY; > > IF ( CVAL <> 0 ) THEN > INSERT INTO SYS.MVREF$_RUN_STATS( > RUN_OWNER_USER#, REFRESH_ID, NUM_MVS_TOTAL, > NUM_MVS_CURRENT, ROLLBACK_SEG, ATOMIC_REFRESH, 353,360c360,368 < VALUES ( < RUN_OWNER1, REFRESH_ID1, SNAPCNT, < SNAPCNT, ROLLBACK_SEG1, ATOMIC_REFRESH2, < NULL, NULL, NULL, NULL, NULL, < 'Y', 0, 0, 0, < MV_LIST_BUF, METHOD1, PUSH_DEFERRED_RPC2, OUT_OF_PLACE2, NESTED2, < REFRESH_AFTER_ERRORS2, PURGE_OPTION1, PARALLELISM1, HEAP_SIZE1); < --- > VALUES ( > RUN_OWNER1, REFRESH_ID1, SNAPCNT, > SNAPCNT, ROLLBACK_SEG1, ATOMIC_REFRESH2, > NULL, NULL, NULL, NULL, NULL, > 'Y', 0, 0, 0, > MV_LIST_BUF, METHOD1, PUSH_DEFERRED_RPC2, OUT_OF_PLACE2, NESTED2, > REFRESH_AFTER_ERRORS2, PURGE_OPTION1, PARALLELISM1, HEAP_SIZE1); > END IF; >
24c24,26 < FUNCTION DROP_COLLECTION (COLLECTION_NAME NVARCHAR2) --- > FUNCTION DROP_COLLECTION (COLLECTION_NAME NVARCHAR2 > , PURGE BOOLEAN DEFAULT FALSE > , DROP_MAPPED_TABLE BOOLEAN DEFAULT FALSE) 27c29 < LANGUAGE C --- > EXTERNAL 32,35c34,41 < COLLECTION_NAME OCISTRING, < COLLECTION_NAME INDICATOR SB2, < RETURN INDICATOR SB2, < RETURN OCINUMBER); --- > COLLECTION_NAME OCISTRING, > COLLECTION_NAME INDICATOR SB2, > PURGE, > PURGE INDICATOR SB2, > DROP_MAPPED_TABLE, > DROP_MAPPED_TABLE INDICATOR SB2, > RETURN INDICATOR SB2, > RETURN OCINUMBER); 72a79,85 > > FUNCTION TO_UUID(PLACEHOLDER IN VARCHAR2) > RETURN VARCHAR2 > IS > BEGIN > RETURN RAWTOHEX(SYS_GUID()); > END;
48,49c48,49
< FUNCTION ISJDCS
< RETURN BOOLEAN
---
> FUNCTION GETSERVICENAME
> RETURN VARCHAR2
51a52
> V_NAME VARCHAR2(200);
53,55c54,58
< SELECT VALUE INTO V_PDB_LOCKDOWN FROM V$PARAMETER WHERE NAME = 'pdb_lockdown';
< IF (UPPER(V_PDB_LOCKDOWN) = 'JDCS') THEN
< RETURN TRUE;
---
> V_NAME := SYS_CONTEXT('userenv', 'cloud_service');
> IF (V_NAME IS NULL) THEN
> RETURN 'ONPREMISE';
> ELSE
> RETURN UPPER(V_NAME);
57d59
< RETURN FALSE;
60c62
< RETURN FALSE;
---
> RETURN 'UNKNOWN';
66,68c68,71
< PROCEDURE CHECKCOMPAT
< IS
< V_COMPATIBLE NUMBER;
---
> FUNCTION CHECKANDGETCOMPAT
> RETURN NUMBER
> IS
> V_COMPATIBLE NUMBER;
77a81,89
>
> RETURN V_COMPATIBLE;
> END;
>
> PROCEDURE CHECKCOMPAT
> IS
> V_COMPATIBLE NUMBER;
> BEGIN
> V_COMPATIBLE := CHECKANDGETCOMPAT;
2803c2803,2804 < AND ORIGIN = DBMS_SMB_INTERNAL.BASELINE_ORIGIN_AUTO_INDEX; --- > AND ORIGIN = SYS.DBMS_SMB_INTERNAL.BASELINE_ORIGIN_AUTO_INDEX > AND LAST_VERIFIED IS NOT NULL;
34a35,36
> FLAGS_EVOLVE_PENDING CONSTANT BINARY_INTEGER :=
> DBMS_SQLTUNE_INTERNAL.SQLOBJ_FLG_PENDING;
512c514
< min(cpu_plus_io)) > :ratio / 100)
---
> min(cpu_plus_io)) > (:ratio / 100))
514c516
< HAVING MAX(s.buffer_gets * 10000 + s.cpu_time) / 100 > :threshold)#';
---
> HAVING MAX(s.buffer_gets * 10000 + s.cpu_time) / 1000 > :threshold)#';
1827c1829
< 'INTERVAL', P_VALUE);
---
> 'INTERVAL', P_VALUE);
1843a1846,1857
>
>
>
>
>
>
> PRVT_ADVISOR.SET_TASK_PARAMETER(
> TASK_NAME => AUTO_EVOLVE_TASK_NAME,
> PARAMETER => PAR_TIME_LIMIT,
> DATA => P_VALUE - 60,
> TASK_OWNER_ID => PRVT_ADVISOR.SYS_USER_ID);
>
4433,4434c4447,4450
< SRC_LOC := 'AUTOMATIC_WORKLOAD_REPOSITORY + CURSOR_CACHE + ' ||
< 'SQL_TUNING_SET';
---
>
>
>
> SRC_LOC := 'SQL_TUNING_SET';
6229a6246,6334
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> PROCEDURE HIGH_FREQ_EVOLVE_TASK_PROC
> IS
> EXEC_NAME VARCHAR2(300);
> TASK_ID NUMBER;
> EXEC_STATUS NUMBER;
> TRACE PLS_INTEGER := DBMS_SPM_INTERNAL.GET_SPM_TRACING_VALUE();
> PLAN_NUM NUMBER;
> CURSOR MALFORMED_CUR IS
> SELECT SO.NAME PLAN_NAME
> FROM SQLOBJ$AUXDATA SA, SQLOBJ$ SO
> WHERE SO.SIGNATURE = SA.SIGNATURE AND
> SO.CATEGORY = SA.CATEGORY AND
> SO.PLAN_ID = SA.PLAN_ID AND
> SO.OBJ_TYPE = DBMS_SMB_INTERNAL.SMBTYPE_PLAN_BASELINE#
> AND SA.OBJ_TYPE = DBMS_SMB_INTERNAL.SMBTYPE_PLAN_BASELINE# AND
> (SA.OPTIMIZER_ENV IS NULL OR
> SA.PARSING_SCHEMA_NAME IS NULL);
> BEGIN
>
> IF (SYS_CONTEXT('userenv', 'con_id') != 0 AND
> SYS_CONTEXT('userenv', 'con_id') <= 2 ) THEN
> RETURN;
> END IF;
>
> SELECT MAX(STATUS#), MAX(EXECUTION_NAME) INTO EXEC_STATUS, EXEC_NAME
> FROM DBA_ADVISOR_EXECUTIONS
> WHERE TASK_NAME = AUTO_EVOLVE_TASK_NAME AND EXECUTION_NAME IN
> (SELECT MAX(EXECUTION_NAME)
> FROM DBA_ADVISOR_EXECUTIONS
> WHERE TASK_NAME = AUTO_EVOLVE_TASK_NAME);
>
> I_SPM_TRC(TRACE,' execution status: ' || EXEC_STATUS);
> I_SPM_TRC(TRACE,' execution name: ' || EXEC_NAME);
>
> IF (EXEC_NAME IS NULL OR
> EXEC_STATUS = PRVT_ADVISOR.TASK_STATE_COMPLETED OR
> EXEC_STATUS = PRVT_ADVISOR.TASK_STATE_ERROR) THEN
>
> EXEC_NAME := 'SYS_SPM_' || TO_CHAR(SYSDATE, 'YYYY-MM-DD/HH24:MI:SS');
>
> I_SPM_TRC(TRACE, 'Starting SPM evolve task, ' || ' execution name: '
> || EXEC_NAME);
>
> EXEC_NAME := DBMS_SPM.EXECUTE_EVOLVE_TASK(
> TASK_NAME => AUTO_EVOLVE_TASK_NAME,
> EXECUTION_NAME => EXEC_NAME);
> ELSE
>
> IF (EXEC_STATUS = PRVT_ADVISOR.TASK_STATE_EXEC) THEN
> DBMS_SPM.INTERRUPT_EVOLVE_TASK(AUTO_EVOLVE_TASK_NAME);
> END IF;
>
> I_SPM_TRC(TRACE, 'Resuming SPM evolve task, ' || ' execution name: '
> || EXEC_NAME);
>
> DBMS_SPM.RESUME_EVOLVE_TASK(TASK_NAME => AUTO_EVOLVE_TASK_NAME);
> END IF;
>
>
> FOR CUR IN MALFORMED_CUR
> LOOP
> PLAN_NUM := DBMS_SPM.DROP_SQL_PLAN_BASELINE(PLAN_NAME => CUR.PLAN_NAME);
> END LOOP;
>
> COMMIT;
>
> EXCEPTION
> WHEN OTHERS THEN
> I_SPM_TRC(TRACE, 'SPM evolve error ' || ' execution name: '
> || EXEC_NAME || ' execution status ' || EXEC_STATUS);
> RAISE;
> END HIGH_FREQ_EVOLVE_TASK_PROC;
38817a38818,38819 > > STSFLAGS := 0;
2150c2150,2151 < QB_REGISTRY IN OUT NOCOPY STRING_TAB_TYPE_XL) --- > QB_REGISTRY IN OUT NOCOPY STRING_TAB_TYPE_XL, > ADS_SYSTEM IN OUT NOCOPY VARCHAR2) 2429a2431,2437 > > > EXTRACT_TEMP := > q'#extractvalue(xmlval, '/*/info[@type = "ads_system"]')#'; > EXTRACT_SQL := EXTRACT_SQL || ', ' || EXTRACT_TEMP; > > 2451c2459 < SHARD_ID, HINTUSAGE --- > SHARD_ID, HINTUSAGE, ADS_SYSTEM 5279a5288 > ADS_SYSTEM VARCHAR2(5) DEFAULT NULL; 5495c5504,5505 < QB_REGISTRY); --- > QB_REGISTRY, > ADS_SYSTEM); 7446c7456,7461 < THEN 'AUTO' --- > THEN 'AUTO' || > > CASE WHEN ADS_SYSTEM = 'yes' > THEN ' (SYSTEM)' > ELSE '' > END
1765,1766c1765 < fi.file_name) order by fi.relative_fno)) < order by tbs.tablespace_name)) --- > fi.file_name) order by fi.relative_fno)))) 1811a1811 > order by tbs.tablespace_name
263a264,356
>
>
>
>
>
>
>
>
> FUNCTION I_GET_SESS_ASH_OMX_XML(
> P_INST_ID IN NUMBER,
> P_SID IN NUMBER,
> P_SERIAL IN NUMBER,
> P_START_TIME IN DATE,
> P_END_TIME IN DATE,
> P_COMPRESS_XML IN NUMBER)
> RETURN XMLTYPE
> IS
> L_ACTIVITY_XML XMLTYPE;
> L_BEGIN_TIME_UTC VARCHAR2(32767) := NULL;
> L_END_TIME_UTC VARCHAR2(32767) := NULL;
> L_TZ VARCHAR2(10) := NULL;
> L_FILTER_LIST DBMS_REPORT.REF_STRING_IDSPEC;
> L_FILTER_LIST_XML VARCHAR2(32767) := NULL;
> L_COMPRESS_XML NUMBER := 1;
>
>
>
>
>
> L_MINIMIZE_COST VARCHAR2(8) := 'y';
>
> BEGIN
>
>
> IF (P_COMPRESS_XML IS NOT NULL) THEN
> L_COMPRESS_XML := P_COMPRESS_XML;
> ELSE
> L_COMPRESS_XML := 1;
> END IF;
>
>
>
> L_TZ := DBMS_SQLTUNE_UTIL2.GET_TZ_OFFSET();
>
> L_BEGIN_TIME_UTC := TO_CHAR(P_START_TIME,
> 'yyyy-mm-dd hh24:mi:ss') || L_TZ;
> L_BEGIN_TIME_UTC :=
> TO_CHAR(CAST(SYS_EXTRACT_UTC(
> TO_TIMESTAMP_TZ(L_BEGIN_TIME_UTC,
> 'yyyy-mm-dd hh24:mi:ssTZH:TZM')) AS DATE),
> DBMS_REPORT.DATE_FMT);
>
> L_END_TIME_UTC := TO_CHAR(P_END_TIME,
> 'yyyy-mm-dd hh24:mi:ss') || L_TZ;
> L_END_TIME_UTC :=
> TO_CHAR(CAST(SYS_EXTRACT_UTC(
> TO_TIMESTAMP_TZ(L_END_TIME_UTC,
> 'yyyy-mm-dd hh24:mi:ssTZH:TZM')) AS DATE),
> DBMS_REPORT.DATE_FMT);
>
> L_FILTER_LIST('physical_session') := P_INST_ID || ',' ||
> P_SID || ',' ||
> P_SERIAL;
>
>
>
> L_FILTER_LIST_XML := XMLTYPE('<fs><f n="physical_session" v="' ||
> P_INST_ID || ',' || P_SID || ',' || P_SERIAL ||
> '"/></fs>').GETCLOBVAL();
>
> L_ACTIVITY_XML := SYS.PRVT_ASH_OMX.REPORT_OMX_ASHVIEWER_XML(
> INST_ID => P_INST_ID,
> BEGIN_TIME_UTC => L_BEGIN_TIME_UTC,
> END_TIME_UTC => L_END_TIME_UTC,
> MINIMIZE_COST => L_MINIMIZE_COST,
> FILTER_LIST => L_FILTER_LIST_XML,
> REPORT_PARAMS => L_FILTER_LIST);
>
> IF (L_ACTIVITY_XML IS NOT NULL) THEN
> SELECT XMLELEMENT("ashrep",L_ACTIVITY_XML)
> INTO L_ACTIVITY_XML
> FROM SYS.DUAL;
> END IF;
>
> L_ACTIVITY_XML := DBMS_REPORT.TRANSFORM_REPORT_XML(
> L_ACTIVITY_XML,
> ZLIB2BASE64 => L_COMPRESS_XML);
>
> RETURN L_ACTIVITY_XML;
>
> END I_GET_SESS_ASH_OMX_XML;
>
>
709a803,816
>
>
>
>
>
>
>
>
>
>
>
>
>
>
719a827,828
> P_REPORT_LEVEL IN VARCHAR2 DEFAULT 'all',
> P_COMPRESS_XML IN NUMBER DEFAULT 1,
757a867,870
> L_REPORT_LEVEL VARCHAR2(32) := LOWER(P_REPORT_LEVEL);
> L_IS_OMX NUMBER;
> L_COMPRESS_XML NUMBER;
>
763a877,891
> IF (P_REPORT_LEVEL IS NULL) THEN
> L_REPORT_LEVEL := 'all';
> END IF;
>
>
> L_IS_OMX := CASE WHEN SYS.PRVT_EMX.IS_OMX() THEN 1 ELSE 0 END;
>
>
> IF (P_COMPRESS_XML IS NOT NULL) THEN
> L_COMPRESS_XML := P_COMPRESS_XML;
> ELSE
> L_COMPRESS_XML := 1;
> END IF;
>
>
846,861c974,1008
< IF (L_SESSION_EXISTS > 0) THEN
<
< L_SESSION_XML := I_GET_SESSION_XML(P_INST_ID => L_INST_ID,
< P_SID => L_SID,
< P_SERIAL => L_SERIAL,
< P_SHOW_SQL=> P_SHOW_SQL);
< ELSE
<
< L_SESSION_XML := I_GET_SESSION_INFO_HIST_XML(P_INST_ID => L_INST_ID,
< P_SID => L_SID,
< P_SERIAL => L_SERIAL,
< P_IS_REALTIME=> P_IS_REALTIME,
< P_START_TIME => L_START_TIME,
< P_END_TIME => L_END_TIME,
< P_SHOW_SQL => P_SHOW_SQL);
< END IF;
---
> IF ((L_REPORT_LEVEL = 'all') OR (L_REPORT_LEVEL = 'summary')) THEN
> IF (L_SESSION_EXISTS > 0) THEN
>
> L_SESSION_XML := I_GET_SESSION_XML(P_INST_ID => L_INST_ID,
> P_SID => L_SID,
> P_SERIAL => L_SERIAL,
> P_SHOW_SQL=> P_SHOW_SQL);
> ELSE
>
> L_SESSION_XML := I_GET_SESSION_INFO_HIST_XML(P_INST_ID => L_INST_ID,
> P_SID => L_SID,
> P_SERIAL => L_SERIAL,
> P_IS_REALTIME=> P_IS_REALTIME,
> P_START_TIME => L_START_TIME,
> P_END_TIME => L_END_TIME,
> P_SHOW_SQL => P_SHOW_SQL);
> END IF;
>
> IF (L_IS_OMX = 1) THEN
>
> L_ACTIVITY_XML := I_GET_SESS_ASH_OMX_XML(P_INST_ID => L_INST_ID,
> P_SID => L_SID,
> P_SERIAL => L_SERIAL,
> P_START_TIME => L_START_TIME,
> P_END_TIME => L_END_TIME,
> P_COMPRESS_XML => L_COMPRESS_XML);
>
> ELSE
>
> L_ACTIVITY_XML := I_GET_ACTIVITY_XML(P_INST_ID => L_INST_ID,
> P_SID => L_SID,
> P_SERIAL => L_SERIAL,
> P_IS_REALTIME => P_IS_REALTIME,
> P_START_TIME => L_START_TIME,
> P_END_TIME => L_END_TIME);
863,871c1010
< IF (P_IS_REALTIME = 1) THEN
<
< L_STASH_XML := SYS.DBMS_SQLTUNE.BUILD_STASH_XML(
< SESSION_ID => L_SID,
< SESSION_SERIAL => L_SERIAL,
< SESSION_INST_ID=> L_INST_ID,
< PX_MODE => 'yes',
< START_TIME => L_START_TIME,
< END_TIME => L_END_TIME);
---
> END IF;
873c1012
< END IF;
---
> END IF;
875,881c1014,1023
<
< L_ACTIVITY_XML := I_GET_ACTIVITY_XML(P_INST_ID => L_INST_ID,
< P_SID => L_SID,
< P_SERIAL => L_SERIAL,
< P_IS_REALTIME=> P_IS_REALTIME,
< P_START_TIME => L_START_TIME,
< P_END_TIME => L_END_TIME);
---
> IF ((L_REPORT_LEVEL = 'all') OR (L_REPORT_LEVEL = 'metrics')) THEN
> IF (P_IS_REALTIME = 1) THEN
>
> L_STASH_XML := SYS.DBMS_SQLTUNE.BUILD_STASH_XML(
> SESSION_ID => L_SID,
> SESSION_SERIAL => L_SERIAL,
> SESSION_INST_ID=> L_INST_ID,
> PX_MODE => 'yes',
> START_TIME => L_START_TIME,
> END_TIME => L_END_TIME);
883,885c1025,1031
<
< IF (P_IS_REALTIME = 1) THEN
< L_MONITOR_LIST_XML := SYS.DBMS_SQLTUNE.REPORT_SQL_MONITOR_LIST_XML(
---
> END IF;
> END IF;
>
> IF ((L_REPORT_LEVEL = 'all') OR (L_REPORT_LEVEL = 'sqlmonitor')) THEN
>
> IF (P_IS_REALTIME = 1) THEN
> L_MONITOR_LIST_XML := SYS.DBMS_SQLTUNE.REPORT_SQL_MONITOR_LIST_XML(
895,897c1041,1043
< ELSE
<
< L_MONITOR_LIST_XML := SYS.DBMS_AUTO_REPORT.REPORT_REPOSITORY_LIST_XML(
---
> ELSE
>
> L_MONITOR_LIST_XML := SYS.DBMS_AUTO_REPORT.REPORT_REPOSITORY_LIST_XML(
906,908c1052,1054
< TOP_N_DETAIL_COUNT=> P_MONITOR_LIST_DETAIL);
< END IF;
<
---
> TOP_N_DETAIL_COUNT => P_MONITOR_LIST_DETAIL);
> END IF;
> END IF;
911,919c1057,1068
< IF (P_ACTIVITY_DIMENSION IS NOT NULL) THEN
<
< L_INLINE_ASH_XML := I_GET_INLINE_ACTIVITY_XML(
< P_INST_ID => L_INST_ID,
< P_SID => L_SID,
< P_SERIAL => L_SERIAL,
< P_START_TIME => L_START_TIME,
< P_END_TIME => L_END_TIME,
< P_ACTIVITY_DIM => P_ACTIVITY_DIMENSION);
---
> IF (L_IS_OMX = 0) THEN
>
> IF (P_ACTIVITY_DIMENSION IS NOT NULL) THEN
>
> L_INLINE_ASH_XML := I_GET_INLINE_ACTIVITY_XML(
> P_INST_ID => L_INST_ID,
> P_SID => L_SID,
> P_SERIAL => L_SERIAL,
> P_START_TIME => L_START_TIME,
> P_END_TIME => L_END_TIME,
> P_ACTIVITY_DIM => P_ACTIVITY_DIMENSION);
> END IF;
266,272d265 < function NLS_CHARSET_NAME(csetid PLS_INTEGER) < return VARCHAR2 is < v varchar2(2000); < begin < select nls_charset_name(csetid) into v from sys.dual; < return v; < end NLS_CHARSET_NAME; 274,280d266 < function NLS_CHARSET_ID(csetname VARCHAR2) < return PLS_INTEGER is < i PLS_INTEGER; < begin < select nls_charset_id(csetname) into i from sys.dual; < return i; < end NLS_CHARSET_ID; 586a573,574 > function pescsetname(csetid PLS_INTEGER) return varchar2; > pragma interface (c, pescsetname); 587a576,609 > -- Special: if the ICD raises ICD_UNABLE_TO_COMPUTE, that means we should do > -- the old 'select nls_charset_name(...) from dual;' thing. This allows us to do > -- the select from PL/SQL rather than having to do it from C (within the ICD.) > function NLS_CHARSET_NAME(csetid PLS_INTEGER) > return VARCHAR2 is > v varchar2(2000); > begin > v := pescsetname(csetid); > return v; > exception > when ICD_UNABLE_TO_COMPUTE then > select nls_charset_name(csetid) into v from sys.dual; > return v; > end NLS_CHARSET_NAME; > > > function pescsetid(csetname VARCHAR2) return pls_integer; > pragma interface (c, pescsetid); > > -- Special: if the ICD raises ICD_UNABLE_TO_COMPUTE, that means we should do > -- the old 'select nls_charset_id(...) from dual;' thing. This allows us to do > -- the select from PL/SQL rather than having to do it from C (within the ICD.) > function NLS_CHARSET_ID(csetname VARCHAR2) > return PLS_INTEGER is > i PLS_INTEGER; > begin > i := pescsetid(csetname); > return i; > > exception > when ICD_UNABLE_TO_COMPUTE then > select nls_charset_id(csetname) into i from sys.dual; > return i; > end NLS_CHARSET_ID;
74c74,82 < feature_usage := 'Number of Unified Audit policies=' || --- > --Enh 31221454: Check if Pure Unified Auditing is enabled > if (uniaud_linkon > 0) then > feature_usage := 'Pure Unified Auditing=TRUE; '; > else > feature_usage := 'Pure Unified Auditing=FALSE; '; > end if; > > feature_usage := feature_usage || > 'Number of Unified Audit policies=' ||
52c52,61 < RETURN SODA_Document_T --- > RETURN SODA_Document_T, > > MEMBER FUNCTION save (document SODA_Document_T) > RETURN NUMBER, > > MEMBER FUNCTION save_And_Get (document SODA_Document_T) > RETURN SODA_Document_T, > > MEMBER FUNCTION truncate > RETURN NUMBER
8c8 < MEMBER FUNCTION count --- > MEMBER FUNCTION count 17c17 < MEMBER FUNCTION get_Cursor --- > MEMBER FUNCTION get_Cursor 20c20 < MEMBER FUNCTION get_One --- > MEMBER FUNCTION get_One 23c23 < MEMBER FUNCTION keys (key_List SODA_Key_List_T) --- > MEMBER FUNCTION keys (key_List SODA_Key_List_T) 26c26 < MEMBER FUNCTION limit (limit NUMBER) --- > MEMBER FUNCTION limit (limit NUMBER) 29c29 < MEMBER FUNCTION remove --- > MEMBER FUNCTION remove 32c32 < MEMBER FUNCTION replace_One (document SODA_Document_T) --- > MEMBER FUNCTION replace_One (document SODA_Document_T) 35c35 < MEMBER FUNCTION replace_One_And_Get (document SODA_Document_T) --- > MEMBER FUNCTION replace_One_And_Get (document SODA_Document_T) 38c38 < MEMBER FUNCTION skip (offset NUMBER) --- > MEMBER FUNCTION skip (offset NUMBER) 41c41 < MEMBER FUNCTION version (version VARCHAR2) --- > MEMBER FUNCTION version (version VARCHAR2)
117c117 < MEMBER FUNCTION INSERT_MANY (DOCUMENT_LIST SODA_DOCUMENT_LIST_T) --- > MEMBER FUNCTION INSERT_MANY (DOCUMENT_LIST SODA_DOCUMENT_LIST_T) 206a207,247 > RETURN); > > MEMBER FUNCTION SAVE (DOCUMENT SODA_DOCUMENT_T) > RETURN NUMBER IS > LANGUAGE C > LIBRARY DBMS_SODACOLL_LIB > NAME "save" > WITH CONTEXT > PARAMETERS (CONTEXT, > SELF, > SELF INDICATOR SB2, > DOCUMENT, > DOCUMENT INDICATOR SB2, > RETURN INDICATOR SB2, > RETURN ); > > MEMBER FUNCTION SAVE_AND_GET (DOCUMENT SODA_DOCUMENT_T) > RETURN SODA_DOCUMENT_T IS > EXTERNAL NAME "saveAndGet" > LANGUAGE C > LIBRARY DBMS_SODACOLL_LIB > WITH CONTEXT > PARAMETERS (CONTEXT, > SELF, > SELF INDICATOR SB2, > DOCUMENT, > DOCUMENT INDICATOR SB2, > RETURN DURATION OCIDURATION, > RETURN INDICATOR SB2, > RETURN); > > MEMBER FUNCTION TRUNCATE > RETURN NUMBER IS > LANGUAGE C > LIBRARY DBMS_SODACOLL_LIB > NAME "truncate" > WITH CONTEXT > PARAMETERS (CONTEXT, > SELF, > SELF INDICATOR SB2, > RETURN INDICATOR SB2,
5c5 < MEMBER FUNCTION COUNT --- > MEMBER FUNCTION COUNT 32c32 < MEMBER FUNCTION GET_CURSOR --- > MEMBER FUNCTION GET_CURSOR 45c45 < MEMBER FUNCTION GET_ONE --- > MEMBER FUNCTION GET_ONE 73c73 < MEMBER FUNCTION KEYS (KEY_LIST SODA_KEY_LIST_T) --- > MEMBER FUNCTION KEYS (KEY_LIST SODA_KEY_LIST_T) 88c88 < MEMBER FUNCTION LIMIT (LIMIT NUMBER) --- > MEMBER FUNCTION LIMIT (LIMIT NUMBER) 103c103 < MEMBER FUNCTION REMOVE --- > MEMBER FUNCTION REMOVE 115c115 < MEMBER FUNCTION REPLACE_ONE (DOCUMENT SODA_DOCUMENT_T) --- > MEMBER FUNCTION REPLACE_ONE (DOCUMENT SODA_DOCUMENT_T) 129c129 < MEMBER FUNCTION REPLACE_ONE_AND_GET (DOCUMENT SODA_DOCUMENT_T) --- > MEMBER FUNCTION REPLACE_ONE_AND_GET (DOCUMENT SODA_DOCUMENT_T) 144c144 < MEMBER FUNCTION SKIP (OFFSET NUMBER) --- > MEMBER FUNCTION SKIP (OFFSET NUMBER) 159c159 < MEMBER FUNCTION VERSION (VERSION VARCHAR2) --- > MEMBER FUNCTION VERSION (VERSION VARCHAR2)
24a25,26
> V_REPORT_LEVEL VARCHAR2(32) := 'all';
> V_COMPRESS_XML NUMBER := 1;
78c80,92
<
---
>
> IF (V_PARAMS.EXISTS('report_level')) THEN
> V_REPORT_LEVEL := DBMS_REPORT.GET_PARAM(V_PARAMS,'report_level',
> NULLABLE=>TRUE);
> END IF;
>
>
> IF (V_PARAMS.EXISTS('compress_xml')) THEN
> V_COMPRESS_XML := TO_NUMBER(
> DBMS_REPORT.GET_PARAM(V_PARAMS,'compress_xml',
> NULLABLE=>TRUE));
> END IF;
>
90c104,106
< P_MONITOR_LIST_DETAIL => V_MONITOR_LIST_DETAIL);
---
> P_MONITOR_LIST_DETAIL => V_MONITOR_LIST_DETAIL,
> P_REPORT_LEVEL => V_REPORT_LEVEL,
> P_COMPRESS_XML => V_COMPRESS_XML);
8,11c8,23
< c.START_ROWID,
< c.END_ROWID,
< c.START_ID,
< c.END_ID,
---
> case when userenv('SCHEMAID') = c.task_owner# or userenv('SCHEMAID') = 0
> then c.START_ROWID
> else null
> end START_ROWID,
> case when userenv('SCHEMAID') = c.task_owner# or userenv('SCHEMAID') = 0
> then c.END_ROWID
> else null
> end END_ROWID,
> case when userenv('SCHEMAID') = c.task_owner# or userenv('SCHEMAID') = 0
> then c.START_ID
> else null
> end START_ID,
> case when userenv('SCHEMAID') = c.task_owner# or userenv('SCHEMAID') = 0
> then c.END_ID
> else null
> end END_ID,
17,19c17,28
< t.TABLE_OWNER,
< t.TABLE_NAME,
< t.NUMBER_COLUMN,
---
> case when userenv('SCHEMAID') = t.task_owner# or userenv('SCHEMAID') = 0
> then t.TABLE_OWNER
> else null
> end TABLE_OWNER,
> case when userenv('SCHEMAID') = t.task_owner# or userenv('SCHEMAID') = 0
> then t.TABLE_NAME
> else null
> end TABLE_NAME,
> case when userenv('SCHEMAID') = t.task_owner# or userenv('SCHEMAID') = 0
> then t.NUMBER_COLUMN
> else null
> end NUMBER_COLUMN,
22c31,34
< t.SQL_STMT,
---
> case when userenv('SCHEMAID') = t.task_owner# or userenv('SCHEMAID') = 0
> then t.SQL_STMT
> else null
> end SQL_STMT,
12a13,19 > --------------------------- > -- Materialized view option > --------------------------- > MV_REFRESH_ON_STATEMENT CONSTANT NUMBER(2) := 1; > MV_REFRESH_ON_COMMIT CONSTANT NUMBER(2) := 2; > MV_REFRESH_ON_DEMAND CONSTANT NUMBER(2) := 3; > 17a25 > 19a28 > FUNCTION GATHER_STATS return NUMBER PARALLEL_ENABLE; 111a121,200 > -- mvRefreshMode > -- This parameter specifies the materialized view refresh mode. It is one > -- of the following values: > -- . MV_REFRESH_ON_STATEMENT (default) > -- . MV_REFRESH_ON_COMMIT > -- . MV_REFRESH_ON_DEMAND > -- path > -- The path of the JSON field to be expanded. It uses JSON path expression > -- syntax, e.g. $ will create a view starting from the JSON document root; > -- $.purchaseOrder will create a view starting from purchaseOrder. It > -- expands the children/descendants under purchaseOrder, and create view > -- columns for every scalar values. > -- Just like create_view_on_path, the top level scalars are always include > -- in the view, no matter if they are under the given path. In other words, > -- one can create a view with only top level scalars by specifying a path > -- pointing to a top level scalar (not under an array). > -- resolveNameConflicts > -- By default, if there are conflicts among o:preferred_column_name, an > -- error will be raised. By setting this parameter to TRUE, the procedure > -- will automatically resolve the view column name conflicts by appending > -- a sequence number. > -- colNamePrefix > -- By default, the view column name is the same as the JSON field name. > -- This parameter allows one to provide a prefix to prepend to the view > -- column names. > -- mixedCaseColumns > -- By default, the view column names are case sensitive. This parameter > -- allows one to change the behavior to case insensitive. > --------------------------------------------- > PROCEDURE create_view(viewName VARCHAR2, > tableName VARCHAR2, > jcolName VARCHAR2, > dataguide CLOB, > resourcePath VARCHAR2 DEFAULT NULL, > materialize BOOLEAN DEFAULT FALSE, > mvRefreshMode NUMBER DEFAULT MV_REFRESH_ON_STATEMENT, > path VARCHAR2 DEFAULT '$', > resolveNameConflicts BOOLEAN DEFAULT FALSE, > colNamePrefix VARCHAR2 DEFAULT NULL, > mixedCaseColumns BOOLEAN DEFAULT FALSE); > > --------------------------------------------- > -- Similar to create_view, but returns the creating view DDL without acutally > -- creating the view. > -- When viewName is null, it only returns the select statement of the view DDL. > -- As one json_table can only produce at most 1000 columns, we will split paths > -- into joins among multiplt json_tables if the paths are more than 1000. > -- E.g. > -- select rt.*, jt1.*, jt2.* > -- from jtab rt, > -- json_table(jcol, '$' columns > -- c1 number path '$.c1', > -- c2 number path '$.c2', > -- ... > -- c1000 number path '$.c1000') jt1, > -- json_table(jcol, '$' columns > -- c1001 number path '$.c1001', > -- ... > -- c1555 number path '$.c1555') jt2; > -- We start a new json_table only when the current field is top > -- scalar. If the current field is under array when json_table reaches 1000 > -- limit, skip (not include them in view SQL) until we see the next top scalar. > -- This is avoid cardinality issue. E.g. > -- select rt.*, jt1.*, jt2.*, jt3.* > -- from jtab rt, > -- json_table(jcol, '$' columns > -- c1 number path '$.c1', > -- c2 number path '$.c2', > -- ... > -- c1000 number path '$.c1000') jt1, > -- json_table(jcol, '$' columns > -- c1001 number path '$.c1001', > -- ... > -- nested path '$.c1555' columns > -- (d1 number path '$.d1', > -- ... ) jt2, > -- json_table(jcol, '$' columns > -- c1556 number path '$.c1556', > -- ... > -- c1789 number path '$.c1789') jt3; 113c202 < PROCEDURE create_view(viewName VARCHAR2, --- > FUNCTION get_view_sql(viewName VARCHAR2, 115c204 < jcolName VARCHAR2, --- > jcolName VARCHAR2, 117,118c206,212 < resourcePath VARCHAR2 DEFAULT NULL, < materialize BOOLEAN DEFAULT FALSE); --- > materialize BOOLEAN DEFAULT FALSE, > mvRefreshMode NUMBER DEFAULT MV_REFRESH_ON_STATEMENT, > path VARCHAR2 DEFAULT '$', > resolveNameConflicts BOOLEAN DEFAULT FALSE, > colNamePrefix VARCHAR2 DEFAULT NULL, > mixedCaseColumns BOOLEAN DEFAULT FALSE) > RETURN CLOB; 155a250,255 > -- mvRefreshMode > -- This parameter specifies the materialized view refresh mode. It is one > -- of the following values: > -- . MV_REFRESH_ON_STATEMENT (default) > -- . MV_REFRESH_ON_COMMIT > -- . MV_REFRESH_ON_DEMAND 163c263,265 < materialize BOOLEAN DEFAULT FALSE); --- > materialize BOOLEAN DEFAULT FALSE, > mvRefreshMode NUMBER > DEFAULT MV_REFRESH_ON_STATEMENT); 185a288,299 > -- resolveNameConflicts > -- By default, if there are conflicts among o:preferred_column_name, an > -- error will be raised. By setting this parameter to TRUE, the procedure > -- will automatically resolve the virtual column name conflicts by > -- appending a sequence number. > -- colNamePrefix > -- By default, the virtual column name is the same as the JSON field name. > -- This parameter allows one to provide a prefix to prepend to the > -- virtual column names. > -- mixedCaseColumns > -- By default, the virtual column names are case sensitive. This parameter > -- allows one to change the behavior to case insensitive. 189c303,306 < dataguide CLOB); --- > dataguide CLOB, > resolveNameConflicts BOOLEAN DEFAULT FALSE, > colNamePrefix VARCHAR2 DEFAULT NULL, > mixedCaseColumns BOOLEAN DEFAULT FALSE); 222c339 < hidden BOOLEAN DEFAULT FALSE); --- > hidden BOOLEAN DEFAULT FALSE);
30c30,31 < MATERIALIZE BOOLEAN); --- > MATERIALIZE BOOLEAN, > MVREFRESHMODE NUMBER);
56c56,59 < procedure DROP_COLLECTION(P_URI_NAME in nvarchar2); --- > procedure DROP_COLLECTION(P_URI_NAME in nvarchar2, > P_PURGE in varchar2 default 'FALSE', > P_DROP_MAPPED_TABLE in varchar2 default 'FALSE'); > 81,83c84,89 < procedure DROP_COLLECTIONS(P_COLLECTIONS out NVCNTAB, < P_ERRORS out VCNTAB, < P_FORCE in varchar2); --- > procedure DROP_COLLECTIONS(P_COLLECTIONS out NVCNTAB, > P_ERRORS out VCNTAB, > P_FORCE in varchar2, > P_PURGE in varchar2 default 'FALSE', > P_DROP_MAPPED_TABLE in varchar2 default 'FALSE'); > 99a106,120 > -- Returns service name (cloud), and compatible param > -- > procedure GET_SERVICE_AND_COMPATIBLE (P_SERVICE out VARCHAR2, > P_COMPATIBLE out number); > -- > -- Returns the default metadata as CLOB > -- > procedure GET_DEFAULT_METADATA_C(P_METADATA out clob); > > -- > -- Returns the default metadata as VARCHAR2 > -- > procedure GET_DEFAULT_METADATA_V(P_METADATA out varchar2); > > -- 222c243,248 < P_DATA_GUIDE in CLOB); --- > P_DATA_GUIDE in CLOB, > P_MATERIALIZE in BOOLEAN DEFAULT FALSE); > -- Replaces the value of the schemaName field in the metadata descriptor > function CHANGE_SCHEMA(P_DESCRIPTOR in varchar2, > P_SCHEMA in varchar2) > return varchar2;
12,14c12 < PROCEDURE DO_DELETE(P_URI_NAME IN NVARCHAR2, < P_OWNER IN VARCHAR2); < PROCEDURE DO_DELETE_ALL(P_OWNER IN VARCHAR2); --- > 15a14,18 > P_OWNER IN VARCHAR2, > P_SCHEMA_NAME IN VARCHAR2, > P_OBJECT_NAME IN VARCHAR2, > P_OBJECT_TYPE IN VARCHAR2, > P_CREATE_TIME IN TIMESTAMP, 16a20,23 > P_DESCRIPTOR IN VARCHAR2, > P_ROW_COUNT OUT NUMBER); > > PROCEDURE DO_DELETE(P_URI_NAME IN NVARCHAR2, 17a25,28 > PROCEDURE DO_DELETE_ALL(P_OWNER IN VARCHAR2); > PROCEDURE DO_UPDATE_MODE(P_URI_NAME IN NVARCHAR2, > P_CREATE_MODE IN VARCHAR2, > P_OWNER IN VARCHAR2); 20c31,32 < P_CREATE_MODE OUT VARCHAR2); --- > P_CREATE_MODE OUT VARCHAR2, > P_TIMEOUT IN PLS_INTEGER DEFAULT NULL);
25c25,29 < -- --- > > -- Thrown when a patch operation attempts > -- to remove the root node it is applied on > PATCH_ROOT_REMOVAL_ERROR constant number := -40667; >
7c7,8
< TYPE STRSTK IS TABLE OF VARCHAR2(130);
---
> TYPE STRSTK IS TABLE OF VARCHAR2(130) INDEX BY VARCHAR2(130);
> TYPE STEPTAB IS TABLE OF VARCHAR2(4000);
10,15c11,20
< PROCEDURE PUSHSTR(ERRST IN OUT STRSTK, COL VARCHAR2)
< IS
< BEGIN
< ERRST.EXTEND(1);
< ERRST(ERRST.COUNT) := COL;
< END;
---
> S_UNICODE_U CONSTANT NUMBER := 1;
> S_UNICODE_1 CONSTANT NUMBER := 2;
> S_UNICODE_2 CONSTANT NUMBER := 3;
> S_UNICODE_3 CONSTANT NUMBER := 4;
> S_UNICODE_4 CONSTANT NUMBER := 5;
>
>
>
>
> COL1K CONSTANT NUMBER := 999;
19a25,26
> COL VARCHAR2(130);
> FIRSTR BOOLEAN;
22,23c29,32
< FOR I IN 1..ERRST.COUNT LOOP
< IF (ERRLEN + LENGTH(ERRST(I)) + 1 > 4000) THEN
---
> COL := ERRST.FIRST;
> FIRSTR := TRUE;
> WHILE COL IS NOT NULL LOOP
> IF (ERRLEN + LENGTH(COL) + 1 > 4000) THEN
26c35,37
< IF (I > 1) THEN
---
> IF (FIRSTR) THEN
> FIRSTR := FALSE;
> ELSE
30,31c41,44
< ERRSTR := ERRSTR || ERRST(I);
< ERRLEN := ERRLEN + LENGTH(ERRST(I));
---
> ERRSTR := ERRSTR || COL;
> ERRLEN := ERRLEN + LENGTH(COL);
>
> COL := ERRST.NEXT(COL);
35,53d47
< FUNCTION LOOKUP_H(STK STRSTK, VAL VARCHAR2,
< HEAD NUMBER, TAIL NUMBER) RETURN BOOLEAN
< IS
< MID NUMBER;
< PIV VARCHAR2(130);
< BEGIN
< MID := HEAD + FLOOR((TAIL-HEAD)/2);
< PIV := STK(MID);
<
< IF HEAD = TAIL THEN
< BEGIN
<
<
<
<
<
< RETURN PIV = VAL;
< END;
< END IF;
55,61d48
< IF PIV = VAL THEN
< RETURN TRUE;
< ELSIF (PIV > VAL) THEN
< RETURN LOOKUP_H(STK, VAL, HEAD, MID);
< ELSE
< RETURN LOOKUP_H(STK, VAL, MID+1, TAIL);
< END IF;
63d49
< END;
65c51,53
< FUNCTION LOOKUP(STK STRSTK, VAL VARCHAR2) RETURN BOOLEAN
---
>
> FUNCTION NORMALIZEARG(TABLENAME IN VARCHAR2)
> RETURN VARCHAR2
66a55
> TN VARCHAR2(130) := NULL;
68,72d56
<
< RETURN LOOKUP_H(STK, VAL, 1, STK.COUNT);
< END;
<
<
73a58,64
> IF (TABLENAME IS NOT NULL) THEN
> IF (TABLENAME NOT LIKE '"%"') THEN
> TN := UPPER(TABLENAME);
> ELSE
> TN := SUBSTR(TABLENAME, 2, LENGTH(TABLENAME)-2);
> END IF;
> END IF;
74a66,67
> RETURN TN;
> END;
79d71
< TN VARCHAR2(130);
81c73
< IF (TABLENAME IS NULL) THEN
---
> IF ((TABLENAME IS NULL) OR (TABLENAME = '""')) THEN
86,92c78
< IF (TABLENAME NOT LIKE '"%"') THEN
< TN := UPPER(TABLENAME);
< ELSE
< TN := SUBSTR(TABLENAME, 2, LENGTH(TABLENAME)-2);
< END IF;
<
< RETURN TN;
---
> RETURN NORMALIZEARG(TABLENAME);
111a98
> ESCAPEDSTEP := REPLACE(ESCAPEDSTEP,'\','\\');
122,124c109,110
< IF (ASCII(CHARATPOS) >= ASCII('0') AND
< ASCII(CHARATPOS) <= ASCII('9') AND
< I = 1) THEN
---
> IF (I = 1 AND
> CHARATPOS >= '0' AND CHARATPOS <= '9') THEN
127,130c113,114
< IF ((ASCII(CHARATPOS) < ASCII('a') OR
< ASCII(CHARATPOS) > ASCII('z')) AND
< (ASCII(CHARATPOS) < ASCII('A') OR
< ASCII(CHARATPOS) > ASCII('Z')) AND
---
> IF ((CHARATPOS < 'a' OR CHARATPOS > 'z') AND
> (CHARATPOS < 'A' OR CHARATPOS > 'Z') AND
146c130,141
< FUNCTION VCERRCHECK(VCNAME VARCHAR2) RETURN VARCHAR2
---
>
>
> FUNCTION PATCHVCNAME(VCNAME VARCHAR2,
> OWNER VARCHAR2,
> TNAME VARCHAR2,
> ERRST IN OUT STRSTK,
> RCLST IN OUT STRSTK,
> COLCNT NUMBER,
> CREATEVIEW BOOLEAN,
> IGNOREERROR BOOLEAN,
> COLNAMEPREFIX VARCHAR2,
> MIXEDCASECOLUMNS BOOLEAN) RETURN VARCHAR2
148a144,145
> LEN NUMBER;
> VCEXISTS BOOLEAN := FALSE;
150,151c147
<
< IF (VCNAME = NULL) THEN
---
> IF (VCNAME IS NULL) THEN
154c150
<
---
>
163c159,165
< ASSERTEDNM := REPLACE(ASSERTEDNM, '"','\"');
---
> IF (INSTR(ASSERTEDNM, '"') > 0) THEN
> IF (IGNOREERROR) THEN
> ASSERTEDNM := REPLACE(ASSERTEDNM, '"','');
> ELSE
> SYS.DBMS_JSON0.RAISEERROR(-40836, ASSERTEDNM);
> END IF;
> END IF;
165a168
>
167c170,215
<
---
> IF (COLNAMEPREFIX IS NOT NULL) THEN
> LEN := 128 - LENGTH(COLNAMEPREFIX) - LENGTH(ASSERTEDNM);
> IF (LEN >= 0) THEN
> ASSERTEDNM := COLNAMEPREFIX || ASSERTEDNM;
> ELSE
> ASSERTEDNM := COLNAMEPREFIX ||
> SUBSTR(ASSERTEDNM, 1, LENGTH(ASSERTEDNM)+LEN);
> END IF;
> END IF;
>
> IF (MIXEDCASECOLUMNS) THEN
>
> ASSERTEDNM := UPPER(ASSERTEDNM);
> END IF;
>
> IF (CREATEVIEW) THEN
>
> IF (RCLST.EXISTS(ASSERTEDNM)) THEN
> VCEXISTS := TRUE;
> ELSE
> VCEXISTS := FALSE;
> RCLST(ASSERTEDNM) := ASSERTEDNM;
> END IF;
> ELSE
>
> VCEXISTS := SYS.DBMS_JSON0.CHECKVCNAME(ASSERTEDNM, OWNER, TNAME);
> END IF;
> IF (VCEXISTS) THEN
> IF (IGNOREERROR) THEN
>
> LEN := 128 - LENGTH(ASSERTEDNM) - 1 - LENGTH(COLCNT);
> IF (LEN >= 0) THEN
> ASSERTEDNM := ASSERTEDNM || '_' || COLCNT;
> ELSE
> ASSERTEDNM := SUBSTR(ASSERTEDNM , 1, LENGTH(ASSERTEDNM)+LEN) ||
> '_' || COLCNT;
> END IF;
> IF (CREATEVIEW) THEN
>
> RCLST(ASSERTEDNM) := ASSERTEDNM;
> END IF;
> ELSE
> ERRST(ASSERTEDNM) := ASSERTEDNM;
> END IF;
> END IF;
>
171d218
<
175a223,424
> PROCEDURE APPENDSTEP(STEP IN OUT VARCHAR2,
> SLEN IN OUT NUMBER,
> VC VARCHAR2,
> PATH VARCHAR2)
> IS
> BEGIN
>
> IF (SLEN >= 4000) THEN
> SYS.DBMS_JSON0.RAISEERROR(-40589, PATH);
> END IF;
> STEP := STEP || VC;
> SLEN := SLEN + 1;
> END;
>
> PROCEDURE PARSEJSONPATH(PATH VARCHAR2,
> STEPS IN OUT STEPTAB)
> IS
> PLEN NUMBER;
> SLEN NUMBER := 0;
> VC VARCHAR2(10);
> NEXTVC VARCHAR2(10) := NULL;
> STEP VARCHAR2(4000) := NULL;
> INQUOTE BOOLEAN := FALSE;
> INESCAPE BOOLEAN := FALSE;
> STATE NUMBER := 0;
> UNICODE VARCHAR2(5);
> NUMSTEPS NUMBER := 0;
>
> BEGIN
> IF (PATH IS NULL) THEN
> SYS.DBMS_JSON0.RAISEERROR(-40442);
> END IF;
>
> STEPS := STEPTAB();
> PLEN := LENGTH(PATH);
> FOR I IN 1..PLEN LOOP
> IF (STATE = S_UNICODE_U) THEN
> STATE := S_UNICODE_1;
> CONTINUE;
> ELSIF (STATE = S_UNICODE_1) THEN
> STATE := S_UNICODE_2;
> CONTINUE;
> ELSIF (STATE = S_UNICODE_2) THEN
> STATE := S_UNICODE_3;
> CONTINUE;
> ELSIF (STATE = S_UNICODE_3) THEN
> STATE := S_UNICODE_4;
> CONTINUE;
> ELSIF (STATE = S_UNICODE_4) THEN
> STATE := 0;
> INESCAPE := FALSE;
> END IF;
>
> VC := SUBSTR(PATH, I, 1);
>
> IF (I = 1) THEN
> IF (VC = '$') THEN
> CONTINUE;
> ELSE
> SYS.DBMS_JSON0.RAISEERROR(-40442, PATH);
> END IF;
> END IF;
>
>
> IF ((I = 2) AND VC != '.') THEN
> SYS.DBMS_JSON0.RAISEERROR(-40442, PATH);
> END IF;
>
>
> IF (VC = '"') THEN
>
> IF (INESCAPE) THEN
> APPENDSTEP(STEP, SLEN, '"', PATH);
> INESCAPE := FALSE;
> ELSE
> INQUOTE := NOT INQUOTE;
> END IF;
>
>
> ELSIF (VC = '.') THEN
>
> IF (I = PLEN) THEN
> SYS.DBMS_JSON0.RAISEERROR(-40442, PATH);
> END IF;
> IF (INQUOTE) THEN
> APPENDSTEP(STEP, SLEN, '.', PATH);
> CONTINUE;
> END IF;
>
> IF (STEP IS NOT NULL) THEN
> STEPS.EXTEND(1);
> STEPS(STEPS.COUNT) := STEP;
>
> ELSIF (I > 2) THEN
> SYS.DBMS_JSON0.RAISEERROR(-40835, PATH);
> END IF;
> STEP := NULL;
> SLEN := 0;
> NUMSTEPS := NUMSTEPS + 1;
>
>
> ELSIF (INQUOTE AND VC = '\') THEN
> IF (INESCAPE) THEN
>
> APPENDSTEP(STEP, SLEN, '\', PATH);
> INESCAPE := FALSE;
> ELSE
> INESCAPE := TRUE;
> END IF;
>
>
> ELSIF (INESCAPE AND VC = 'u') THEN
> STATE := S_UNICODE_U;
>
> IF (I + 4 > PLEN) THEN
> SYS.DBMS_JSON0.RAISEERROR(-40442, PATH);
> END IF;
> UNICODE := '\';
> FOR J IN I+1..I+4 LOOP
> NEXTVC := SUBSTR(PATH, J, 1);
> IF ((NEXTVC >= 'a' AND NEXTVC <= 'f') OR
> (NEXTVC >= 'A' AND NEXTVC <= 'F') OR
> (NEXTVC >= '0' AND NEXTVC <= '9')) THEN
> UNICODE := UNICODE || NEXTVC;
> ELSE
> SYS.DBMS_JSON0.RAISEERROR(-40442, PATH);
> END IF;
> END LOOP;
>
> APPENDSTEP(STEP, SLEN, UNISTR(UNICODE), PATH);
>
>
> ELSIF (INESCAPE) THEN
> NEXTVC := NULL;
> IF (VC = '/') THEN
> NEXTVC := '/';
> ELSIF (VC = 'b') THEN
> NEXTVC := TO_CHAR(U'\0008');
> ELSIF (VC = 'f') THEN
> NEXTVC := TO_CHAR(U'\000C');
> ELSIF (VC = 'n') THEN
> NEXTVC := TO_CHAR(U'\000A');
> ELSIF (VC = 'r') THEN
> NEXTVC := TO_CHAR(U'\000D');
> ELSIF (VC = 't') THEN
> NEXTVC := TO_CHAR(U'\0009');
> ELSE
> SYS.DBMS_JSON0.RAISEERROR(-40442, PATH);
> END IF;
> IF (NEXTVC IS NOT NULL) THEN
> APPENDSTEP(STEP, SLEN, NEXTVC, PATH);
> INESCAPE := FALSE;
> END IF;
>
> ELSE
>
> IF (NOT INQUOTE) THEN
>
> IF (VC <= CHR(127)) THEN
>
> IF (VC >= '0' AND VC <= '9') THEN
> IF (SLEN = 0) THEN
> SYS.DBMS_JSON0.RAISEERROR(-40835, PATH);
> END IF;
> ELSIF (NOT
> ((VC >= 'a' AND VC <= 'z') OR
> (VC >= 'A' AND VC <= 'Z') OR
> (VC = '_'))) THEN
> SYS.DBMS_JSON0.RAISEERROR(-40835, PATH);
> END IF;
> END IF;
> END IF;
> APPENDSTEP(STEP, SLEN, VC, PATH);
> END IF;
>
> END LOOP;
>
>
> IF (INQUOTE) THEN
> SYS.DBMS_JSON0.RAISEERROR(-40442, PATH);
> END IF;
>
>
> IF (STEP IS NOT NULL) THEN
> STEPS.EXTEND(1);
> STEPS(STEPS.COUNT) := STEP;
> END IF;
>
>
> IF (NUMSTEPS != STEPS.COUNT) THEN
> SYS.DBMS_JSON0.RAISEERROR(-40835, PATH);
> END IF;
>
>
>
>
>
>
>
> END;
>
>
198a448,452
> FUNCTION GATHER_STATS RETURN NUMBER PARALLEL_ENABLE AS
> BEGIN
> RETURN 4;
> END;
>
206,208c460,465
< DGELE JSON_ELEMENT_T;
< DGOBJ JSON_OBJECT_T;
< PROPELE JSON_ELEMENT_T;
---
> DGELE JSON_ELEMENT_T;
> DGOBJ JSON_OBJECT_T;
> PROPELE JSON_ELEMENT_T;
> TYP VARCHAR2(40);
> ITEMELEM JSON_ELEMENT_T;
> ITEMOBJ JSON_OBJECT_T;
211c468
< SYS.DBMS_JSON0.RAISEERRORMESG(-40594, 'dataguide is null');
---
> SYS.DBMS_JSON0.RAISEERROR(-40594, 'the dataguide is null');
212a470
>
215c473
< SYS.DBMS_JSON0.RAISEERRORMESG(-40594, 'root element is not object');
---
> SYS.DBMS_JSON0.RAISEERROR(-40594, 'the root element is not an object');
219,222c477,501
< IF (DGOBJ.HAS('type') AND DGOBJ.HAS('properties')) THEN
< IF (DGOBJ.GET_STRING('type') <> 'object') THEN
< SYS.DBMS_JSON0.RAISEERRORMESG(-40594,
< 'root element type is not object');
---
> IF (NOT DGOBJ.HAS('type')) THEN
> SYS.DBMS_JSON0.RAISEERROR(-40594,
> 'the root element does not have child "type"');
> END IF;
> TYP := DGOBJ.GET_STRING('type');
> IF (TYP = 'object') THEN
> IF (DGOBJ.HAS('properties')) THEN
> PROPELE := DGOBJ.GET('properties');
> ELSE
> SYS.DBMS_JSON0.RAISEERROR(-40594,
> 'the root element (type=object) does not have child "properties"');
> END IF;
> ELSIF (TYP = 'array') THEN
> IF (DGOBJ.HAS('items')) THEN
> ITEMELEM := DGOBJ.GET('items');
> ITEMOBJ := TREAT(ITEMELEM AS JSON_OBJECT_T);
> IF (ITEMOBJ.HAS('properties')) THEN
> PROPELE := ITEMOBJ.GET('properties');
> ELSE
> SYS.DBMS_JSON0.RAISEERROR(-40594,
> 'the root element (type=array) does not have grandchild "properties"');
> END IF;
> ELSE
> SYS.DBMS_JSON0.RAISEERROR(-40594,
> 'the root element (type=array) does not have child "items"');
225,226c504,505
< SYS.DBMS_JSON0.RAISEERRORMESG(-40594,
< 'root element does not have child "type" or "properties"');
---
> SYS.DBMS_JSON0.RAISEERROR(-40594,
> 'the root element is neither an object nor an array');
228c507
< PROPELE := DGOBJ.GET('properties');
---
>
235c514,530
< SYS.DBMS_JSON0.RAISEERRORMESG(-40594, 'checkDGMainObj: ' || SQLERRM);
---
> SYS.DBMS_JSON0.RAISEERROR(-40594, SQLERRM);
> END;
>
> PROCEDURE VALIDATELENGTH(PROP JSON_OBJECT_T, NAME VARCHAR2)
> IS
> BEGIN
>
> IF (PROP.HAS('o:length') = FALSE) THEN
> SYS.DBMS_JSON0.RAISEERROR(-40594,
> NAME || ' is missing "o:length" property');
> END IF;
>
>
> IF (PROP.GET('o:length').IS_NUMBER = FALSE) THEN
> SYS.DBMS_JSON0.RAISEERROR(-40594,
> NAME || ': "o:length" is not a number');
> END IF;
252c547,555
< COLCNT IN OUT NUMBER)
---
> COLCNT IN OUT NUMBER,
> JTCOLCNT IN OUT NUMBER,
> JTPOS IN OUT NUMBER,
> CNAME VARCHAR2,
> IGNOREERROR BOOLEAN,
> COLNAMEPREFIX VARCHAR2,
> MIXEDCASECOLUMNS BOOLEAN,
> FROMVIEW BOOLEAN,
> UNDERARRAY BOOLEAN)
258a562,563
> TYP VARCHAR2(30);
> I NUMBER;
260c565,566
< IF (COLCNT >= 1000) THEN
---
>
> IF (FROMVIEW AND COLCNT >= 1000) THEN
262a569,603
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> IF ((NOT FROMVIEW) AND (JTCOLCNT >= COL1K)) THEN
> IF (UNDERARRAY) THEN
> RETURN;
> END IF;
> JDDL := JDDL||') JT'||TO_CHAR(JTPOS);
> JDDL := JDDL||','||CHR(10)||'JSON_TABLE(';
> JDDL := JDDL||DBMS_ASSERT.ENQUOTE_NAME(CNAME,FALSE);
> JDDL := JDDL||', ''$[*]'' COLUMNS ';
> JTCOLCNT := 0;
> JTPOS := JTPOS + 1;
> FIRST := TRUE;
> END IF;
>
267a609,618
>
>
> IF (COLOBJ.HAS('o:preferred_column_name') = FALSE) THEN
> SYS.DBMS_JSON0.RAISEERROR(-40594,
> 'missing "o:preferred_column_name" in ' || PATH);
> END IF;
>
>
> JDDL := JDDL || CHR(10);
>
270c621,623
< VCNAME := VCERRCHECK(VCNAME);
---
> VCNAME := PATCHVCNAME(VCNAME, NULL, NULL, ERRST, RCLST, COLCNT, TRUE,
> IGNOREERROR, COLNAMEPREFIX, MIXEDCASECOLUMNS);
> JDDL := JDDL || VCNAME;
272,273c625,626
< JDDL := JDDL || DBMS_ASSERT.ENQUOTE_NAME(VCNAME,FALSE);
< IF (COLOBJ.GET_STRING('type') = 'array') THEN
---
> TYP := COLOBJ.GET_STRING('type');
> IF (TYP = 'array') THEN
275,276c628,629
<
< ELSIF (COLOBJ.GET_STRING('type') = 'string') THEN
---
> ELSIF (TYP = 'string') THEN
> VALIDATELENGTH(COLOBJ, VNM);
284,287c637,641
< ELSIF (COLOBJ.GET_STRING('type') = 'boolean' OR
< COLOBJ.GET_STRING('type') = 'null') THEN
< TYPESTR := ' varchar2('||COLOBJ.GET_STRING('o:length')||') path ';
< ELSIF (COLOBJ.GET_STRING('type') = 'number') THEN
---
>
> ELSIF (TYP = 'boolean' OR TYP = 'null') THEN
> VALIDATELENGTH(COLOBJ, VNM);
> TYPESTR := ' varchar2('||COLOBJ.GET_NUMBER('o:length')||') path ';
> ELSIF (TYP = 'number') THEN
290c644
< ELSIF (COLOBJ.GET_STRING('type') = 'GeoJSON') THEN
---
> ELSIF (TYP = 'GeoJSON') THEN
293,296c647
< SYS.DBMS_JSON0.RAISEERRORMESG(-40594, VNM || ': invalue "type" value');
< END IF;
< IF RCLST.COUNT > 0 AND LOOKUP(RCLST, VNM) THEN
< PUSHSTR(ERRST, VNM);
---
> SYS.DBMS_JSON0.RAISEERROR(-40594, VNM || 'has invalid type ' || TYP);
300a652,653
> JTCOLCNT := JTCOLCNT + 1;
>
318c671
< JDDL := JDDL || ' NESTED PATH ';
---
> JDDL := JDDL || CHR(10) || ' NESTED PATH ';
360c713,715
< PUSHSTR(RCSTK, COLNAME);
---
>
> RCSTK(COLNAME) := COLNAME;
>
377c732,733
< FIRST IN OUT BOOLEAN, JDDL IN OUT CLOB,
---
> FIRST IN OUT BOOLEAN,
> JDDL IN OUT CLOB,
381c737,749
< COLCNT IN OUT NUMBER)
---
> COLCNT IN OUT NUMBER,
> JTCOLCNT IN OUT NUMBER,
> JTPOS IN OUT NUMBER,
> CNAME VARCHAR2,
> STEPS STEPTAB,
> POS NUMBER,
> INPATH BOOLEAN,
> UNDERARRAY BOOLEAN,
> PATHSTEPPED IN OUT BOOLEAN,
> IGNOREERROR BOOLEAN,
> COLNAMEPREFIX VARCHAR2,
> MIXEDCASECOLUMNS BOOLEAN,
> FROMVIEW BOOLEAN)
397c765,769
< N NUMBER;
---
> N NUMBER;
> TYP VARCHAR2(30);
> CHILDINPATH BOOLEAN;
> ANYCHILDSTEPPED BOOLEAN := FALSE;
>
407d778
< MULTITYPED := PROPOBJ.HAS('oneOf');
408a780
> MULTITYPED := PROPOBJ.HAS('oneOf');
420c792
< SYS.DBMS_JSON0.RAISEERRORMESG(-40594,
---
> SYS.DBMS_JSON0.RAISEERROR(-40594,
442c814,817
< BUILDJCOLS(TEMPOBJ, PATH, FIRST, JDDL, MAXVC, ERRST, RCLST, COLCNT);
---
> BUILDJCOLS(TEMPOBJ, PATH, FIRST, JDDL, MAXVC, ERRST, RCLST, COLCNT,
> JTCOLCNT, JTPOS, CNAME,
> STEPS, POS, INPATH, UNDERARRAY, PATHSTEPPED,
> IGNOREERROR, COLNAMEPREFIX, MIXEDCASECOLUMNS, FROMVIEW);
448a824,843
>
>
>
>
>
>
>
>
>
> CHILDINPATH := FALSE;
> IF (INPATH) THEN
> IF (POS > STEPS.COUNT) THEN
> CHILDINPATH := TRUE;
> ELSIF (COLKEYS(I) = STEPS(POS)) THEN
> CHILDINPATH := TRUE;
> ANYCHILDSTEPPED := TRUE;
> END IF;
> END IF;
>
>
451c846
< SYS.DBMS_JSON0.RAISEERRORMESG(-40594,
---
> SYS.DBMS_JSON0.RAISEERROR(-40594,
454a850
> TYP := PROPOBJ.GET_STRING('type');
456c852
< IF (PROPOBJ.GET_STRING('type') = 'object') THEN
---
> IF (TYP = 'object') THEN
465,466c861,864
< BUILDJCOLS(PROPSOBJ, PATH ||'.'|| ESCAPEPATHSTEP(COLKEYS(I)), FIRST,JDDL,
< MAXVC, ERRST, RCLST, COLCNT);
---
> BUILDJCOLS(PROPSOBJ, PATH ||'.'|| ESCAPEPATHSTEP(COLKEYS(I)), FIRST,
> JDDL, MAXVC, ERRST, RCLST, COLCNT, JTCOLCNT, JTPOS, CNAME,
> STEPS, POS+1, CHILDINPATH, UNDERARRAY, PATHSTEPPED,
> IGNOREERROR, COLNAMEPREFIX, MIXEDCASECOLUMNS, FROMVIEW);
469c867
< ELSIF (PROPOBJ.GET_STRING('type') = 'array') THEN
---
> ELSIF (TYP = 'array') THEN
472c870,879
< IF (COLCNT >= 1000) THEN
---
> IF (JTCOLCNT >= COL1K) THEN
> CONTINUE;
> END IF;
>
>
> IF (FROMVIEW AND COLCNT >= 1000) THEN
> CONTINUE;
> END IF;
>
> IF (NOT CHILDINPATH) THEN
477,479c884,889
< BUILDCOLUMN(PROPOBJ, PATH||'.'||ESCAPEPATHSTEP(COLKEYS(I)), FIRST,JDDL,
< MAXVC, ERRST, RCLST, COLCNT);
< ELSE BEGIN
---
>
> BUILDCOLUMN(PROPOBJ, PATH||'.'||ESCAPEPATHSTEP(COLKEYS(I)), FIRST,
> JDDL, MAXVC, ERRST, RCLST, COLCNT, JTCOLCNT, JTPOS, CNAME,
> IGNOREERROR, COLNAMEPREFIX, MIXEDCASECOLUMNS,
> FROMVIEW, TRUE);
> ELSE
484c894,898
< STARTNESTED(PATH||'.'||COLKEYS(I), FIRST, JDDL, FIRSTINNESTED);
---
> STARTNESTED(PATH||'.'||ESCAPEPATHSTEP(COLKEYS(I)), FIRST, JDDL,
> FIRSTINNESTED);
>
>
> JTCOLCNT := JTCOLCNT + 1;
488d901
< BEGIN
490,492c903,905
< ERRST, RCLST, COLCNT);
< COLCNT := COLCNT + 1;
< END;
---
> ERRST, RCLST, COLCNT, JTCOLCNT, JTPOS, CNAME,
> IGNOREERROR, COLNAMEPREFIX, MIXEDCASECOLUMNS,
> FROMVIEW, TRUE);
497d909
< BEGIN
501,502c913,915
< ERRST, RCLST, COLCNT);
< END;
---
> ERRST, RCLST, COLCNT, JTCOLCNT, JTPOS, CNAME,
> STEPS, POS+1, CHILDINPATH, TRUE, PATHSTEPPED,
> IGNOREERROR, COLNAMEPREFIX, MIXEDCASECOLUMNS, FROMVIEW);
506c919
< END;
---
>
511,517c924,935
< ELSIF (PROPOBJ.GET_STRING('type') = 'number' OR
< PROPOBJ.GET_STRING('type') = 'string' OR
< PROPOBJ.GET_STRING('type') = 'boolean' OR
< PROPOBJ.GET_STRING('type') = 'GeoJSON' OR
< PROPOBJ.GET_STRING('type') = 'null') THEN
< BUILDCOLUMN(PROPOBJ, PATH||'.'||ESCAPEPATHSTEP(COLKEYS(I)), FIRST, JDDL,
< MAXVC, ERRST, RCLST, COLCNT);
---
> ELSIF (TYP = 'number' OR
> TYP = 'string' OR
> TYP = 'boolean' OR
> TYP = 'GeoJSON' OR
> TYP = 'null') THEN
>
> IF ((NOT UNDERARRAY) OR CHILDINPATH) THEN
> BUILDCOLUMN(PROPOBJ, PATH||'.'||ESCAPEPATHSTEP(COLKEYS(I)), FIRST,
> JDDL, MAXVC, ERRST, RCLST, COLCNT, JTCOLCNT, JTPOS, CNAME,
> IGNOREERROR, COLNAMEPREFIX, MIXEDCASECOLUMNS,
> FROMVIEW, UNDERARRAY);
> END IF;
520,521c938,939
< SYS.DBMS_JSON0.RAISEERRORMESG(-40594,
< COLKEYS(I) || ' has invalid "type" value');
---
> SYS.DBMS_JSON0.RAISEERROR(-40594,
> COLKEYS(I) || ' has invalid type ' || TYP);
524a943,946
>
> IF (ANYCHILDSTEPPED AND (POS = STEPS.COUNT)) THEN
> PATHSTEPPED := TRUE;
> END IF;
535,539c957,964
< ERRST IN OUT STRSTK,
< ERRSTR IN OUT VARCHAR2,
< COLCNT IN OUT NUMBER,
< RESOURCEPATH VARCHAR2,
< MATERIALIZE BOOLEAN)
---
> DDL IN OUT CLOB,
> MATERIALIZE BOOLEAN,
> MVMODE NUMBER,
> PATH VARCHAR2,
> STEPS STEPTAB,
> IGNOREERROR BOOLEAN,
> COLNAMEPREFIX VARCHAR2,
> MIXEDCASECOLUMNS BOOLEAN)
545d969
< DDL CLOB;
547a972,974
> ERRST STRSTK;
> ERRSTR VARCHAR2(4000);
> COLCNT NUMBER := 0;
549,550c976,980
< DUPCOL EXCEPTION;
< PRAGMA EXCEPTION_INIT(DUPCOL, -957);
---
> JTCOLCNT NUMBER := 0;
> JTPOS NUMBER := 1;
> I NUMBER := 0;
> PATHSTEPPED BOOLEAN := FALSE;
> FROMVIEW BOOLEAN;
552a983
> ERRST := STRSTK();
555,557c986,987
< DBMS_LOB.CREATETEMPORARY(RELDDL,TRUE,DBMS_LOB.SESSION);
< DBMS_LOB.CREATETEMPORARY(JSNDDL,TRUE,DBMS_LOB.SESSION);
< DBMS_LOB.CREATETEMPORARY(DDL,TRUE,DBMS_LOB.SESSION);
---
> DBMS_LOB.CREATETEMPORARY(RELDDL,TRUE,DBMS_LOB.CALL);
> DBMS_LOB.CREATETEMPORARY(JSNDDL,TRUE,DBMS_LOB.CALL);
560c990,997
< BUILDJCOLS(PROPS, '$', FIRSTJCOL, JSNDDL, MAXVC, ERRST, RCSTK, COLCNT);
---
> IF (VNAME IS NULL) THEN
> FROMVIEW := FALSE;
> ELSE
> FROMVIEW := TRUE;
> END IF;
> BUILDJCOLS(PROPS, '$', FIRSTJCOL, JSNDDL, MAXVC, ERRST, RCSTK, COLCNT,
> JTCOLCNT, JTPOS, CNAME, STEPS, 1, TRUE, FALSE, PATHSTEPPED,
> IGNOREERROR, COLNAMEPREFIX, MIXEDCASECOLUMNS, FROMVIEW);
563c1000,1004
< COLCNT := COLCNT - RELCOLCNT;
---
> IF ((STEPS.COUNT > 0) AND (NOT PATHSTEPPED)) THEN
> DBMS_LOB.FREETEMPORARY(RELDDL);
> DBMS_LOB.FREETEMPORARY(JSNDDL);
> SYS.DBMS_JSON0.RAISEERROR(-40589, PATH);
> END IF;
566,567c1007,1011
< IF (RELCOLCNT = 0 AND COLCNT = 0) THEN
< RETURN;
---
> IF (ERRST.FIRST IS NOT NULL) THEN
> DBMS_LOB.FREETEMPORARY(RELDDL);
> DBMS_LOB.FREETEMPORARY(JSNDDL);
> COLERRSTR(ERRST,ERRSTR);
> SYS.DBMS_JSON0.RAISEERROR(-40593, ERRSTR);
571,577c1015,1022
< IF (MATERIALIZE) THEN
< DDL := 'CREATE MATERIALIZED VIEW ';
< IF (SYS.DBMS_JSON0.CHECKPK(OWNER, TNAME)) THEN
< HASPK := TRUE;
< END IF;
< ELSE
< DDL := 'CREATE OR REPLACE VIEW ';
---
>
> JTCOLCNT := COLCNT - RELCOLCNT;
>
>
> IF (RELCOLCNT = 0 AND JTCOLCNT = 0) THEN
> DBMS_LOB.FREETEMPORARY(RELDDL);
> DBMS_LOB.FREETEMPORARY(JSNDDL);
> RETURN;
579,580c1024
< DDL := DDL||DBMS_ASSERT.ENQUOTE_NAME(OWNER,FALSE)||'.';
< DDL := DDL||DBMS_ASSERT.ENQUOTE_NAME(VNAME,FALSE);
---
>
582,583c1026,1047
< IF (MATERIALIZE) THEN
< DDL := DDL||'BUILD IMMEDIATE REFRESH FAST ON STATEMENT WITH ';
---
> IF (FROMVIEW) THEN
> IF (MATERIALIZE) THEN
> DDL := 'CREATE MATERIALIZED VIEW ';
> IF (SYS.DBMS_JSON0.CHECKPK(OWNER, TNAME)) THEN
> HASPK := TRUE;
> END IF;
> ELSE
> DDL := 'CREATE OR REPLACE VIEW ';
> END IF;
> DDL := DDL||DBMS_ASSERT.ENQUOTE_NAME(OWNER,FALSE)||'.';
> DDL := DDL||DBMS_ASSERT.ENQUOTE_NAME(VNAME,FALSE);
>
> IF (MATERIALIZE) THEN
> DDL := DDL||'BUILD IMMEDIATE REFRESH FAST ON ';
> IF (MVMODE = MV_REFRESH_ON_STATEMENT) THEN
> DDL := DDL || 'STATEMENT ';
> ELSIF (MVMODE = MV_REFRESH_ON_COMMIT) THEN
> DDL := DDL || 'COMMIT ';
> ELSE
> DDL := DDL || 'DEMAND ';
> END IF;
> DDL := DDL || 'WITH ';
589,590c1053,1059
< END IF;
< DDL := DDL||' AS SELECT ';
---
> END IF;
> DDL := DDL||' AS ';
> ELSE
> DDL := '';
> END IF;
>
> DDL := DDL||'SELECT ';
600,604c1069,1071
< IF (COLCNT = 0) THEN
< BEGIN
< DDL := DDL||'FROM '||DBMS_ASSERT.ENQUOTE_NAME(OWNER,FALSE);
< DDL := DDL||'.'||DBMS_ASSERT.ENQUOTE_NAME(TNAME,FALSE)||' RT ';
< END;
---
> IF (JTCOLCNT = 0) THEN
> DDL := DDL||CHR(10)||'FROM '||DBMS_ASSERT.ENQUOTE_NAME(OWNER,FALSE);
> DDL := DDL||'.'||DBMS_ASSERT.ENQUOTE_NAME(TNAME,FALSE)||' RT';
609,611c1076,1089
< DDL := DDL||'JT.* FROM '||DBMS_ASSERT.ENQUOTE_NAME(OWNER,FALSE);
< DDL := DDL||'.'||DBMS_ASSERT.ENQUOTE_NAME(TNAME, FALSE)||' RT ';
< DDL := DDL||', JSON_TABLE(';
---
> IF (JTPOS > 1) THEN
> FOR I IN 1..JTPOS
> LOOP
> IF (I > 1) THEN
> DDL := DDL||',';
> END IF;
> DDL := DDL||'JT'||I||'.*';
> END LOOP;
> ELSE
> DDL := DDL||'JT.*';
> END IF;
> DDL := DDL||CHR(10)||'FROM '||DBMS_ASSERT.ENQUOTE_NAME(OWNER,FALSE);
> DDL := DDL||'.'||DBMS_ASSERT.ENQUOTE_NAME(TNAME, FALSE)||' RT,';
> DDL := DDL||CHR(10)||'JSON_TABLE(';
613c1091
< DDL := DDL||' FORMAT JSON, ''$'' COLUMNS ';
---
> DDL := DDL||', ''$[*]'' COLUMNS ';
615,639c1093,1097
< DDL := DDL||')JT';
< END IF;
<
<
<
<
< COLCNT := COLCNT + RELCOLCNT;
<
<
<
< IF (COLCNT <= 0) THEN
< RETURN;
< END IF;
<
< EXECUTE IMMEDIATE DDL;
<
< IF (RESOURCEPATH IS NOT NULL) THEN
< BEGIN
<
<
< EXECUTE IMMEDIATE 'declare cresRet boolean; begin cresRet := dbms_xdb.createresource(:resourcePath, :ddl); end;' USING RESOURCEPATH, DDL;
< EXCEPTION
< WHEN OTHERS THEN
< NULL;
< END;
---
> IF (JTPOS > 1) THEN
> DDL := DDL||') JT'||TO_CHAR(JTPOS);
> ELSE
> DDL := DDL||')JT';
> END IF;
642,654c1100
< EXCEPTION
< WHEN DUPCOL THEN
< BEGIN
< COLERRSTR(ERRST,ERRSTR);
<
< DBMS_LOB.FREETEMPORARY(RELDDL);
< DBMS_LOB.FREETEMPORARY(JSNDDL);
< DBMS_LOB.FREETEMPORARY(DDL);
< SYS.DBMS_JSON0.RAISEERROR(-40593, ERRSTR);
< END;
<
<
< DBMS_LOB.FREETEMPORARY(RELDDL);
---
> DBMS_LOB.FREETEMPORARY(RELDDL);
656d1101
< DBMS_LOB.FREETEMPORARY(DDL);
658d1102
< RETURN;
680,682c1124,1125
< PATH VARCHAR2,
< TYP VARCHAR2,
< ADDNEW BOOLEAN,
---
> PATH VARCHAR2,
> TYP VARCHAR2,
684c1127,1131
< ERRST IN OUT STRSTK)
---
> ERRST IN OUT STRSTK,
> COLCNT IN OUT NUMBER,
> IGNOREERROR BOOLEAN,
> COLNAMEPREFIX VARCHAR2,
> MIXEDCASECOLUMNS BOOLEAN)
686,687c1133
< NEW BOOLEAN := ADDNEW;
< OKNAME BOOLEAN;
---
> RCLST STRSTK;
692d1137
< VC VARCHAR2(130);
694c1139,1141
< VCEXISTS EXCEPTION;
---
> VCEXISTS BOOLEAN := FALSE;
> KVCNAMEEXISTS EXCEPTION;
> KVCEXISTS EXCEPTION;
696c1143,1144
< PRAGMA EXCEPTION_INIT(VCEXISTS, -1430);
---
> PRAGMA EXCEPTION_INIT(KVCNAMEEXISTS, -1430);
> PRAGMA EXCEPTION_INIT(KVCEXISTS, -54015);
701c1149,1150
< SYS.DBMS_JSON0.RAISEERRORMESG(-40594, 'missing "o:preferred_column_name"');
---
> SYS.DBMS_JSON0.RAISEERROR(-40594,
> 'missing "o:preferred_column_name" in ' || PATH);
706,719c1155,1156
< VC := PRVCNM;
< PRVCNM := VCERRCHECK(PRVCNM);
<
<
<
< OKNAME := SYS.DBMS_JSON0.CHECKVCNAME(VC, OWNER, TNAME, CNAME);
<
<
<
< IF (OKNAME = FALSE) THEN
< PUSHSTR(ERRST, VC);
<
< RETURN;
< END IF;
---
> PRVCNM := PATCHVCNAME(PRVCNM, OWNER, TNAME, ERRST, RCLST, COLCNT, FALSE,
> IGNOREERROR, COLNAMEPREFIX, MIXEDCASECOLUMNS);
727,731c1164
< IF (ADDNEW = TRUE) THEN
< VCSTMT := VCSTMT || ' add ';
< ELSE
< VCSTMT := VCSTMT || ' modify ';
< END IF;
---
> VCSTMT := VCSTMT || ' add ';
744,745c1177
< WHEN VCEXISTS THEN
< BEGIN
---
> WHEN KVCEXISTS OR KVCNAMEEXISTS THEN
747,750c1179,1181
< CREATEVC(OWNER, TNAME, CNAME, PROPOBJ, PATH, TYP, FALSE, LIMITREACHED,
< ERRST);
< NEW := FALSE;
< END;
---
>
>
> VCEXISTS := TRUE;
760c1191
< IF (NEW = TRUE AND LIMITREACHED = FALSE) THEN
---
> IF (VCEXISTS = FALSE AND LIMITREACHED = FALSE) THEN
792a1224
> MAXVC NUMBER,
794c1226,1230
< ERRST IN OUT STRSTK)
---
> ERRST IN OUT STRSTK,
> COLCNT IN OUT NUMBER,
> IGNOREERROR BOOLEAN,
> COLNAMEPREFIX VARCHAR2,
> MIXEDCASECOLUMNS BOOLEAN)
809d1244
< ARRAYTYPED BOOLEAN := FALSE;
847c1282,1284
< ADDVC_H(OWNER, TABLENAME, COLNAME, PATH, TEMPOBJ, LIMITREACHED, ERRST);
---
> ADDVC_H(OWNER, TABLENAME, COLNAME, PATH, TEMPOBJ, MAXVC,
> LIMITREACHED, ERRST, COLCNT,
> IGNOREERROR, COLNAMEPREFIX, MIXEDCASECOLUMNS);
857c1294
< SYS.DBMS_JSON0.RAISEERRORMESG(-40594,
---
> SYS.DBMS_JSON0.RAISEERROR(-40594,
868,869c1305,1306
< SYS.DBMS_JSON0.RAISEERRORMESG(-40594,
< COLKEYS(I) || ' has invalid "type" value');
---
> SYS.DBMS_JSON0.RAISEERROR(-40594,
> COLKEYS(I) || ' has invalid type ' || TYP);
873,886c1310
< IF (PROPOBJ.HAS('o:length') = FALSE) THEN
< SYS.DBMS_JSON0.RAISEERRORMESG(-40594,
< COLKEYS(I) || ' is missing o:length property');
< END IF;
<
<
< IF (PROPOBJ.HAS('o:length') = TRUE AND
< PROPOBJ.GET('o:length').IS_NUMBER = FALSE) THEN
< SYS.DBMS_JSON0.RAISEERRORMESG(-40594,
< COLKEYS(I) || ': "o:length" is not a number');
< END IF;
<
<
< IF (PROPOBJ.GET_STRING('type') = 'object') THEN
---
> IF (TYP = 'object') THEN
894c1318,1319
< PROPSOBJ, LIMITREACHED, ERRST);
---
> PROPSOBJ, MAXVC, LIMITREACHED, ERRST, COLCNT,
> IGNOREERROR, COLNAMEPREFIX, MIXEDCASECOLUMNS);
897c1322
< ELSIF (PROPOBJ.GET_STRING('type') = 'number') THEN
---
> ELSIF (TYP = 'number') THEN
899,907c1324,1341
< PATH||'.'||ESCAPEPATHSTEP(COLKEYS(I)), 'number',
< TRUE, LIMITREACHED, ERRST);
<
< ELSIF (PROPOBJ.GET_STRING('type') = 'string' OR
< PROPOBJ.GET_STRING('type') = 'boolean' OR
< PROPOBJ.GET_STRING('type') = 'null') THEN
< CREATEVC(OWNER, TNAME, CNAME, PROPOBJ, PATH||'.'||ESCAPEPATHSTEP(COLKEYS(I)),
< 'varchar2('|| PROPOBJ.GET_STRING('o:length')||')', TRUE,
< LIMITREACHED, ERRST);
---
> PATH||'.'||ESCAPEPATHSTEP(COLKEYS(I)), TYP,
> LIMITREACHED, ERRST, COLCNT,
> IGNOREERROR, COLNAMEPREFIX, MIXEDCASECOLUMNS);
>
> ELSIF (TYP = 'string' OR TYP = 'boolean' OR TYP = 'null') THEN
> VALIDATELENGTH(PROPOBJ, COLKEYS(I));
> IF (PROPOBJ.GET_NUMBER('o:length') <= MAXVC) THEN
> CREATEVC(OWNER, TNAME, CNAME, PROPOBJ,
> PATH||'.'||ESCAPEPATHSTEP(COLKEYS(I)),
> 'varchar2('|| PROPOBJ.GET_STRING('o:length')||')',
> LIMITREACHED, ERRST, COLCNT,
> IGNOREERROR, COLNAMEPREFIX, MIXEDCASECOLUMNS);
> ELSE
> CREATEVC(OWNER, TNAME, CNAME, PROPOBJ,
> PATH||'.'||ESCAPEPATHSTEP(COLKEYS(I)), 'clob',
> LIMITREACHED, ERRST, COLCNT,
> IGNOREERROR, COLNAMEPREFIX, MIXEDCASECOLUMNS);
> END IF;
909c1343
< ELSIF (PROPOBJ.GET_STRING('type') = 'GeoJSON') THEN
---
> ELSIF (TYP = 'GeoJSON') THEN
912c1346,1347
< TRUE, LIMITREACHED, ERRST);
---
> LIMITREACHED, ERRST, COLCNT,
> IGNOREERROR, COLNAMEPREFIX, MIXEDCASECOLUMNS);
1051,1059c1486,1496
<
<
<
< PROCEDURE CREATE_VIEW(VIEWNAME VARCHAR2,
< TABLENAME VARCHAR2,
< JCOLNAME VARCHAR2,
< DATAGUIDE CLOB,
< RESOURCEPATH VARCHAR2 DEFAULT NULL,
< MATERIALIZE BOOLEAN DEFAULT FALSE)
---
> FUNCTION GET_VIEW_SQL_H(VNAME VARCHAR2,
> TABLENAME VARCHAR2,
> JCOLNAME VARCHAR2,
> DATAGUIDE CLOB,
> MATERIALIZE BOOLEAN,
> MVREFRESHMODE NUMBER,
> PATH VARCHAR2,
> RESOLVENAMECONFLICTS BOOLEAN,
> COLNAMEPREFIX VARCHAR2,
> MIXEDCASECOLUMNS BOOLEAN)
> RETURN CLOB
1062d1498
< VNAME VARCHAR2(130);
1066,1071c1502,1503
< ERRST STRSTK;
< ERRSTR VARCHAR2(4000);
< CRESRET BOOLEAN;
< COLCNT NUMBER := 0;
< DUPCOL EXCEPTION;
< PRAGMA EXCEPTION_INIT(DUPCOL, -957);
---
> STEPS STEPTAB;
> DDL CLOB;
1077d1508
< VNAME := ARGERRCHECK(VIEWNAME);
1081,1082c1512,1517
<
<
---
>
> IF (MVREFRESHMODE NOT IN (MV_REFRESH_ON_STATEMENT,
> MV_REFRESH_ON_COMMIT, MV_REFRESH_ON_DEMAND)) THEN
> SYS.DBMS_JSON0.RAISEERROR(-40837);
> END IF;
>
1087d1521
< ERRST := STRSTK();
1089,1090c1523,1555
< BUILDCREATEVIEW(UNAME, VNAME, TNAME, CNAME, DGPROPS, ERRST,
< ERRSTR, COLCNT, RESOURCEPATH, MATERIALIZE);
---
> STEPS := STEPTAB();
> PARSEJSONPATH(PATH, STEPS);
>
> DBMS_LOB.CREATETEMPORARY(DDL,TRUE,DBMS_LOB.SESSION);
>
> BUILDCREATEVIEW(UNAME, VNAME, TNAME, CNAME, DGPROPS, DDL,
> MATERIALIZE, MVREFRESHMODE, PATH, STEPS,
> RESOLVENAMECONFLICTS, COLNAMEPREFIX, MIXEDCASECOLUMNS);
> RETURN DDL;
>
> END;
>
>
>
>
> PROCEDURE CREATE_VIEW(VIEWNAME VARCHAR2,
> TABLENAME VARCHAR2,
> JCOLNAME VARCHAR2,
> DATAGUIDE CLOB,
> RESOURCEPATH VARCHAR2 DEFAULT NULL,
> MATERIALIZE BOOLEAN DEFAULT FALSE,
> MVREFRESHMODE NUMBER DEFAULT MV_REFRESH_ON_STATEMENT,
> PATH VARCHAR2 DEFAULT '$',
> RESOLVENAMECONFLICTS BOOLEAN DEFAULT FALSE,
> COLNAMEPREFIX VARCHAR2 DEFAULT NULL,
> MIXEDCASECOLUMNS BOOLEAN DEFAULT FALSE)
> IS
> VNAME VARCHAR2(130);
> DDL CLOB;
> BEGIN
>
> VNAME := ARGERRCHECK(VIEWNAME);
>
1091a1557,1616
> DDL := GET_VIEW_SQL_H(VNAME, TABLENAME, JCOLNAME, DATAGUIDE, MATERIALIZE,
> MVREFRESHMODE, PATH, RESOLVENAMECONFLICTS, COLNAMEPREFIX,
> MIXEDCASECOLUMNS);
>
> IF (DBMS_LOB.COMPARE(DDL, EMPTY_CLOB()) = 0) THEN
> RETURN;
> END IF;
>
> BEGIN
> EXECUTE IMMEDIATE DDL;
>
> EXCEPTION
> WHEN OTHERS THEN
> DBMS_OUTPUT.PUT_LINE('DDL:['||DDL||']');
>
> DBMS_LOB.FREETEMPORARY(DDL);
> RAISE;
> END;
>
> IF (RESOURCEPATH IS NOT NULL) THEN
> BEGIN
>
>
> EXECUTE IMMEDIATE
> 'declare cresRet boolean;
> begin cresRet := dbms_xdb.createresource(:resourcePath, :ddl);
> end;' USING RESOURCEPATH, DDL;
> EXCEPTION
> WHEN OTHERS THEN
>
> DBMS_LOB.FREETEMPORARY(DDL);
> END;
> END IF;
>
>
> DBMS_LOB.FREETEMPORARY(DDL);
> RETURN;
>
> END;
>
> FUNCTION GET_VIEW_SQL(VIEWNAME VARCHAR2,
> TABLENAME VARCHAR2,
> JCOLNAME VARCHAR2,
> DATAGUIDE CLOB,
> MATERIALIZE BOOLEAN DEFAULT FALSE,
> MVREFRESHMODE NUMBER DEFAULT MV_REFRESH_ON_STATEMENT,
> PATH VARCHAR2 DEFAULT '$',
> RESOLVENAMECONFLICTS BOOLEAN DEFAULT FALSE,
> COLNAMEPREFIX VARCHAR2 DEFAULT NULL,
> MIXEDCASECOLUMNS BOOLEAN DEFAULT FALSE)
> RETURN CLOB
> IS
> VNAME VARCHAR2(130);
> BEGIN
>
> VNAME := NORMALIZEARG(VIEWNAME);
>
> RETURN GET_VIEW_SQL_H(VNAME, TABLENAME, JCOLNAME, DATAGUIDE, MATERIALIZE,
> MVREFRESHMODE, PATH, RESOLVENAMECONFLICTS, COLNAMEPREFIX,
> MIXEDCASECOLUMNS);
1103c1628,1630
< MATERIALIZE BOOLEAN DEFAULT FALSE)
---
> MATERIALIZE BOOLEAN DEFAULT FALSE,
> MVREFRESHMODE NUMBER
> DEFAULT MV_REFRESH_ON_STATEMENT)
1110a1638
> STEPS STEPTAB;
1122a1651,1659
> IF (MVREFRESHMODE NOT IN (MV_REFRESH_ON_STATEMENT,
> MV_REFRESH_ON_COMMIT, MV_REFRESH_ON_DEMAND)) THEN
> SYS.DBMS_JSON0.RAISEERROR(-40837);
> END IF;
>
>
>
>
>
1125c1662
< MATERIALIZE);
---
> MATERIALIZE, MVREFRESHMODE);
1135c1672,1675
< DATAGUIDE CLOB)
---
> DATAGUIDE CLOB,
> RESOLVENAMECONFLICTS BOOLEAN DEFAULT FALSE,
> COLNAMEPREFIX VARCHAR2 DEFAULT NULL,
> MIXEDCASECOLUMNS BOOLEAN DEFAULT FALSE)
1141a1682
> MAXVC NUMBER;
1143a1685
> COLCNT NUMBER := 0;
1158c1700,1703
< ADDVC_H(UNAME, TNAME, CNAME, '$', DGPROPS, LIMITREACHED, ERRST);
---
> MAXVC := SYS.DBMS_JSON0.GETMAXVCSIZE();
> ADDVC_H(UNAME, TNAME, CNAME, '$', DGPROPS, MAXVC, LIMITREACHED,
> ERRST, COLCNT,
> RESOLVENAMECONFLICTS, COLNAMEPREFIX, MIXEDCASECOLUMNS);
1160,1164c1705,1709
< IF (ERRST.COUNT > 0) THEN
< BEGIN
< COLERRSTR(ERRST,ERRSTR);
< SYS.DBMS_JSON0.RAISEERROR(-40592, ERRSTR);
< END;
---
> IF (ERRST.FIRST IS NOT NULL) THEN
> BEGIN
> COLERRSTR(ERRST,ERRSTR);
> SYS.DBMS_JSON0.RAISEERROR(-40592, ERRSTR);
> END;
92c92,93 < MATERIALIZE BOOLEAN) --- > MATERIALIZE BOOLEAN, > MVREFRESHMODE NUMBER) 127c128,130 < MATERIALIZE INDICATOR SB4 --- > MATERIALIZE INDICATOR SB4, > MVREFRESHMODE OCINUMBER, > MVREFRESHMODE INDICATOR SB4
5a6,7
>
> MAX_BINARY_SIZE CONSTANT VARCHAR2(50) := '32m';
58a61,62
> V_COMPATIBLE NUMBER := NULL;
> V_SERVICE VARCHAR2(200) := NULL;
301c305,306
< IF (P_CONTENT_COLUMN_TYPE IN ('CLOB', 'NCLOB', 'BLOB')) THEN
---
> IF ((P_CONTENT_COLUMN_TYPE IN ('CLOB', 'NCLOB', 'BLOB')) AND
> (P_CONTENT_COLUMN_JSON_FORMAT IS NULL)) THEN
314,315c319,322
< P_DESCRIPTOR := P_DESCRIPTOR||','||QUOTE_JSON_VALUE('validation')||
< ':'||QUOTE_JSON_VALUE(P_CONTENT_VALIDATION);
---
> IF (P_CONTENT_VALIDATION IS NOT NULL) THEN
> P_DESCRIPTOR := P_DESCRIPTOR||','||QUOTE_JSON_VALUE('validation')||
> ':'||QUOTE_JSON_VALUE(P_CONTENT_VALIDATION);
> END IF;
623,626c630,691
<
< PROCEDURE AJD_SETTINGS(P_CONTENT_COLUMN_JSON_FORMAT OUT VARCHAR2,
< P_SIZE_LIMIT OUT VARCHAR2,
< P_URI_NAME IN NVARCHAR2,
---
> PROCEDURE ENFORCE_ATP_AND_ADW_SETTINGS(P_CONTENT_COLUMN_TYPE IN VARCHAR2,
> P_CONTENT_COLUMN_LEN IN NUMBER,
> P_CONTENT_VALIDATION IN VARCHAR2,
> P_CONTENT_LOB_COMPRESS IN VARCHAR2,
> P_CONTENT_LOB_CACHE IN VARCHAR2,
> P_CONTENT_LOB_ENCRYPT IN VARCHAR2,
> P_CONTENT_LOB_TS IN VARCHAR2)
> IS
> BEGIN
>
>
> IF ((P_CONTENT_COLUMN_TYPE <> 'BLOB') AND
> (DBMS_SODA_ADMIN.V_COMPATIBLE < 20)) THEN
> SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40774,
> 'contentColumn.sqlType',
> P_CONTENT_COLUMN_TYPE,
> 'BLOB');
>
>
> ELSIF ((P_CONTENT_COLUMN_TYPE <> 'JSON') AND
> (P_CONTENT_COLUMN_TYPE <> 'BLOB') AND
> (DBMS_SODA_ADMIN.V_COMPATIBLE >= 20)) THEN
> SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40774,
> 'contentColumn.sqlType',
> P_CONTENT_COLUMN_TYPE,
> 'JSON, BLOB');
> ELSIF (P_CONTENT_COLUMN_LEN <> 0) THEN
> SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40774,
> 'contentColumn.maxLength',
> TO_CHAR(P_CONTENT_COLUMN_LEN),
> TO_CHAR(0));
> ELSIF (P_CONTENT_VALIDATION IS NOT NULL) THEN
> SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40774,
> 'contentColumn.validation',
> P_CONTENT_VALIDATION,
> 'NULL');
> ELSIF (P_CONTENT_LOB_COMPRESS IS NOT NULL) THEN
> SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40774,
> 'contentColumn.compress',
> P_CONTENT_LOB_COMPRESS,
> 'NULL');
> ELSIF (P_CONTENT_LOB_CACHE IS NOT NULL) THEN
> SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40774,
> 'contentColumn.cache',
> P_CONTENT_LOB_CACHE,
> 'NULL');
> ELSIF (P_CONTENT_LOB_ENCRYPT IS NOT NULL) THEN
> SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40774,
> 'contentColumn.encrypt',
> P_CONTENT_LOB_ENCRYPT,
> 'NULL');
> ELSIF (P_CONTENT_LOB_TS IS NOT NULL) THEN
> SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40774,
> 'contentColumn.tablespace',
> P_CONTENT_LOB_TS,
> 'NULL');
> END IF;
>
> END ENFORCE_ATP_AND_ADW_SETTINGS;
>
> PROCEDURE ENFORCE_AJD_SETTINGS(P_URI_NAME IN NVARCHAR2,
> P_CREATE_MODE IN VARCHAR2,
660,661d724
< P_CONTENT_COLUMN_JSON_FORMAT := 'OSON';
< P_SIZE_LIMIT := '32m';
665c728,730
< IF (P_SCHEMA_NAME <> SYS_CONTEXT('USERENV','CURRENT_SCHEMA')) THEN
---
> IF (P_CREATE_MODE <> 'DDL') THEN
> SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40826, P_CREATE_MODE);
> ELSIF (P_SCHEMA_NAME <> SYS_CONTEXT('USERENV','CURRENT_SCHEMA')) THEN
706a772,775
>
>
>
>
707a777
> (P_KEY_ASSIGNMENT_METHOD <> 'CLIENT') AND
712c782
< 'UUID, OID');
---
> 'UUID, CLIENT');
718,723d787
< ELSIF ((P_KEY_ASSIGNMENT_METHOD = 'UUID') AND
< (P_KEY_PATH IS NOT NULL)) THEN
< SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40774,
< 'keyColumn.path',
< P_KEY_PATH,
< 'NULL');
734a799,805
>
>
> ELSIF (P_MEDIA_TYPE_COLUMN_NAME IS NOT NULL) THEN
> SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40774,
> 'mediaTypeColumn.name',
> P_MEDIA_TYPE_COLUMN_NAME,
> 'NULL');
740c811,814
< ELSIF (P_CONTENT_COLUMN_TYPE <> 'BLOB') THEN
---
>
>
> ELSIF ((P_CONTENT_COLUMN_TYPE <> 'BLOB') AND
> (DBMS_SODA_ADMIN.V_COMPATIBLE < 20)) THEN
744a819,827
>
>
> ELSIF ((P_CONTENT_COLUMN_TYPE <> 'JSON') AND
> (P_CONTENT_COLUMN_TYPE <> 'BLOB') AND
> (DBMS_SODA_ADMIN.V_COMPATIBLE >= 20)) THEN
> SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40774,
> 'contentColumn.sqlType',
> P_CONTENT_COLUMN_TYPE,
> 'JSON, BLOB');
750c833
< ELSIF (P_CONTENT_VALIDATION <> 'STANDARD') THEN
---
> ELSIF (P_CONTENT_VALIDATION IS NOT NULL) THEN
754,755c837,838
< 'STANDARD');
< ELSIF (P_CONTENT_LOB_COMPRESS <> 'NONE') THEN
---
> 'NULL');
> ELSIF (P_CONTENT_LOB_COMPRESS IS NOT NULL) THEN
759,760c842,843
< 'NONE');
< ELSIF (P_CONTENT_LOB_CACHE <> 'true') THEN
---
> 'NULL');
> ELSIF (P_CONTENT_LOB_CACHE IS NOT NULL) THEN
764,765c847,848
< 'true');
< ELSIF (P_CONTENT_LOB_ENCRYPT <> 'NONE') THEN
---
> 'NULL');
> ELSIF (P_CONTENT_LOB_ENCRYPT IS NOT NULL) THEN
769c852
< 'NONE');
---
> 'NULL');
806c889
< ELSIF (P_VERSIONING_METHOD <> 'SHA256') THEN
---
> ELSIF (P_VERSIONING_METHOD <> 'UUID') THEN
810,815c893
< 'SHA256');
< ELSIF (P_MEDIA_TYPE_COLUMN_NAME IS NOT NULL) THEN
< SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40774,
< 'mediaTypeColumn.name',
< P_MEDIA_TYPE_COLUMN_NAME,
< 'NULL');
---
> 'UUID');
845c923,942
< END AJD_SETTINGS;
---
> END ENFORCE_AJD_SETTINGS;
>
> FUNCTION CHANGE_SCHEMA(P_DESCRIPTOR IN VARCHAR2,
> P_SCHEMA IN VARCHAR2)
> RETURN VARCHAR2
> IS
> V_DESCRIPTOR JSON_OBJECT_T;
> BEGIN
>
> IF (P_DESCRIPTOR IS NULL)
> THEN
> SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40801);
> END IF;
>
> V_DESCRIPTOR := JSON_OBJECT_T.PARSE(P_DESCRIPTOR);
> V_DESCRIPTOR.PUT('schemaName', P_SCHEMA);
>
> RETURN V_DESCRIPTOR.TO_STRING;
>
> END CHANGE_SCHEMA;
919c1016,1017
< V_AJD BOOLEAN := FALSE;
---
> V_DEFAULT_METADATA BOOLEAN := FALSE;
> V_CONSTRAINT BOOLEAN := TRUE;
949a1048
>
951c1050
< SYS.DBMS_SODA_UTIL.CHECKCOMPAT();
---
> DBMS_SODA_ADMIN.V_COMPATIBLE := SYS.DBMS_SODA_UTIL.CHECKANDGETCOMPAT;
958,960c1057,1059
<
<
< V_AJD := SYS.DBMS_SODA_UTIL.ISJDCS;
---
> IF (V_SERVICE IS NULL) THEN
> V_SERVICE := SYS.DBMS_SODA_UTIL.GETSERVICENAME;
> END IF;
1110c1209,1219
< V_VERSIONING_METHOD := 'SHA256';
---
>
>
> IF ((V_SERVICE = 'JDCS') OR
> (V_SERVICE = 'DWCS') OR
> (V_SERVICE = 'OLTP') OR
> (V_SERVICE = 'PAAS')) THEN
> V_VERSIONING_METHOD := 'UUID';
> ELSE
> V_VERSIONING_METHOD := 'SHA256';
> END IF;
>
1112c1221,1226
< V_CONTENT_LOB_CACHE := 'true';
---
> IF ((V_SERVICE <> 'JDCS') AND
> (V_SERVICE <> 'DWCS') AND
> (V_SERVICE <> 'OLTP') AND
> (V_SERVICE <> 'PAAS')) THEN
> V_CONTENT_LOB_CACHE := 'true';
> END IF;
1114a1229
> V_DEFAULT_METADATA := TRUE;
1169a1285
>
1171c1287,1301
< V_CONTENT_COLUMN_TYPE := 'BLOB';
---
> IF (V_MEDIA_TYPE_COLUMN_NAME IS NOT NULL) THEN
> V_CONTENT_COLUMN_TYPE := 'BLOB';
> ELSE
> V_CONTENT_COLUMN_TYPE := 'BLOB';
> IF ((V_SERVICE = 'JDCS') OR
> (V_SERVICE = 'OLTP') OR
> (V_SERVICE = 'DWCS') OR
> (V_SERVICE = 'PAAS')) THEN
> V_CONTENT_COLUMN_JSON_FORMAT := 'OSON';
> V_SIZE_LIMIT := MAX_BINARY_SIZE;
> ELSE
> V_CONTENT_COLUMN_JSON_FORMAT := NULL;
> V_SIZE_LIMIT := NULL;
> END IF;
> END IF;
1187a1318,1328
> IF (((V_SERVICE = 'JDCS') OR
> (V_SERVICE = 'OLTP') OR
> (V_SERVICE = 'DWCS') OR
> (V_SERVICE = 'PAAS')) AND
> (V_MEDIA_TYPE_COLUMN_NAME IS NULL)) THEN
> V_CONTENT_COLUMN_JSON_FORMAT := 'OSON';
> V_SIZE_LIMIT := MAX_BINARY_SIZE;
> ELSE
> V_CONTENT_COLUMN_JSON_FORMAT := NULL;
> V_SIZE_LIMIT := NULL;
> END IF;
1257,1258c1398,1401
< IF (V_CONTENT_VALIDATION IS NULL) THEN
< V_CONTENT_VALIDATION := 'STANDARD';
---
> IF (V_CONTENT_VALIDATION IS NULL) THEN
> IF (V_CONTENT_COLUMN_JSON_FORMAT IS NULL) THEN
> V_CONTENT_VALIDATION := 'STANDARD';
> END IF;
1268c1411,1412
< IF (V_CONTENT_COLUMN_TYPE IN ('CLOB', 'NCLOB', 'BLOB')) THEN
---
> IF ((V_CONTENT_COLUMN_TYPE IN ('CLOB', 'NCLOB', 'BLOB')) AND
> (V_CONTENT_COLUMN_JSON_FORMAT IS NULL)) THEN
1316c1460,1465
< SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40646, V_CONTENT_COLUMN_TYPE);
---
> IF (V_CONTENT_COLUMN_JSON_FORMAT = 'OSON') THEN
> SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40822);
> ELSE
> SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40646,
> V_CONTENT_COLUMN_TYPE);
> END IF;
1318,1319d1466
< ELSE
< V_CONTENT_LOB_COMPRESS := 'NONE';
1323c1470,1475
< SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40646, V_CONTENT_COLUMN_TYPE);
---
> IF (V_CONTENT_COLUMN_JSON_FORMAT = 'OSON') THEN
> SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40822);
> ELSE
> SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40646,
> V_CONTENT_COLUMN_TYPE);
> END IF;
1325,1326d1476
< ELSE
< V_CONTENT_LOB_CACHE := 'false';
1330c1480,1485
< SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40646, V_CONTENT_COLUMN_TYPE);
---
> IF (V_CONTENT_COLUMN_JSON_FORMAT = 'OSON') THEN
> SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40822);
> ELSE
> SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40646,
> V_CONTENT_COLUMN_TYPE);
> END IF;
1332,1333d1486
< ELSE
< V_CONTENT_LOB_ENCRYPT := 'NONE';
1482,1484c1635,1660
< IF (P_CREATE_MODE = 'MAP') THEN
< V_CREATE_MODE := P_CREATE_MODE;
< ELSIF (P_CREATE_MODE = 'DDL') THEN
---
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> IF ((P_CREATE_MODE = 'MAP') OR (P_CREATE_MODE = 'REPLACE_AND_MAP')) THEN
> V_CREATE_MODE := 'MAP';
> ELSIF ((P_CREATE_MODE = 'DDL') OR (P_CREATE_MODE = 'PRESERVE_DDL') OR
> (P_CREATE_MODE = 'REPLACE_AND_PRESERVE_DDL')) THEN
1487c1663,1675
< V_CREATE_MODE := 'MAP';
---
>
>
>
>
> IF ((P_CREATE_MODE = 'PRESERVE_DDL') OR
> (P_CREATE_MODE = 'REPLACE_AND_PRESERVE_DDL')) THEN
> SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40802, P_CREATE_MODE);
>
>
>
> ELSE
> V_CREATE_MODE := 'MAP';
> END IF;
1489c1677
< V_CREATE_MODE := P_CREATE_MODE;
---
> V_CREATE_MODE := 'DDL';
1497a1686,1688
> ELSIF (P_CREATE_MODE = 'DDL_WITHOUT_DEPENDENTS') THEN
> V_CONSTRAINT := FALSE;
> V_CREATE_MODE := 'DDL';
1526a1718,1728
> IF (V_KEY_ASSIGNMENT_METHOD IN ('EXTRACT', 'INSERT', 'OID')) THEN
>
> IF (V_KEY_PATH IS NULL) THEN
> SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40746, V_KEY_ASSIGNMENT_METHOD);
>
>
> ELSIF (V_KEY_COLUMN_TYPE <> 'VARCHAR2') THEN
> SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40828, 'VARCHAR2');
> ELSIF (V_KEY_COLUMN_LEN <> MAX_KEY_LENGTH) THEN
> SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40829, MAX_KEY_LENGTH);
> END IF;
1528,1530c1730,1733
< IF ((V_KEY_PATH IS NULL) AND
< (V_KEY_ASSIGNMENT_METHOD IN ('EXTRACT','INSERT','OID'))) THEN
< SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40746, V_KEY_ASSIGNMENT_METHOD);
---
> ELSE
> IF (V_KEY_PATH IS NOT NULL) THEN
> SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40827, V_KEY_ASSIGNMENT_METHOD);
> END IF;
1569a1773,1782
> IF (V_CONTENT_COLUMN_JSON_FORMAT = 'OSON') THEN
> IF (V_CONTENT_VALIDATION IS NOT NULL) THEN
> SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40823);
> ELSIF (V_CONTENT_LOB_TS IS NOT NULL) THEN
> SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40824);
> ELSIF (V_MEM_OPTIMIZE_READ <> 'false') THEN
> SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40825);
> END IF;
> END IF;
>
1574,1577c1787,1800
< IF (V_AJD) THEN
< AJD_SETTINGS(
< V_CONTENT_COLUMN_JSON_FORMAT,
< V_SIZE_LIMIT,
---
> IF (((V_SERVICE = 'DWCS') OR
> (V_SERVICE = 'OLTP') OR
> (V_SERVICE = 'PAAS')) AND
> (V_MEDIA_TYPE_COLUMN_NAME IS NULL)) THEN
> ENFORCE_ATP_AND_ADW_SETTINGS(
> V_CONTENT_COLUMN_TYPE,
> V_CONTENT_COLUMN_LEN,
> V_CONTENT_VALIDATION,
> V_CONTENT_LOB_COMPRESS,
> V_CONTENT_LOB_CACHE,
> V_CONTENT_LOB_ENCRYPT,
> V_CONTENT_LOB_TS);
> ELSIF (V_SERVICE = 'JDCS') THEN
> ENFORCE_AJD_SETTINGS(
1578a1802
> V_CREATE_MODE,
1719,1732c1943,1982
<
<
<
< EXCEPTION WHEN DUP_VAL_ON_INDEX THEN
< DECLARE
< V_EXISTING_DESCRIPTOR VARCHAR2(4000);
< V_EXISTING_CREATE_TIME TIMESTAMP(6);
< BEGIN
< DBMS_SODA_DML.DO_READ_DESCRIPTOR(P_URI_NAME,
< V_OWNER,
< V_EXISTING_DESCRIPTOR,
< V_EXISTING_CREATE_TIME);
<
< IF (P_DESCRIPTOR <> V_EXISTING_DESCRIPTOR) THEN
---
>
>
>
> EXCEPTION WHEN DUP_VAL_ON_INDEX THEN
> DECLARE
> V_EXISTING_DESCRIPTOR VARCHAR2(4000);
> V_EXISTING_CREATE_TIME TIMESTAMP(6);
> V_UPDATED_COUNT NUMBER := 0;
> BEGIN
> DBMS_SODA_DML.DO_READ_DESCRIPTOR(P_URI_NAME,
> V_OWNER,
> V_EXISTING_DESCRIPTOR,
> V_EXISTING_CREATE_TIME);
>
>
>
> IF (P_DESCRIPTOR <> V_EXISTING_DESCRIPTOR) THEN
> IF ((P_CREATE_MODE = 'REPLACE_AND_MAP') OR
> (P_CREATE_MODE = 'REPLACE_AND_PRESERVE_DDL')) THEN
> DBMS_SODA_DML.DO_UPDATE(P_URI_NAME, V_OWNER, V_SCHEMA,
> V_OBJECT_NAME, V_OBJECT_TYPE,
> V_CREATE_TIME, V_CREATE_MODE,
> P_DESCRIPTOR, V_UPDATED_COUNT);
>
>
>
> IF (V_UPDATED_COUNT = 0) THEN
> IF (I = 3) THEN
> ROLLBACK;
> SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40670);
> ELSE
> CONTINUE;
> END IF;
>
>
>
> ELSE
> EXIT;
> END IF;
> ELSE
1733a1984,1989
> IF (V_DEFAULT_METADATA = TRUE) THEN
> P_DESCRIPTOR := V_EXISTING_DESCRIPTOR;
> P_CREATE_TIME := TO_CHAR(V_EXISTING_CREATE_TIME,
> 'YYYY-MM-DD"T"HH24:MI:SS.FF');
> RETURN;
> END IF;
1735,1738c1991,2006
<
< ELSE
< P_CREATE_TIME := TO_CHAR(V_EXISTING_CREATE_TIME,
< 'YYYY-MM-DD"T"HH24:MI:SS.FF');
---
> END IF;
>
> ELSE
> P_CREATE_TIME := TO_CHAR(V_EXISTING_CREATE_TIME,
> 'YYYY-MM-DD"T"HH24:MI:SS.FF');
> ROLLBACK;
> RETURN;
> END IF;
>
>
>
>
>
>
> EXCEPTION WHEN NO_DATA_FOUND THEN
> IF (I = 3) THEN
1740c2008,2010
< RETURN;
---
> SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40670);
> ELSE
> CONTINUE;
1742,1754d2011
<
<
<
<
<
<
< EXCEPTION WHEN NO_DATA_FOUND THEN
< IF (I = 3) THEN
< ROLLBACK;
< SYS.DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR(-40670);
< ELSE
< CONTINUE;
< END IF;
1762c2019,2020
< IF (V_CREATE_MODE <> 'DDL') THEN
---
> IF ((V_CREATE_MODE <> 'DDL') OR (P_CREATE_MODE = 'PRESERVE_DDL') OR
> (P_CREATE_MODE = 'REPLACE_AND_PRESERVE_DDL')) THEN
1781c2039,2043
< V_SQLTEXT := V_SQLTEXT||' not null, ';
---
> IF (V_CONSTRAINT) THEN
> V_SQLTEXT := V_SQLTEXT||' not null, ';
> ELSE
> V_SQLTEXT := V_SQLTEXT||', ';
> END IF;
1786c2048,2053
< ' varchar2(255) default ''application/json'' not null, ';
---
> ' varchar2(255) default ''application/json''';
> IF (V_CONSTRAINT) THEN
> V_SQLTEXT := V_SQLTEXT||' not null, ';
> ELSE
> V_SQLTEXT := V_SQLTEXT||', ';
> END IF;
1791c2058,2063
< ' timestamp default sys_extract_utc(SYSTIMESTAMP) not null, ';
---
> ' timestamp default sys_extract_utc(SYSTIMESTAMP)';
> IF (V_CONSTRAINT) THEN
> V_SQLTEXT := V_SQLTEXT||' not null, ';
> ELSE
> V_SQLTEXT := V_SQLTEXT||', ';
> END IF;
1796c2068,2073
< ' timestamp default sys_extract_utc(SYSTIMESTAMP) not null, ';
---
> ' timestamp default sys_extract_utc(SYSTIMESTAMP)';
> IF (V_CONSTRAINT) THEN
> V_SQLTEXT := V_SQLTEXT||' not null, ';
> ELSE
> V_SQLTEXT := V_SQLTEXT||', ';
> END IF;
1802c2079,2084
< V_SQLTEXT := V_SQLTEXT||' number not null, ';
---
> V_SQLTEXT := V_SQLTEXT||' number';
> IF (V_CONSTRAINT) THEN
> V_SQLTEXT := V_SQLTEXT||' not null, ';
> ELSE
> V_SQLTEXT := V_SQLTEXT||', ';
> END IF;
1804c2086,2091
< V_SQLTEXT := V_SQLTEXT||' number not null, ';
---
> V_SQLTEXT := V_SQLTEXT||' number';
> IF (V_CONSTRAINT) THEN
> V_SQLTEXT := V_SQLTEXT||' not null, ';
> ELSE
> V_SQLTEXT := V_SQLTEXT||', ';
> END IF;
1808c2095,2100
< V_SQLTEXT := V_SQLTEXT||' varchar2(255) not null, ';
---
> V_SQLTEXT := V_SQLTEXT||' varchar2(255)';
> IF (V_CONSTRAINT) THEN
> V_SQLTEXT := V_SQLTEXT||' not null, ';
> ELSE
> V_SQLTEXT := V_SQLTEXT||', ';
> END IF;
1818c2110,2114
< V_SQLTEXT := V_SQLTEXT||' not null, ';
---
> IF (V_CONSTRAINT) THEN
> V_SQLTEXT := V_SQLTEXT||' not null, ';
> ELSE
> V_SQLTEXT := V_SQLTEXT||', ';
> END IF;
1826,1828d2121
< V_SQLTEXT := V_SQLTEXT||', ';
<
< V_SQLTEXT := V_SQLTEXT||'primary key ('||V_QUOT_KEY_NAME||')';
1829a2123,2126
> IF (V_CONSTRAINT) THEN
> V_SQLTEXT := V_SQLTEXT||', ';
> V_SQLTEXT := V_SQLTEXT||'primary key ('||V_QUOT_KEY_NAME||')';
> END IF;
1832d2128
< V_SQLTEXT := V_SQLTEXT||', check (';
1834,1840c2130,2151
< IF (V_NESTED_CHECK) THEN
< V_SQLTEXT := V_SQLTEXT||'('||V_QUOT_CONTENT_NAME||' is null) or (';
< END IF;
< IF (V_MEDIA_TYPE_COLUMN_NAME IS NOT NULL) THEN
< IF (NOT(V_NESTED_CHECK)) THEN
< V_SQLTEXT := V_SQLTEXT||'(';
< V_NESTED_CHECK := TRUE;
---
> IF (V_CONSTRAINT) THEN
> V_SQLTEXT := V_SQLTEXT||', check (';
>
> IF (V_NESTED_CHECK) THEN
> V_SQLTEXT := V_SQLTEXT||'('||V_QUOT_CONTENT_NAME||' is null) or (';
> END IF;
> IF (V_MEDIA_TYPE_COLUMN_NAME IS NOT NULL) THEN
> IF (NOT(V_NESTED_CHECK)) THEN
> V_SQLTEXT := V_SQLTEXT||'(';
> V_NESTED_CHECK := TRUE;
> END IF;
> V_SQLTEXT := V_SQLTEXT||V_QUOT_MEDIATYPE_NAME||
> ' <> ''application/json'') or (';
> END IF;
> V_SQLTEXT := V_SQLTEXT||V_QUOT_CONTENT_NAME||' is json';
> IF (V_CONTENT_COLUMN_JSON_FORMAT = 'OSON') THEN
> V_SQLTEXT := V_SQLTEXT||' format oson';
> ELSIF (V_CONTENT_COLUMN_TYPE IN ('BLOB','RAW')) THEN
> V_SQLTEXT := V_SQLTEXT||' format json';
> END IF;
> IF (V_SIZE_LIMIT IS NOT NULL) THEN
> V_SQLTEXT := V_SQLTEXT||' (size limit '||V_SIZE_LIMIT;
1842,1853d2152
< V_SQLTEXT := V_SQLTEXT||V_QUOT_MEDIATYPE_NAME||
< ' <> ''application/json'') or (';
< END IF;
< V_SQLTEXT := V_SQLTEXT||V_QUOT_CONTENT_NAME||' is json';
< IF (V_CONTENT_COLUMN_JSON_FORMAT = 'OSON') THEN
< V_SQLTEXT := V_SQLTEXT||' format oson';
< ELSIF (V_CONTENT_COLUMN_TYPE IN ('BLOB','RAW')) THEN
< V_SQLTEXT := V_SQLTEXT||' format json';
< END IF;
< IF (V_SIZE_LIMIT IS NOT NULL) THEN
< V_SQLTEXT := V_SQLTEXT||' (size limit '||V_SIZE_LIMIT;
< END IF;
1855,1862c2154,2159
<
< IF (V_CONTENT_VALIDATION = 'STRICT') THEN
< V_SQLTEXT := V_SQLTEXT||' strict with unique keys)';
< ELSIF (V_CONTENT_VALIDATION = 'STANDARD') THEN
< V_SQLTEXT := V_SQLTEXT||' strict)';
< ELSE
< V_SQLTEXT := V_SQLTEXT||')';
< END IF;
---
>
> IF (V_CONTENT_VALIDATION = 'STRICT') THEN
> V_SQLTEXT := V_SQLTEXT||' strict with unique keys';
> ELSIF (V_CONTENT_VALIDATION = 'STANDARD') THEN
> V_SQLTEXT := V_SQLTEXT||' strict';
> END IF;
1864,1868c2161
<
<
< IF (V_SIZE_LIMIT IS NOT NULL) THEN
< V_SQLTEXT := V_SQLTEXT||')';
< END IF;
---
> V_SQLTEXT := V_SQLTEXT ||')';
1870,1872c2163,2172
< IF (V_NESTED_CHECK) THEN
< V_SQLTEXT := V_SQLTEXT||')';
< END IF;
---
>
>
> IF (V_SIZE_LIMIT IS NOT NULL) THEN
> V_SQLTEXT := V_SQLTEXT||')';
> END IF;
>
> IF (V_NESTED_CHECK) THEN
> V_SQLTEXT := V_SQLTEXT||')';
> END IF;
> END IF;
1894c2194,2195
< IF (V_CONTENT_COLUMN_TYPE IN ('CLOB','NCLOB','BLOB')) THEN
---
> IF ((V_CONTENT_COLUMN_TYPE IN ('CLOB','NCLOB','BLOB')) AND
> (V_CONTENT_COLUMN_JSON_FORMAT IS NULL)) THEN
1950,1951c2251,2252
< NOT(V_FORCE_CREATE)) THEN
< DBMS_SODA_DML.DO_UPDATE(P_URI_NAME, 'MAP', V_OWNER);
---
> NOT(V_FORCE_CREATE) AND (NOT(V_SERVICE = 'JDCS'))) THEN
> DBMS_SODA_DML.DO_UPDATE_MODE(P_URI_NAME, 'MAP', V_OWNER);
1991,2003c2292,2297
< IF (V_LAST_MODIFIED_INDEX IS NOT NULL) THEN
< V_SQLTEXT := 'create index '||V_QUOT_SCHEMA||'.'||
< V_QUOT_MODIFIED_INDEX||' on '||
< V_QUOT_OBJECT||' ('||V_QUOT_MODIFIED_NAME||
< ','||V_QUOT_KEY_NAME||')';
<
< IF (P_VERBOSE) THEN
< DBMS_OUTPUT.PUT_LINE(V_SQLTEXT);
< END IF;
<
< BEGIN
< DO_DDL(V_SQLTEXT);
< EXCEPTION WHEN OTHERS THEN
---
> IF (V_CONSTRAINT) THEN
> IF (V_LAST_MODIFIED_INDEX IS NOT NULL) THEN
> V_SQLTEXT := 'create index '||V_QUOT_SCHEMA||'.'||
> V_QUOT_MODIFIED_INDEX||' on '||
> V_QUOT_OBJECT||' ('||V_QUOT_MODIFIED_NAME||
> ','||V_QUOT_KEY_NAME||')';
2005,2010c2299,2300
< IF ((SQLCODE = XDB.DBMS_SODA_ADMIN.SQL_OBJECT_EXISTS) AND
< NOT(V_FORCE_CREATE)) THEN
< NULL;
< ELSE
< ROLLBACK;
< RAISE;
---
> IF (P_VERBOSE) THEN
> DBMS_OUTPUT.PUT_LINE(V_SQLTEXT);
2012,2013c2302,2316
< END;
< END IF;
---
>
> BEGIN
> DO_DDL(V_SQLTEXT);
> EXCEPTION WHEN OTHERS THEN
>
> IF ((SQLCODE = XDB.DBMS_SODA_ADMIN.SQL_OBJECT_EXISTS) AND
> NOT(V_FORCE_CREATE)) THEN
> NULL;
> ELSE
> ROLLBACK;
> RAISE;
> END IF;
> END;
> END IF;
> END IF;
2106c2409,2411
< PROCEDURE DROP_COLLECTION(P_URI_NAME IN NVARCHAR2)
---
> PROCEDURE DROP_COLLECTION(P_URI_NAME IN NVARCHAR2,
> P_PURGE IN VARCHAR2 DEFAULT 'FALSE',
> P_DROP_MAPPED_TABLE IN VARCHAR2 DEFAULT 'FALSE')
2125c2430
< SYS.DBMS_SODA_UTIL.CHECKCOMPAT();
---
> DBMS_SODA_ADMIN.V_COMPATIBLE := SYS.DBMS_SODA_UTIL.CHECKANDGETCOMPAT;
2148c2453,2454
< IF (V_CREATE_MODE = 'DDL') THEN
---
> IF (V_CREATE_MODE = 'DDL' OR
> (V_CREATE_MODE = 'MAP' AND UPPER(P_DROP_MAPPED_TABLE) = 'TRUE')) THEN
2154a2461,2463
> IF (UPPER(P_PURGE) = 'TRUE') THEN
> V_SQLTEXT := V_SQLTEXT||' purge';
> END IF;
2201,2204c2510,2514
< PROCEDURE DROP_COLLECTIONS(P_COLLECTIONS OUT NVCNTAB,
< P_ERRORS OUT VCNTAB,
< P_FORCE IN VARCHAR2)
<
---
> PROCEDURE DROP_COLLECTIONS(P_COLLECTIONS OUT NVCNTAB,
> P_ERRORS OUT VCNTAB,
> P_FORCE IN VARCHAR2,
> P_PURGE IN VARCHAR2 DEFAULT 'FALSE',
> P_DROP_MAPPED_TABLE IN VARCHAR2 DEFAULT 'FALSE')
2217c2527
< SYS.DBMS_SODA_UTIL.CHECKCOMPAT();
---
> DBMS_SODA_ADMIN.V_COMPATIBLE := SYS.DBMS_SODA_UTIL.CHECKANDGETCOMPAT;
2225c2535,2537
< DBMS_SODA_ADMIN.DROP_COLLECTION(COLLECTION_REC.URI_NAME);
---
> DBMS_SODA_ADMIN.DROP_COLLECTION(COLLECTION_REC.URI_NAME,
> P_PURGE,
> P_DROP_MAPPED_TABLE);
2260c2572
< SYS.DBMS_SODA_UTIL.CHECKCOMPAT();
---
> DBMS_SODA_ADMIN.V_COMPATIBLE := SYS.DBMS_SODA_UTIL.CHECKANDGETCOMPAT;
2287c2599
< SYS.DBMS_SODA_UTIL.CHECKCOMPAT();
---
> DBMS_SODA_ADMIN.V_COMPATIBLE := SYS.DBMS_SODA_UTIL.CHECKANDGETCOMPAT;
2368a2681,2775
> PROCEDURE GET_SERVICE_AND_COMPATIBLE(P_SERVICE OUT VARCHAR2,
> P_COMPATIBLE OUT NUMBER)
> IS
> BEGIN
>
>
> IF (DBMS_SODA_ADMIN.V_COMPATIBLE_CHECK_PASSED != TRUE) THEN
> DBMS_SODA_ADMIN.V_COMPATIBLE := SYS.DBMS_SODA_UTIL.CHECKANDGETCOMPAT;
> DBMS_SODA_ADMIN.V_COMPATIBLE_CHECK_PASSED := TRUE;
> END IF;
> P_COMPATIBLE := DBMS_SODA_ADMIN.V_COMPATIBLE;
>
>
> IF (V_SERVICE IS NULL) THEN
> V_SERVICE := SYS.DBMS_SODA_UTIL.GETSERVICENAME;
> END IF;
>
> P_SERVICE := V_SERVICE;
>
> END GET_SERVICE_AND_COMPATIBLE;
>
> PROCEDURE GET_DEFAULT_METADATA_C(P_METADATA OUT CLOB)
> IS
> V_METADATA VARCHAR2(4000) := NULL;
> BEGIN
> GET_DEFAULT_METADATA_V(V_METADATA);
> P_METADATA := TO_CLOB(V_METADATA);
> END GET_DEFAULT_METADATA_C;
>
> PROCEDURE GET_DEFAULT_METADATA_V(P_METADATA OUT VARCHAR2)
> IS
> P_COMPATIBLE NUMBER := NULL;
> BEGIN
>
> IF (DBMS_SODA_ADMIN.V_COMPATIBLE_CHECK_PASSED != TRUE) THEN
> DBMS_SODA_ADMIN.V_COMPATIBLE := SYS.DBMS_SODA_UTIL.CHECKANDGETCOMPAT;
> DBMS_SODA_ADMIN.V_COMPATIBLE_CHECK_PASSED := TRUE;
> END IF;
> P_COMPATIBLE := DBMS_SODA_ADMIN.V_COMPATIBLE;
>
>
> IF (V_SERVICE IS NULL) THEN
> V_SERVICE := SYS.DBMS_SODA_UTIL.GETSERVICENAME;
> END IF;
>
> P_METADATA := '{"keyColumn":{"name":"ID",' ||
> '"sqlType":"VARCHAR2",' ||
> '"maxLength":255,' ||
> '"assignmentMethod":"UUID"},';
> IF ((V_SERVICE = 'JDCS') OR
> (V_SERVICE = 'OLTP') OR
> (V_SERVICE = 'DWCS') OR
> (V_SERVICE = 'PAAS')) THEN
> IF (P_COMPATIBLE >= 20) THEN
> P_METADATA := P_METADATA ||
> '"contentColumn":{"name":"JSON_DOCUMENT",' ||
> '"sqlType":"JSON"},';
> ELSE
> P_METADATA := P_METADATA ||
> '"contentColumn":{"name":"JSON_DOCUMENT",' ||
> '"sqlType":"BLOB",' ||
> '"jsonFormat":"OSON"},';
> END IF;
> P_METADATA := P_METADATA ||
> '"lastModifiedColumn":{"name":"LAST_MODIFIED"},' ||
> '"versionColumn":{"name":"VERSION",' ||
> '"method":"UUID"},';
> ELSE
> IF (P_COMPATIBLE >= 20) THEN
> P_METADATA := P_METADATA ||
> '"contentColumn":{"name":"JSON_DOCUMENT",' ||
> '"sqlType":"JSON"},';
> P_METADATA := P_METADATA ||
> '"lastModifiedColumn":{"name":"LAST_MODIFIED"},' ||
> '"versionColumn":{"name":"VERSION",' ||
> '"method":"UUID"},';
> ELSE
> P_METADATA := P_METADATA ||
> '"contentColumn":{"name":"JSON_DOCUMENT",' ||
> '"sqlType":"BLOB",' ||
> '"compress":"NONE",' ||
> '"cache":true,' ||
> '"encrypt":"NONE",' ||
> '"validation":"STANDARD"},';
> P_METADATA := P_METADATA ||
> '"lastModifiedColumn":{"name":"LAST_MODIFIED"},' ||
> '"versionColumn":{"name":"VERSION",' ||
> '"method":"SHA256"},';
> END IF;
> END IF;
> P_METADATA := P_METADATA ||
> '"creationTimeColumn":{"name":"CREATED_ON"},' ||
> '"readOnly":false}';
> END GET_DEFAULT_METADATA_V;
>
2728a3136,3139
> IF (P_DATATYPES(J) IS NULL)
> THEN
> P_DATATYPES(J) := 'VARCHAR2';
> END IF;
2851c3262
< SYS.DBMS_SODA_UTIL.CHECKCOMPAT();
---
> DBMS_SODA_ADMIN.V_COMPATIBLE := SYS.DBMS_SODA_UTIL.CHECKANDGETCOMPAT;
4036c4447,4448
< P_DATA_GUIDE IN CLOB)
---
> P_DATA_GUIDE IN CLOB,
> P_MATERIALIZE IN BOOLEAN DEFAULT FALSE)
4054c4466
< SYS.DBMS_SODA_UTIL.CHECKCOMPAT();
---
> DBMS_SODA_ADMIN.V_COMPATIBLE := SYS.DBMS_SODA_UTIL.CHECKANDGETCOMPAT;
4084c4496,4497
< V_CONTENT_COLUMN_NAME, P_DATA_GUIDE);
---
> V_CONTENT_COLUMN_NAME, P_DATA_GUIDE,
> MATERIALIZE => P_MATERIALIZE);
21a22,45 > PROCEDURE DO_UPDATE(P_URI_NAME IN NVARCHAR2, > P_OWNER IN VARCHAR2, > P_SCHEMA_NAME IN VARCHAR2, > P_OBJECT_NAME IN VARCHAR2, > P_OBJECT_TYPE IN VARCHAR2, > P_CREATE_TIME IN TIMESTAMP, > P_CREATE_MODE IN VARCHAR2, > P_DESCRIPTOR IN VARCHAR2, > P_ROW_COUNT OUT NUMBER) > IS > BEGIN > UPDATE XDB.JSON$COLLECTION_METADATA > SET OBJECT_SCHEMA = P_SCHEMA_NAME, > OBJECT_NAME = P_OBJECT_NAME, > OBJECT_TYPE = P_OBJECT_TYPE, > CREATED_ON = P_CREATE_TIME, > CREATE_MODE = P_CREATE_MODE, > JSON_DESCRIPTOR = P_DESCRIPTOR > WHERE OWNER = P_OWNER > AND URI_NAME = P_URI_NAME; > P_ROW_COUNT := SQL%ROWCOUNT; > END DO_UPDATE; > > 40,42c64,66 < PROCEDURE DO_UPDATE(P_URI_NAME IN NVARCHAR2, < P_CREATE_MODE IN VARCHAR2, < P_OWNER IN VARCHAR2) --- > PROCEDURE DO_UPDATE_MODE(P_URI_NAME IN NVARCHAR2, > P_CREATE_MODE IN VARCHAR2, > P_OWNER IN VARCHAR2) 49c73 < END DO_UPDATE; --- > END DO_UPDATE_MODE; 53c77,78 < P_CREATE_MODE OUT VARCHAR2) --- > P_CREATE_MODE OUT VARCHAR2, > P_TIMEOUT IN PLS_INTEGER DEFAULT NULL) 54a80 > V_STMT VARCHAR2(2000); 56,61c82,92 < SELECT CREATE_MODE < INTO P_CREATE_MODE < FROM XDB.JSON$COLLECTION_METADATA < WHERE OWNER = P_OWNER < AND URI_NAME = P_URI_NAME < FOR UPDATE; --- > V_STMT := 'select CREATE_MODE > from xdb.JSON$COLLECTION_METADATA > where OWNER = :1' || > ' and URI_NAME = :2' || > ' for update'; > IF (P_TIMEOUT IS NOT NULL) THEN > V_STMT := V_STMT || ' wait ' || P_TIMEOUT; > END IF; > EXECUTE IMMEDIATE V_STMT > INTO P_CREATE_MODE > USING P_OWNER, P_URI_NAME;
58a59,61 > IF (JVAL IS NULL) THEN > RETURN NULL; > END IF; 85a89,91 > IF (JVAL IS NULL) THEN > RETURN NULL; > END IF; 114a121,123 > IF (JVAL IS NULL) THEN > RETURN NULL; > END IF; 138a148,150 > IF (JVAL IS NULL) THEN > RETURN NULL; > END IF; 164a177,179 > IF (JVAL IS NULL) THEN > RETURN NULL; > END IF; 187a203,205 > IF (JVAL IS NULL) THEN > RETURN NULL; > END IF; 219c237,239 < (EXCEPTIONS = 'INVALID_PATCH_SPEC')) OR (EXCEPTIONS = 'ALL')) THEN --- > (EXCEPTIONS = 'INVALID_PATCH_SPEC')) OR > ((EXCEPTIONS = 'ALL') AND > (SQLCODE != XDB.DBMS_SODA_DOM.PATCH_ROOT_REMOVAL_ERROR))) THEN 242c262,264 < (EXCEPTIONS = 'INVALID_PATCH_SPEC')) OR (EXCEPTIONS = 'ALL')) THEN --- > (EXCEPTIONS = 'INVALID_PATCH_SPEC')) OR > ((EXCEPTIONS = 'ALL') AND > (SQLCODE != XDB.DBMS_SODA_DOM.PATCH_ROOT_REMOVAL_ERROR))) THEN 272c294,296 < (EXCEPTIONS = 'INVALID_PATCH_SPEC')) OR (EXCEPTIONS = 'ALL')) THEN --- > (EXCEPTIONS = 'INVALID_PATCH_SPEC')) OR > ((EXCEPTIONS = 'ALL') AND > (SQLCODE != XDB.DBMS_SODA_DOM.PATCH_ROOT_REMOVAL_ERROR))) THEN 294c318,320 < (EXCEPTIONS = 'INVALID_PATCH_SPEC')) OR (EXCEPTIONS = 'ALL')) THEN --- > (EXCEPTIONS = 'INVALID_PATCH_SPEC')) OR > ((EXCEPTIONS = 'ALL') AND > (SQLCODE != XDB.DBMS_SODA_DOM.PATCH_ROOT_REMOVAL_ERROR))) THEN 319c345,347 < (EXCEPTIONS = 'INVALID_PATCH_SPEC')) OR (EXCEPTIONS = 'ALL')) THEN --- > (EXCEPTIONS = 'INVALID_PATCH_SPEC')) OR > ((EXCEPTIONS = 'ALL') AND > (SQLCODE != XDB.DBMS_SODA_DOM.PATCH_ROOT_REMOVAL_ERROR))) THEN 341c369,371 < (EXCEPTIONS = 'INVALID_PATCH_SPEC')) OR (EXCEPTIONS = 'ALL')) THEN --- > (EXCEPTIONS = 'INVALID_PATCH_SPEC')) OR > ((EXCEPTIONS = 'ALL') AND > (SQLCODE != XDB.DBMS_SODA_DOM.PATCH_ROOT_REMOVAL_ERROR))) THEN




