The first part shows the scripts to create views, tables, sequences, synonyms and triggers and have to be executed as database user APPS. The second part consists of a few SQL statements that have to be executed as database user APEX_EBS and are necessary to grant APPS to some of the database objects created in the first part.
Execute as database user APPS (not possible in the SQL Workshop in Apex):
CREATE OR REPLACE FORCE VIEW APPS.XXAPX_USER_V
( USER_ID,
USER_NAME,
START_DATE,
END_DATE,
DESCRIPTION,
EMAIL_ADDRESS
)
AS
SELECT user_id,
user_name,
start_date,
end_date,
description,
email_address
FROM fnd_user;
/
GRANT SELECT ON APPS.XXAPX_USER_V TO APEX_EBS;
/
DECLARE
l_count NUMBER := 0;
BEGIN
SELECT COUNT(*) INTO l_count FROM all_tables WHERE table_name='XXAPX_FILES' AND owner = 'APEX_EBS';
IF l_count = 1 THEN
EXECUTE IMMEDIATE 'DROP TABLE APEX_EBS.XXAPX_FILES';
EXECUTE IMMEDIATE 'DROP SYNONYM APPS.XXAPX_FILES';
END IF;
END;
/
CREATE TABLE APEX_EBS.XXAPX_FILES
( FILE_ID NUMBER,
FILE_NAME VARCHAR2(256 BYTE),
FILE_CONTENT_TYPE VARCHAR2(256 BYTE),
LANGUAGE VARCHAR2(4 BYTE) DEFAULT (USERENV('LANG')),
ORACLE_CHARSET VARCHAR2(30 BYTE) DEFAULT ( SUBSTR(USERENV( 'LANGUAGE'),INSTR(USERENV('LANGUAGE'),'.')+1) ),
FILE_FORMAT VARCHAR2(10 BYTE),
FILE_DATA BLOB,
UPLOAD_DATE DATE,
ORG_ID NUMBER,
CREATION_DATE DATE,
CREATED_BY VARCHAR2(255),
LAST_UPDATE_DATE DATE,
LAST_UPDATED_BY VARCHAR2(255),
CONSTRAINT XXAPX_FILES_PK PRIMARY KEY (FILE_ID) ENABLE
);
/
CREATE SYNONYM APPS.XXAPX_FILES FOR APEX_EBS.XXAPX_FILES;
/
CREATE OR REPLACE TRIGGER apex_ebs.xxapx_files_biu
BEFORE INSERT OR UPDATE ON apex_ebs.xxapx_files
FOR EACH ROW
DECLARE
l_ebs_user_name VARCHAR2(255);
FUNCTION get_ebs_user_name
RETURN VARCHAR2
IS
l_user_id NUMBER;
l_user_name VARCHAR2(255);
BEGIN
l_user_id := apex_util.get_session_state('EBS_USER_ID');
BEGIN
SELECT user_name
INTO l_user_name
FROM apps.xxapx_user_v
WHERE user_id = l_user_id;
EXCEPTION
WHEN OTHERS THEN
l_user_name := NULL;
END;
RETURN l_user_name;
END;
BEGIN
IF LENGTH(:NEW.file_name)<4 THEN
raise_application_error(-20000, 'Please enter a correct filename (e.g. "XXAPX_<name>.xls")');
ELSIF (UPPER(SUBSTR(:NEW.file_name,1,5)) <> 'XXAPX') THEN
raise_application_error(-20000, 'The filename needs to start with ''XXAPX''.');
ELSIF SUBSTR(:NEW.file_name,-4) <> '.xls' THEN
raise_application_error(-20000, 'File must be Excel and extension .xls');
ELSIF NVL(dbms_lob.getlength(:NEW.file_data),0) > 15728640 THEN
raise_application_error(-20000, 'The size of the uploaded file was over 15MB. Please upload a smaller sized file.');
ELSE
l_ebs_user_name := get_ebs_user_name;
IF INSERTING THEN
:NEW.creation_date := SYSDATE;
:NEW.created_by := NVL(l_ebs_user_name,NVL(wwv_flow.g_user,USER));
END IF;
IF INSERTING OR UPDATING THEN
:NEW.org_id := apex_util.get_session_state('EBS_ORG_ID');
:NEW.last_update_date := SYSDATE;
:NEW.last_updated_by := NVL(l_ebs_user_name,NVL(wwv_flow.g_user,USER));
END IF;
END IF;
END;
/
ALTER TRIGGER apex_ebs.xxapx_files_biu ENABLE
/
-- Sequence for ID on APEX_EBS.XXAPX_FILES
DECLARE
l_count NUMBER := 0;
BEGIN
SELECT COUNT(*) INTO l_count FROM all_sequences WHERE sequence_name='XXAPX_FILES_S' AND sequence_owner = 'APEX_EBS';
IF l_count = 1 THEN
EXECUTE IMMEDIATE 'DROP SEQUENCE APEX_EBS.XXAPX_FILES_S';
EXECUTE IMMEDIATE 'DROP SYNONYM APPS.XXAPX_FILES_S';
END IF;
END;
/
CREATE SEQUENCE APEX_EBS.XXAPX_FILES_S
MINVALUE 1
MAXVALUE 999999999999999
INCREMENT BY 1
START WITH 1
NOCACHE
NOORDER
NOCYCLE;
/
CREATE OR REPLACE SYNONYM APPS.XXAPX_FILES_S FOR APEX_EBS.XXAPX_FILES_S;
/
Do the following as database user APEX_EBS (can be done in the SQL Workshop in Apex):
GRANT ALL ON APEX_EBS.XXAPX_FILES TO APPS WITH GRANT OPTION; GRANT ALL ON APEX_EBS.XXAPX_FILES_S TO APPS WITH GRANT OPTION; /
No comments:
Post a Comment