This commit is contained in:
Grzegorz Michalski
2026-02-02 10:59:29 +01:00
commit ecd833f682
679 changed files with 122717 additions and 0 deletions

View File

@@ -0,0 +1,16 @@
--
-- Role to which object permissions to ODS user are granted
--
CREATE ROLE MRDS_LOADER_ROLE;
GRANT MRDS_LOADER_ROLE TO ODS;
GRANT MRDS_LOADER_ROLE TO MRDS_LOADER;
GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO MRDS_LOADER_ROLE;
GRANT EXECUTE ON DBMS_CLOUD TO MRDS_LOADER_ROLE;
EXEC DBMS_CLOUD_ADMIN.ENABLE_RESOURCE_PRINCIPAL(username => 'MRDS_LOADER');
GRANT EXECUTE ON CT_MRDS.FILE_MANAGER TO MRDS_LOADER_ROLE;
GRANT SELECT, DELETE, INSERT, UPDATE ON "CT_MRDS"."A_SOURCE_FILE_CONFIG" TO MRDS_LOADER_ROLE;
GRANT SELECT, DELETE, INSERT, UPDATE ON "CT_MRDS"."A_SOURCE_FILES_RECEIVED" TO MRDS_LOADER_ROLE;
GRANT SELECT ON "CT_MRDS"."A_SOURCE_FILES_RECEIVED_KEY_SEQ" TO MRDS_LOADER_ROLE;
GRANT SELECT_CATALOG_ROLE TO MRDS_LOADER_ROLE;

View File

@@ -0,0 +1,47 @@
-- ====================================================================
-- MRDS_LOADER User Creation Script
-- ====================================================================
-- Purpose: Create MRDS_LOADER user for cloud operations and data loading
-- Based on: MARS-757 install_package_MarsDEVOreplicator_MARS757_create_user.sql
-- ====================================================================
-- Note: User creation typically done by ADMIN, this script assumes user exists
-- CREATE USER MRDS_LOADER IDENTIFIED BY password
-- DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;
ALTER USER MRDS_LOADER QUOTA UNLIMITED ON DATA;
-- Basic session and system privileges
GRANT CREATE SESSION TO MRDS_LOADER;
GRANT SELECT ANY DICTIONARY TO MRDS_LOADER;
GRANT SELECT_CATALOG_ROLE TO MRDS_LOADER;
GRANT READ ANY TABLE TO MRDS_LOADER;
-- Create and configure MRDS_LOADER_ROLE (inherited by other schemas)
CREATE ROLE MRDS_LOADER_ROLE;
GRANT MRDS_LOADER_ROLE TO MRDS_LOADER;
GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO MRDS_LOADER_ROLE;
GRANT EXECUTE ON DBMS_CLOUD TO MRDS_LOADER_ROLE;
-- Job execution privileges
GRANT CREATE JOB TO MRDS_LOADER;
GRANT EXECUTE ON DBMS_PARALLEL_EXECUTE TO MRDS_LOADER;
-- Cloud operations privileges
EXEC DBMS_CLOUD_ADMIN.ENABLE_RESOURCE_PRINCIPAL(username => 'MRDS_LOADER');
GRANT EXECUTE ON C##CLOUD$SERVICE.DBMS_CLOUD TO MRDS_LOADER;
-- Cross-schema privileges required for data loading operations
GRANT SELECT ANY TABLE TO CT_MRDS;
-- Comprehensive ANY privileges for data loading and replication operations
GRANT CREATE ANY TABLE TO MRDS_LOADER;
GRANT DROP ANY TABLE TO MRDS_LOADER;
GRANT CREATE ANY VIEW TO MRDS_LOADER;
GRANT DROP ANY VIEW TO MRDS_LOADER;
GRANT SELECT ANY TABLE TO MRDS_LOADER;
GRANT INSERT ANY TABLE TO MRDS_LOADER;
GRANT UPDATE ANY TABLE TO MRDS_LOADER;
GRANT DELETE ANY TABLE TO MRDS_LOADER;
GRANT ALTER ANY TABLE TO MRDS_LOADER;
GRANT EXECUTE ANY PROCEDURE TO MRDS_LOADER;
GRANT SELECT ANY SEQUENCE TO MRDS_LOADER;

