Skip to Main Content

APEX

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Update APEX collection error ORA-04044: procedure, function, package, type

Ann586341Oct 8 2012 — edited Oct 8 2012
Hello everyone,

I am trying to update APEX COLLECTION MEMBER and encounter errors:


1 error has occurred
ORA-06550: line 9, column 8: PL/SQL: ORA-04044: procedure, function, package, or type is not allowed here ORA-06550: line 7, column 3: PL/SQL: SQL Statement ignored

The PLSQL code are as below

DECLARE
x integer ;
v_date_started varchar2(255);
v_date_finished varchar2(255);
BEGIN
SELECT c.seq_id
INTO x
FROM APEX_COLLECTION c
WHERE collection_name='PHASE_COLLECTION'
AND c001 = :P41_MPM_ID
and rownum = 1;
v_date_started := :P41_DATE_STARTED;
v_date_finished := :P41_DATE_FINISHED;

APEX_COLLECTION.UPDATE_MEMBER(
p_collection_name => 'PHASE_COLLECTION'
, p_seq => x
, p_c004 => v_date_started
, P_c005 => v_date_finished
);
END;


The process will be run after SUBMIT and validation.

The code I used to add APEX colletion run fine and is as below

--Initialize Collection PHASE_COLLECTION
BEGIN
IF NOT APEX_COLLECTION.COLLECTION_EXISTS('PHASE_COLLECTION') THEN
APEX_COLLECTION.CREATE_COLLECTION('PHASE_COLLECTION');
ELSE
APEX_COLLECTION.TRUNCATE_COLLECTION('PHASE_COLLECTION');
END IF;
--Add member to the PHASE COLLECTION from table PHASE_MEMBERSHIP
IF :P41_MPM_ENG_ID IS NOT NULL THEN
FOR x IN (SELECT mpm_id, mpm_eng_id, phase_number, date_started, date_finished, date_created
FROM phase_membership
WHERE mpm_eng_id = :P41_MPM_ENG_ID
AND active = 1
ORDER BY date_created)
LOOP
APEX_COLLECTION.ADD_MEMBER
(p_collection_name => 'PHASE_COLLECTION'
,p_c001 => x.MPM_ID
,p_c002 => x.MPM_ENG_ID
,p_c003 => x.PHASE_NUMBER
,p_c004 => x.DATE_STARTED
,p_c005 => x.DATE_FINISHED
,p_c006 => x.DATE_CREATED

);
END LOOP;
END IF;
EXCEPTION
WHEN OTHERS THEN
logger.error(p_message_text => SQLERRM
,p_message_code => SQLCODE
,p_stack_trace => dbms_utility.format_error_backtrace
);
RAISE;
END;


What I tried to do is using APEX_COLLETION to check overlap among date_range.
The requirement is just to display a warning if user adds a new phase record or update current phase record that may cause overlap among the whole phase control.
PHASE_MEMBERSHIP table script is

CREATE TABLE "PHASE_MEMBERSHIP"
(
"MPM_ID" NUMBER NOT NULL ENABLE,
"MPM_ENG_ID" NUMBER NOT NULL ENABLE,
"PHASE_NUMBER" NUMBER(2,0) NOT NULL ENABLE,
"DATE_STARTED" DATE NOT NULL ENABLE,
"DATE_FINISHED" DATE,
"NOTES" VARCHAR2(2000 BYTE),
"DATE_CREATED" DATE NOT NULL ENABLE,
"CREATED_BY" VARCHAR2(20 BYTE) NOT NULL ENABLE,
"ACTIVE" NUMBER(2,0) DEFAULT 1 NOT NULL ENABLE)

So basically, I want to populate all records related to one particular MPM_ENG_ID to an APEX collection called PHASE_COLLECTION.
Then when user provide date_started and/or date_finished, it will update/insert the APEX collection first.
Then do the overlap date range check based on
http://www.oracle-base.com/articles/misc/overlapping-date-ranges.php
then display the warning message to ask user to confirm.

But then I get stuck at APEX COLLECTION update step.

If anyone has any ideas about what is wrong, please help.

Many thanks in advance.

Ann
This post has been answered by Scott Wesley on Oct 8 2012
Jump to Answer
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Nov 5 2012
Added on Oct 8 2012
2 comments
752 views