Skip to Main Content
  • Questions
  • How do I extract data from a clob in an oracle CCB table?

Breadcrumb

Question and Answer

Connor McDonald

Thanks for the question, Calvin.

Asked: January 26, 2016 - 10:14 pm UTC

Last updated: January 29, 2016 - 1:57 am UTC

Version: CCB V2.4.0.2.0.001.00, SQL developer Version 4.1.2.20

Viewed 10K+ times! This question is

You Asked

I need to extract the CompletedDate from the Oracle CC&B table CI_FA. This data is stored in the clob (FA_DATA_AREA). The Query below contains several attempts at extracting this data. Note that only the last attempt is NOT commented out.

SELECT CI_FA.FA_ID,
CI_FA.FA_TYPE_CD,
CI_FA.SP_ID,
CI_FA.SCHED_DTTM,
CI_FA.FA_STATUS_FLG,
--EXTRACTVALUE(xmltype(FA_DATA_AREA), '//FieldOrderNotes/CompletedDate')
--EXTRACTVALUE(FA_DATA_AREA), ('/FieldOrderNotes/CompletedDate')
--EXTRACT(XMLTYPE(FA_DATA_AREA),'/FieldOrderNotes/CompletedDate')
--xmltype (FA_DATA_AREA) ('/FieldOrderNotes/CompletedDate()').getstringVal() "CompletedDate"
FA_DATA."CompletedDate"
FROM CI_FA
, XMLTABLE('/FA_DATA_AREA'
--PASSING CI_FA
COLUMNS
"CompletedDate" VARCHAR2(8) PATH '/FieldOrderNotes/CompletedDate')
FA_DATA
WHERE FA_STATUS_FLG = 'C'

Here is the error I get from the last attempt.

ORA-19228: XPST0008 - undeclared identifier: prefix '.' local-name ''
19228. 00000 - "XPST0008 - undeclared identifier: prefix '%s' local-name '%s'"
*Cause: The given identifier refers to either a type name, function name, namespace prefix, or variable name that is not defined in the static context.
*Action: Fix the expression to remove the identifier, or declare the appropriate variable, type, function or namespace.
Error at Line: 11 Column: 6

Here is a snap shot of the FA_DATA_AREA
<FieldOrderNotes><completionFlags><isMeterChanged>false</isMeterChanged><isRegisterChanged>false</isRegisterChanged><isMIUChanged>false</isMIUChanged><isTurnedOff>true</isTurnedOff><isTurnedOn>false</isTurnedOn><isMeterRead>false</isMeterRead></completionFlags><Employee>Harris, Chris</Employee><CompletedDate>7/10/2015 10:35:47 AM</CompletedDate><Field><label>Operated C/S-FAV*</label><value>Turned On at C/S</value></Field><Field><label>Packed Up*</label><value>Yes</value></Field><Field><label>Reading*</label><value>123356</value></Field></FieldOrderNotes>

<FieldOrderNotes><completionFlags><isMeterChanged>false</isMeterChanged><isRegisterChanged>false</isRegisterChanged><isMIUChanged>false</isMIUChanged><isTurnedOff>false</isTurnedOff><isTurnedOn>false</isTurnedOn><isMeterRead>true</isMeterRead></completionFlags><Employee>Harris, Chris</Employee><CompletedDate>7/10/2015 10:35:47 AM</CompletedDate><Field><label>Operated C/S-FAV*</label><value>Turned On at C/S</value></Field><Field><label>Packed Up*</label><value>Yes</value></Field><Field><label>Reading*</label><value>123356</value></Field></FieldOrderNotes>
<FieldOrderNotes><completionFlags><isMeterChanged>false</isMeterChanged><isRegisterChanged>false</isRegisterChanged><isMIUChanged>false</isMIUChanged><isTurnedOff>false</isTurnedOff><isTurnedOn>false</isTurnedOn><isMeterRead>true</isMeterRead></completionFlags><Employee>Harris, Chris</Employee><CompletedDate>7/10/2015 10:35:47 AM</CompletedDate><Field><label>Operated C/S-FAV*</label><value>Turned On at C/S</value></Field><Field><label>Packed Up*</label><value>Yes</value></Field><Field><label>Reading*</label><value>123356</value></Field></FieldOrderNotes>
<FieldOrderNotes><Employee>Harris, Chris</Employee><CompletedDate>7/10/2015 10:35:47 AM</CompletedDate><completionFlags><isMeterChanged>false</isMeterChanged><isRegisterChanged>false</isRegisterChanged><isMIUChanged>false</isMIUChanged><isTurnedOff>false</isTurnedOff><isTurnedOn>false</isTurnedOn><isMeterRead>true</isMeterRead></completionFlags><Field><label>Operated C/S-FAV*</label><value>Turned On at C/S</value></Field><Field><label>Packed Up*</label><value>Yes</value></Field><Field><label>Reading*</label><value>123356</value></Field></FieldOrderNotes>
<FieldOrderNotes><Employee>Harris, Chris</Employee><CompletedDate>7/10/2015 10:35:47 AM</CompletedDate><completionFlags><isMeterChanged>false</isMeterChanged><isRegisterChanged>false</isRegisterChanged><isMIUChanged>false</isMIUChanged><isTurnedOff>false</isTurnedOff><isTurnedOn>false</isTurnedOn><isMeterRead>true</isMeterRead></completionFlags><Field><label>Operated C/S-FAV*</label><value>Turned On at C/S</value></Field><Field><label>Packed Up*</label><value>Yes</value></Field><Field><label>Reading*</label><value>123356</value></Field></FieldOrderNotes>
<FieldOrderNotes><completionFlags><isMeterChanged>false</isMeterChanged><isRegisterChanged>false</isRegisterChanged><isMIUChanged>false</isMIUChanged><isTurnedOff>false</isTurnedOff><isTurnedOn>false</isTurnedOn><isMeterRead>false</isMeterRead></completionFlags></FieldOrderNotes>