View File

@@ -0,0 +1,33 @@
--MARS-757
set verify off
SET serveroutput ON
--SET TIMING ON
whenever sqlerror exit sql.sqlcode rollback;
column owner format a15
column object_name format a30
column spoolname new_value spoolname
select 'install_package_MarsDEVOreplicator_MARS757_acc_' || name || '_' ||to_char(sysdate,'YYYYMMDD_HH24MISS')||'.log' spoolname from v$pdbs;
spool '&spoolname'
prompt ##### started at time #####
select systimestamp from dual;
prompt ##### database name #####
select name pdb_name from v$pdbs;
--set echo on
--=============================================================================================================================
-- start install --MARS-757 create credential acc
--=============================================================================================================================
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'DEVO_CRED_ARN',
params => JSON_OBJECT(
'aws_role_arn' value 'arn:aws:iam::845164628883:role/ECB_AWS_EXTERNAL_A2A_MRDS_STG',
'external_id_type' value 'database_ocid')
);
END;

View File

@@ -0,0 +1,33 @@
--MARS-757
set verify off
SET serveroutput ON
--SET TIMING ON
whenever sqlerror exit sql.sqlcode rollback;
column owner format a15
column object_name format a30
column spoolname new_value spoolname
select 'install_package_MarsDEVOreplicator_MARS757_dev_' || name || '_' ||to_char(sysdate,'YYYYMMDD_HH24MISS')||'.log' spoolname from v$pdbs;
spool '&spoolname'
prompt ##### started at time #####
select systimestamp from dual;
prompt ##### database name #####
select name pdb_name from v$pdbs;
--set echo on
--=============================================================================================================================
-- start install --MARS-757 create user
--=============================================================================================================================
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'DEVO_CRED_ARN',
params => JSON_OBJECT(
'aws_role_arn' value 'arn:aws:iam::303413094647:role/ECB_AWS_EXTERNAL_A2A_MRDS_LAB',
'external_id_type' value 'database_ocid')
);
END;

View File

@@ -0,0 +1,33 @@
--MARS-757
set verify off
SET serveroutput ON
--SET TIMING ON
whenever sqlerror exit sql.sqlcode rollback;
column owner format a15
column object_name format a30
column spoolname new_value spoolname
select 'install_package_MarsDEVOreplicator_MARS757_prd_' || name || '_' ||to_char(sysdate,'YYYYMMDD_HH24MISS')||'.log' spoolname from v$pdbs;
spool '&spoolname'
prompt ##### started at time #####
select systimestamp from dual;
prompt ##### database name #####
select name pdb_name from v$pdbs;
--set echo on
--=============================================================================================================================
-- start install --MARS-757 create credential prd
--=============================================================================================================================
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'DEVO_CRED_ARN',
params => JSON_OBJECT(
'aws_role_arn' value 'arn:aws:iam::963129846289:role/ECB_AWS_EXTERNAL_A2A_MRDS_PRD',
'external_id_type' value 'database_ocid')
);
END;

View File

@@ -0,0 +1,33 @@
--MARS-757
set verify off
SET serveroutput ON
--SET TIMING ON
whenever sqlerror exit sql.sqlcode rollback;
column owner format a15
column object_name format a30
column spoolname new_value spoolname
select 'install_package_MarsDEVOreplicator_MARS757_tst_' || name || '_' ||to_char(sysdate,'YYYYMMDD_HH24MISS')||'.log' spoolname from v$pdbs;
spool '&spoolname'
prompt ##### started at time #####
select systimestamp from dual;
prompt ##### database name #####
select name pdb_name from v$pdbs;
--set echo on
--=============================================================================================================================
-- start install --MARS-757 create user
--=============================================================================================================================
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'DEVO_CRED_ARN',
params => JSON_OBJECT(
'aws_role_arn' value 'arn:aws:iam::224181934276:role/ECB_AWS_EXTERNAL_A2A_MRDS_TST',
'external_id_type' value 'database_ocid')
);
END;

View File

