Skip to Main Content

SQL & PL/SQL

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!

Merge Error Logging Question

803690Jan 25 2011 — edited Jan 26 2011
Hi there,
I am using a merge to update or insert rows into a table. I know that I could get bad data in the load table and I put log error into the merge statement, so that If I did a to_date it would handle it. The problem I am having is that I cannot get the error logging to fire. I am getting an ORA-1858 message complaining about the date which is cool, but I want it to go into the error table.

Or am I barking up the wrong tree.

Here is the table I am taking the data from

CREATE TABLE SICKLE_RAW
(
ENTRY_ID NUMBER(9) NULL,
KEY VARCHAR2(50 BYTE) NULL,
OLD_VALUE VARCHAR2(100 BYTE) NULL,
NEW_VALUE VARCHAR2(100 BYTE) NULL,
DATA_ITEM NUMBER(5) NULL,
DATA_ITEM_NAME VARCHAR2(100 BYTE) NULL,
USER_ID VARCHAR2(100 BYTE) NULL,
USER_TYPE VARCHAR2(100 BYTE) NULL,
CHANGE_DATE VARCHAR2(200 BYTE) NULL,
LAST_TIMESTAMP VARCHAR2(200 BYTE) NULL,
LAST_USER VARCHAR2(200 BYTE) NULL,
LAST_USER_TYPE VARCHAR2(200 BYTE) NULL
)

Here is a row of dodgy data
Insert into SICKLE_RAW
(ENTRY_ID, KEY, OLD_VALUE, NEW_VALUE, DATA_ITEM_NAME, USER_ID, USER_TYPE, CHANGE_DATE, LAST_TIMESTAMP, LAST_USER, LAST_USER_TYPE)
Values
(391691, 'GLE2E', 'file1', 'file2',
'114', 'Permitted Files', 'Ann Campbell', 'Editor', '24/01/2011 17:36',
'2011-01-24.17:36:46', 'Ann Campbell');
COMMIT;

Here is the table I am merging TO :-
CREATE TABLE METRICS.ATTRIBUTE_VALUE
(
SOURCE_SYSTEM_ID NUMBER NOT NULL,
ENTRY_DATE DATE NOT NULL,
UPDATE_USER_ID VARCHAR2(50 BYTE) NOT NULL,
PREVIOUS_USER_ID VARCHAR2(50 BYTE) NULL,
QA VARCHAR2(1 BYTE) NULL,
ATTRIBUTE_INSTANCE_ID NUMBER(20) NULL,
ATTRIBUTE_NAME VARCHAR2(100 BYTE) NULL,
METHOD VARCHAR2(100 BYTE) NULL,
RECORD_COUNT NUMBER(7) NOT NULL,
ATTRIBUTE_TYPE VARCHAR2(100 BYTE) NULL
)

the error table :-
CREATE TABLE PROCESSING_ERRORS
(
ORA_ERR_ROWID$ ROWID NULL,
ORA_ERR_NUMBER$ NUMBER NULL,
ORA_ERR_OPTYP$ VARCHAR2(2 BYTE) NULL,
ORA_ERR_TAG$ VARCHAR2(2000 BYTE) NULL,
ORA_ERR_MESG$ VARCHAR2(2000 BYTE) NULL,
ENTRY_DATE VARCHAR2(100 BYTE) NULL
)


And lastly the merge

merge into metrics.attribute_value av
using(
select * from (
select 7 system_id, key,
data_item,
data_item_name,
user_id,
user_type,
trunc(to_date(CHANGE_DATE,'dd/mm/yyyy hh24:mi')) change_date,
'N',
count(*) total
from SICKLE_RAW bc
group by key,
data_item,
data_item_name,
user_id,
user_type,
trunc(to_date(CHANGE_DATE,'dd/mm/yyyy hh24:mi')) )) bcr
on (AV.ENTRY_DATE = bcr.change_date
and bcr.user_id = av.update_user_id
and bcr.data_item_name = AV.ATTRIBUTE_NAME
and bcr.system_id = av.source_system_id
and bcr.data_item = av.attribute_instance_id
)
when matched then update
set av.record_count = av.record_count + bcr.total
when not matched then INSERT (SOURCE_system_id,ENTRY_DATE,update_user_id,record_count,qa,ATTRIBUTE_NAME,attribute_instance_id)
VALUES
(bcr.system_id,bcr.CHANGE_DATE,bcr.user_id,bcr.total,'N',bcr.data_item_name,bcr.data_item)
log errors into metrics.processing_errors REJECT LIMIT UNLIMITED



Any help would be greatly appreciated.
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Feb 23 2011
Added on Jan 25 2011
7 comments
646 views