Any assistance is appreciated.



and Connor said...

Here's an example that should help

SQL> create table ci_fa ( pk int, x xmltype );

Table created.

SQL>
SQL> insert into ci_fa values (1,
  2  xmltype('<FieldOrderNotes><completionFlags><isMeterChanged>false</isMeterChanged><isRegisterChanged>false</isRegisterChanged><isMIUChan
ged>false</isMIUChanged><isTurnedOff>true</isTurnedOff><isTurnedOn>false</isTurnedOn><isMeterRead>false</isMeterRead></completionFlags><Empl
oyee>Harris, Chris</Employee><CompletedDate>7/10/2015 10:35:47 AM</CompletedDate><Field><label>Operated C/S-FAV*</label><value>Turned On at
C/S</value></Field><Field><label>Packed Up*</label><value>Yes</value></Field><Field><label>Reading*</label><value>123356</value></Field></Fi
eldOrderNotes>'));

1 row created.

SQL>
SQL> SELECT pk, to_date(comp_date,'dd/mm/yyyy hh:mi:ss AM') completion_date
  2  FROM CI_FA c
  3      ,XMLTABLE('$p/FieldOrderNotes' passing c.x as "p"
  4  COLUMNS
  5        comp_date        varchar(30) path 'CompletedDate'
  6        ) v1;

        PK COMPLETION_DATE
---------- --------------------
         1 07-oct-2015 10:35:47



And if you need to drill down through the xml hierarchy, you just keep adding xmltable, for example

SQL> SELECT pk, to_date(comp_date,'dd/mm/yyyy hh:mi:ss AM') completion_date, meter_changed, register_changed, miu_changed
  2  FROM CI_FA c
  3      ,XMLTABLE('$p/FieldOrderNotes' passing c.x as "p"
  4  COLUMNS
  5        comp_date        varchar(30) path 'CompletedDate',
  6        completionFlags  xmltype path 'completionFlags'
  7        ) v1,
  8        XMLTABLE('completionFlags' passing v1.completionFlags
  9        COLUMNS
 10              meter_changed    varchar(20) path 'isMeterChanged',
 11              register_changed varchar(20) path 'isRegisterChanged',
 12              miu_changed      varchar(20) path 'isMIUChanged'
 13        ) v2;

        PK COMPLETION_DATE      METER_CHANGED        REGISTER_CHANGED     MIU_CHANGED
---------- -------------------- -------------------- -------------------- --------------------
         1 07-oct-2015 10:35:47 false                false                false

SQL>
SQL>
SQL>




Rating

  (1 rating)

Is this answer out of date? If it is, please let us know via a Comment

Comments

CLOB selection still not working

Calvin Exline, January 28, 2016 - 1:32 pm UTC

Suggestion did not work. Get the following :
ORA-00904: "C"."X": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 3 Column: 48
Connor McDonald
January 29, 2016 - 1:57 am UTC

Please paste the entire output from start to finish of the example I sent you, so I can see how the error is occurring on your system.

And run:

select * from v$version

thanks

More to Explore

CLOB/BLOB/etc

Complete documentation on Securefiles and Large Objects here