@@ -0,0 +1,50 @@
--MARS-757
set verify off
SET serveroutput ON
--SET TIMING ON
whenever sqlerror exit sql.sqlcode rollback;
column owner format a15
column object_name format a30
column spoolname new_value spoolname
select 'install_package_MarsDEVOreplicator_MARS757_acc' || name || '_' ||to_char(sysdate,'YYYYMMDD_HH24MISS')||'.log' spoolname from v$pdbs;
spool '&spoolname'
prompt ##### started at time #####
select systimestamp from dual;
prompt ##### database name #####
select name pdb_name from v$pdbs;
--set echo on
--=============================================================================================================================
-- start install --MARS-757 tst setup
--=============================================================================================================================
BEGIN
DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(
provider => 'AWS',
params => JSON_OBJECT(
'aws_role_arn' value 'arn:aws:iam::845164628883:role/ECB_AWS_EXTERNAL_A2A_MRDS_STG'));
END;
/
GRANT EXECUTE ON DBMS_CLOUD_ADMIN TO MRDS_LOADER;
GRANT EXECUTE ON AWS$ARN TO MRDS_LOADER;
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
--host => 'oci-test-sani.vpce-0b3a5f000733397b0-kxlyoh5z.s3.eu-central-1.vpce.amazonaws.com',
host => 'vpce-049ee7c35b9bce4ed-otoxtybr.s3.eu-central-1.vpce.amazonaws.com',
ace => xs$ace_type( privilege_list => xs$name_list('http'),
principal_name => 'ADMIN',
principal_type => xs_acl.ptype_db),
private_target => TRUE);
END;
/
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => 'sts.eu-central-1.amazonaws.com',
ace => xs$ace_type( privilege_list => xs$name_list('http'),
principal_name => 'ADMIN',
principal_type => xs_acl.ptype_db),
private_target => TRUE);
END;

View File

@@ -0,0 +1,108 @@
--MARS-757
set verify off
SET serveroutput ON
--SET TIMING ON
whenever sqlerror exit sql.sqlcode rollback;
column owner format a15
column object_name format a30
column spoolname new_value spoolname
select 'install_package_MarsDEVOreplicator_MARS757_create_user_' || name || '_' ||to_char(sysdate,'YYYYMMDD_HH24MISS')||'.log' spoolname from v$pdbs;
spool '&spoolname'
prompt ##### started at time #####
select systimestamp from dual;
prompt ##### database name #####
select name pdb_name from v$pdbs;
--set echo on
--=============================================================================================================================
-- start install --MARS-757 create user
--=============================================================================================================================
DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;
ALTER USER MRDS_LOADER QUOTA UNLIMITED ON DATA;
GRANT CREATE SESSION TO MRDS_LOADER;
GRANT SELECT ANY DICTIONARY TO MRDS_LOADER;
GRANT SELECT_CATALOG_ROLE TO MRDS_LOADER;
--GRANT SELECT ON SYS.ALL_TABLES TO MRDS_LOADER;
GRANT READ ANY TABLE TO MRDS_LOADER;
CREATE ROLE MRDS_LOADER_ROLE;
GRANT MRDS_LOADER_ROLE TO MRDS_LOADER;
GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO MRDS_LOADER_ROLE;
GRANT EXECUTE ON DBMS_CLOUD TO MRDS_LOADER_ROLE;
GRANT CREATE JOB TO MRDS_LOADER;
GRANT EXECUTE ON DBMS_PARALLEL_EXECUTE TO MRDS_LOADER;
EXEC DBMS_CLOUD_ADMIN.ENABLE_RESOURCE_PRINCIPAL(username => 'MRDS_LOADER');
GRANT EXECUTE ON C##CLOUD$SERVICE.DBMS_CLOUD TO MRDS_LOADER;
-- BEGIN
-- FOR user_rec IN (SELECT username FROM dba_users WHERE oracle_maintained != 'Y' AND common != 'YES') LOOP
-- DECLARE
-- schema_name VARCHAR2(128) := user_rec.username;
-- role_name VARCHAR2(128) := schema_name || '_ROLE_RW';
-- BEGIN
-- -- Step 1: Drop the role if it exists
-- BEGIN
-- EXECUTE IMMEDIATE 'DROP ROLE ' || role_name;
-- EXCEPTION
-- WHEN OTHERS THEN
-- IF SQLCODE != -1919 THEN -- ORA-01918: role does not exist
-- RAISE;
-- END IF;
-- END;
-- EXECUTE IMMEDIATE 'GRANT SELECT ANY TABLE ON SCHEMA CT_MRDS TO ' || schema_name;
-- EXECUTE IMMEDIATE 'GRANT SELECT ANY TABLE ON SCHEMA ODS TO ' || schema_name;
-- -- Step 2: Create the role
-- EXECUTE IMMEDIATE 'CREATE ROLE ' || role_name;
-- -- Step 3: Grant schema-level privileges to the role
-- EXECUTE IMMEDIATE 'GRANT CREATE ANY TABLE ON SCHEMA ' || schema_name || ' TO ' || role_name;
-- EXECUTE IMMEDIATE 'GRANT DROP ANY TABLE ON SCHEMA ' || schema_name || ' TO ' || role_name;
-- EXECUTE IMMEDIATE 'GRANT CREATE ANY VIEW ON SCHEMA ' || schema_name || ' TO ' || role_name;
-- EXECUTE IMMEDIATE 'GRANT DROP ANY VIEW ON SCHEMA ' || schema_name || ' TO ' || role_name;
-- EXECUTE IMMEDIATE 'GRANT SELECT ANY TABLE ON SCHEMA ' || schema_name || ' TO ' || role_name;
-- EXECUTE IMMEDIATE 'GRANT INSERT ANY TABLE ON SCHEMA ' || schema_name || ' TO ' || role_name;
-- EXECUTE IMMEDIATE 'GRANT UPDATE ANY TABLE ON SCHEMA ' || schema_name || ' TO ' || role_name;
-- EXECUTE IMMEDIATE 'GRANT DELETE ANY TABLE ON SCHEMA ' || schema_name || ' TO ' || role_name;
-- EXECUTE IMMEDIATE 'GRANT ALTER ANY TABLE ON SCHEMA ' || schema_name || ' TO ' || role_name;
-- EXECUTE IMMEDIATE 'GRANT EXECUTE ANY PROCEDURE ON SCHEMA ' || schema_name || ' TO ' || role_name;
-- EXECUTE IMMEDIATE 'GRANT SELECT ANY SEQUENCE ON SCHEMA ' || schema_name || ' TO ' || role_name;
-- -- Step 4: Grant the role to MRDS_LOADER
-- EXECUTE IMMEDIATE 'GRANT ' || role_name || ' TO MRDS_LOADER';
-- -- Print success message
-- DBMS_OUTPUT.PUT_LINE('Role ' || role_name || ' created and privileges granted successfully.');
-- EXCEPTION
-- WHEN OTHERS THEN
-- DBMS_OUTPUT.PUT_LINE('Error processing schema ' || schema_name || ': ' || SQLERRM);
-- END;
-- END LOOP;
-- END;
GRANT SELECT ANY TABLE TO CT_MRDS;
GRANT CREATE ANY TABLE TO MRDS_LOADER;
GRANT DROP ANY TABLE TO MRDS_LOADER;
GRANT CREATE ANY VIEW TO MRDS_LOADER;
GRANT DROP ANY VIEW TO MRDS_LOADER;
GRANT SELECT ANY TABLE TO MRDS_LOADER;
GRANT INSERT ANY TABLE TO MRDS_LOADER;
GRANT UPDATE ANY TABLE TO MRDS_LOADER;
GRANT DELETE ANY TABLE TO MRDS_LOADER;
GRANT ALTER ANY TABLE TO MRDS_LOADER;
GRANT EXECUTE ANY PROCEDURE TO MRDS_LOADER;
GRANT SELECT ANY SEQUENCE TO MRDS_LOADER;

View File

@@ -0,0 +1,50 @@
--MARS-757
set verify off
SET serveroutput ON
--SET TIMING ON
whenever sqlerror exit sql.sqlcode rollback;
column owner format a15
column object_name format a30
column spoolname new_value spoolname
select 'install_package_MarsDEVOreplicator_MARS757_dev' || name || '_' ||to_char(sysdate,'YYYYMMDD_HH24MISS')||'.log' spoolname from v$pdbs;
spool '&spoolname'
prompt ##### started at time #####
select systimestamp from dual;
prompt ##### database name #####
select name pdb_name from v$pdbs;
--set echo on
--=============================================================================================================================
-- start install --MARS-757 dev setup
--=============================================================================================================================
BEGIN
DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(
provider => 'AWS',
params => JSON_OBJECT(
'aws_role_arn' value 'arn:aws:iam::303413094647:role/ECB_AWS_EXTERNAL_A2A_MRDS_LAB'));
END;
/
GRANT EXECUTE ON DBMS_CLOUD_ADMIN TO MRDS_LOADER;
GRANT EXECUTE ON AWS$ARN TO MRDS_LOADER;
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
--host => 'oci-test-sani.vpce-0b3a5f000733397b0-kxlyoh5z.s3.eu-central-1.vpce.amazonaws.com',
host => 'vpce-06c333350ae20060d-m2roqwbl.s3.eu-central-1.vpce.amazonaws.com',
ace => xs$ace_type( privilege_list => xs$name_list('http'),
principal_name => 'ADMIN',
principal_type => xs_acl.ptype_db),
private_target => TRUE);
END;
/
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => 'sts.eu-central-1.amazonaws.com',
ace => xs$ace_type( privilege_list => xs$name_list('http'),
principal_name => 'ADMIN',
principal_type => xs_acl.ptype_db),
private_target => TRUE);
END;

View File

@@ -0,0 +1,50 @@
--MARS-757
set verify off
SET serveroutput ON
--SET TIMING ON
whenever sqlerror exit sql.sqlcode rollback;
column owner format a15
column object_name format a30
column spoolname new_value spoolname
select 'install_package_MarsDEVOreplicator_MARS757_prd' || name || '_' ||to_char(sysdate,'YYYYMMDD_HH24MISS')||'.log' spoolname from v$pdbs;
spool '&spoolname'
prompt ##### started at time #####
select systimestamp from dual;
prompt ##### database name #####
select name pdb_name from v$pdbs;
--set echo on
--=============================================================================================================================
-- start install --MARS-757 prd setup
--=============================================================================================================================
BEGIN
DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(
provider => 'AWS',
params => JSON_OBJECT(
'aws_role_arn' value 'arn:aws:iam::963129846289:role/ECB_AWS_EXTERNAL_A2A_MRDS_PRD'));
END;
/
GRANT EXECUTE ON DBMS_CLOUD_ADMIN TO MRDS_LOADER;
GRANT EXECUTE ON AWS$ARN TO MRDS_LOADER;
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
--host => 'oci-test-sani.vpce-0b3a5f000733397b0-kxlyoh5z.s3.eu-central-1.vpce.amazonaws.com',
host => 'vpce-049ee7c35b9bce4ed-otoxtybr.s3.eu-central-1.vpce.amazonaws.com',
ace => xs$ace_type( privilege_list => xs$name_list('http'),
principal_name => 'ADMIN',
principal_type => xs_acl.ptype_db),
private_target => TRUE);
END;
/
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => 'sts.eu-central-1.amazonaws.com',
ace => xs$ace_type( privilege_list => xs$name_list('http'),
principal_name => 'ADMIN',
principal_type => xs_acl.ptype_db),
private_target => TRUE);
END;

View File

@@ -0,0 +1,50 @@
--MARS-757
set verify off
SET serveroutput ON
--SET TIMING ON
whenever sqlerror exit sql.sqlcode rollback;
column owner format a15
column object_name format a30
column spoolname new_value spoolname
select 'install_package_MarsDEVOreplicator_MARS757_tst' || name || '_' ||to_char(sysdate,'YYYYMMDD_HH24MISS')||'.log' spoolname from v$pdbs;
spool '&spoolname'
prompt ##### started at time #####
select systimestamp from dual;
prompt ##### database name #####
select name pdb_name from v$pdbs;
--set echo on
--=============================================================================================================================
-- start install --MARS-757 tst setup
--=============================================================================================================================
BEGIN
DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(
provider => 'AWS',
params => JSON_OBJECT(
'aws_role_arn' value 'arn:aws:iam::224181934276:role/ECB_AWS_EXTERNAL_A2A_MRDS_TST'));
END;
/
GRANT EXECUTE ON DBMS_CLOUD_ADMIN TO MRDS_LOADER;
GRANT EXECUTE ON AWS$ARN TO MRDS_LOADER;
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
--host => 'oci-test-sani.vpce-0b3a5f000733397b0-kxlyoh5z.s3.eu-central-1.vpce.amazonaws.com',
host => 'vpce-0491e079ed1948bf8-bc6c802a.s3.eu-central-1.vpce.amazonaws.com',
ace => xs$ace_type( privilege_list => xs$name_list('http'),
principal_name => 'ADMIN',
principal_type => xs_acl.ptype_db),
private_target => TRUE);
END;
/
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => 'sts.eu-central-1.amazonaws.com',
ace => xs$ace_type( privilege_list => xs$name_list('http'),
principal_name => 'ADMIN',
principal_type => xs_acl.ptype_db),
private_target => TRUE);
END;

View File

@@ -0,0 +1,17 @@
CREATE USER MRDS_LOADER IDENTIFIED BY Mars_db_12345678
DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;
GRANT CREATE SESSION TO MRDS_LOADER;
GRANT SELECT ANY DICTIONARY TO MRDS_LOADER;
GRANT SELECT_CATALOG_ROLE TO MRDS_LOADER;
GRANT CREATE ANY INDEX TO MRDS_LOADER;
GRANT DROP ANY INDEX TO MRDS_LOADER;
GRANT CREATE ANY TABLE TO MRDS_LOADER;
GRANT SELECT ANY TABLE TO MRDS_LOADER;
GRANT UPDATE ANY TABLE TO MRDS_LOADER;
GRANT DELETE ANY TABLE TO MRDS_LOADER;
GRANT INSERT ANY TABLE TO MRDS_LOADER;
GRANT SELECT ON SYS.ALL_TABLES TO MRDS_LOADER;
GRANT SELECT ANY SEQUENCE TO MRDS_LOADER;
GRANT MRDS_LOADER_ROLE TO MRDS_LOADER;

View File

@@ -0,0 +1,169 @@
CREATE OR REPLACE PACKAGE cloud_wrapper AS
-- List objects in Oracle Cloud Storage (returns table rows like original DBMS_CLOUD.LIST_OBJECTS)
FUNCTION list_objects(
credential_name VARCHAR2,
location_uri VARCHAR2,
prefix VARCHAR2 DEFAULT NULL
) RETURN DBMS_CLOUD_TYPES.LIST_OBJECT_RET_TAB PIPELINED;
-- List only files (objects with size > 0) in Oracle Cloud Storage
FUNCTION list_files(
credential_name VARCHAR2,
location_uri VARCHAR2,
prefix VARCHAR2 DEFAULT NULL
) RETURN DBMS_CLOUD_TYPES.LIST_OBJECT_RET_TAB PIPELINED;
-- List only directories (objects with size = 0 and ending with '/') in Oracle Cloud Storage
FUNCTION list_directories(
credential_name VARCHAR2,
location_uri VARCHAR2,
prefix VARCHAR2 DEFAULT NULL
) RETURN DBMS_CLOUD_TYPES.LIST_OBJECT_RET_TAB PIPELINED;
-- Advanced error handling function
FUNCTION get_error_stack(
pFormat VARCHAR2 DEFAULT 'OUTPUT'
) RETURN VARCHAR2;
END cloud_wrapper;
/
CREATE OR REPLACE PACKAGE BODY cloud_wrapper AS
-- Constants
cgBL CONSTANT VARCHAR2(2) := CHR(13) || CHR(10); -- Carriage Return + Line Feed
-- List objects in Oracle Cloud Storage (returns table rows like original DBMS_CLOUD.LIST_OBJECTS)
FUNCTION list_objects(
credential_name VARCHAR2,
location_uri VARCHAR2,
prefix VARCHAR2 DEFAULT NULL
) RETURN DBMS_CLOUD_TYPES.LIST_OBJECT_RET_TAB PIPELINED IS
BEGIN
-- If prefix is provided, filter results after retrieval
IF prefix IS NOT NULL THEN
FOR rec IN (SELECT * FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(
credential_name => credential_name,
location_uri => location_uri
)) WHERE object_name LIKE prefix || '%') LOOP
PIPE ROW(rec);
END LOOP;
ELSE
FOR rec IN (SELECT * FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(
credential_name => credential_name,
location_uri => location_uri
))) LOOP
PIPE ROW(rec);
END LOOP;
END IF;
RETURN;
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20001, 'Error listing objects: ' || SQLERRM);
END list_objects;
-- List only files (objects with size > 0) in Oracle Cloud Storage
FUNCTION list_files(
credential_name VARCHAR2,
location_uri VARCHAR2,
prefix VARCHAR2 DEFAULT NULL
) RETURN DBMS_CLOUD_TYPES.LIST_OBJECT_RET_TAB PIPELINED IS
BEGIN
-- Filter for files: size > 0 and not ending with '/'
IF prefix IS NOT NULL THEN
FOR rec IN (SELECT * FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(
credential_name => credential_name,
location_uri => location_uri
)) WHERE object_name LIKE prefix || '%'
AND bytes > 0
AND object_name NOT LIKE '%/') LOOP
PIPE ROW(rec);
END LOOP;
ELSE
FOR rec IN (SELECT * FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(
credential_name => credential_name,
location_uri => location_uri
)) WHERE bytes > 0
AND object_name NOT LIKE '%/') LOOP
PIPE ROW(rec);
END LOOP;
END IF;
RETURN;
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20002, 'Error listing files: ' || SQLERRM);
END list_files;
-- List only directories (objects with size = 0 and ending with '/') in Oracle Cloud Storage
FUNCTION list_directories(
credential_name VARCHAR2,
location_uri VARCHAR2,
prefix VARCHAR2 DEFAULT NULL
) RETURN DBMS_CLOUD_TYPES.LIST_OBJECT_RET_TAB PIPELINED IS
BEGIN
-- Filter for directories: size = 0 and ending with '/'
IF prefix IS NOT NULL THEN
FOR rec IN (SELECT * FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(
credential_name => credential_name,
location_uri => location_uri
)) WHERE object_name LIKE prefix || '%'
AND bytes = 0
AND object_name LIKE '%/') LOOP
PIPE ROW(rec);
END LOOP;
ELSE
FOR rec IN (SELECT * FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(
credential_name => credential_name,
location_uri => location_uri
)) WHERE bytes = 0
AND object_name LIKE '%/') LOOP
PIPE ROW(rec);
END LOOP;
END IF;
RETURN;
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20003, 'Error listing directories: ' || SQLERRM);
END list_directories;
-- Advanced error handling function with detailed error information
FUNCTION get_error_stack(
pFormat VARCHAR2 DEFAULT 'OUTPUT'
) RETURN VARCHAR2 IS
vFullErrorCore VARCHAR2(32000);
vFullErrorMsg VARCHAR2(32000);
vTimestamp VARCHAR2(30);
BEGIN
-- Get current timestamp
SELECT TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS.FF3')
INTO vTimestamp
FROM DUAL;
vFullErrorCore := 'Error Timestamp: ' || vTimestamp || cgBL
|| 'Session User: ' || USER || cgBL
|| 'SQL Error Code: ' || SQLCODE || cgBL
|| 'Error Message: ' || SQLERRM || cgBL
|| '-------------------------------------------------------'
|| cgBL || 'Error Stack:'
|| cgBL || DBMS_UTILITY.FORMAT_ERROR_STACK
|| '-------------------------------------------------------'
|| cgBL || 'Error Backtrace:'
|| cgBL || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE;
IF (pFormat = 'OUTPUT') THEN
vFullErrorMsg := cgBL || '------------------------------------------------------+'
|| cgBL || vFullErrorCore
|| '------------------------------------------------------+';
ELSIF (pFormat = 'TABLE') THEN
vFullErrorMsg := vFullErrorCore;
END IF;
RETURN vFullErrorMsg;
END get_error_stack;
END cloud_wrapper;
/