Storage of XMLType in the ANYDATA column

I am struck a problem trying to hold XMLType in an ANYDATA column.


Reading the ANYDATA documentation ([http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/t_anydat.htm#i1001302]), there is no indication that this is not supported. The only restriction is "persistent instances ANYDATA type storage contains incorporated LOBs another BFILE is not currently taken care of."
AFAIK that XmlType is not a "embedded LOB" - am I?


When I try this I struck error: "ORA-22370: incorrect use of the AnyData Insert method. Here's a simple test to demonstrate the problem.

I'm looking for is a documentation indicating that this is impossible, or an explanation of how to get there.

Thank you in anticipation

--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE    11.2.0.2.0      Production
TNS for Linux: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production

CREATE OR REPLACE TYPE t_xml AS OBJECT
 (xml           XMLType);
/

CREATE TABLE t (c1 ANYDATA);

DECLARE
    v_anydata   ANYDATA;
BEGIN
    v_anydata := sys.anydata.convertobject(t_xml(XMLType('<Action ActNo="100"> <Description>NewAction</Description> </Action>')));
    INSERT INTO t (c1) VALUES (v_anydata);   
END;
/

Have a look here for the answers: mind exercise - AnyData and XMLType data type (see as well the code, workarounds and output)

Published by: Marco Gralike on 20 March 2012 13:56

Tags: Database

Similar Questions

  • Ask about the structured storage of XMLTYPE column in Oracle Xml db

    Dear all,

    Version of DB: Oracle 11g (11.2.0.3.0)

    I have a table with an XMLTYPE column with a structured storage.

    CREATE TABLE Orders
        (
        Order_id NUMBER NOT NULL,
        Order_etc VARCHAR2(100),
        Order_desc XMLType NOT NULL
        )
        XMLTYPE Order_desc STORE AS OBJECT RELATIONAL XMLSCHEMA  "http://localhost/public/xsd/order_desc_xsd.xsd" ELEMENT "OrderState";
    

    I then recorded the XSD XML Db schema that is required for the structured storage.

    Before the creation of the table, I had created a table XMLTYPE (db_objects) and was able to use the query to verify that all objects, the XMLTYPE table got broken into when I signed his XSD below.

        SELECT column_name,      
               data_type
        FROM   user_tab_cols
        WHERE  table_name = 'DB_OBJECTS';
    

    And used under query to find data stored in the object-relational structure for my table (DB_OBJECTS) created with definition of XMLTYPE.

      SELECT EXTRACTVALUE(xseq.column_value, '/THISROW/OWNER')       AS owner
        ,      EXTRACTVALUE(xseq.column_value, '/THISROW/OBJECT_NAME') AS object_name
        ,      EXTRACTVALUE(xseq.column_value, '/THISROW/OBJECT_TYPE') AS object_type
        ,      EXTRACTVALUE(xseq.column_value, '/THISROW/OBJECT_ID')   AS object_id
        ,      EXTRACTVALUE(xseq.column_value, '/THISROW/CREATED')     AS created
        FROM   db_objects do
         ,      TABLE(XMLSEQUENCE(EXTRACT(VALUE(do), '/ROWSET/THISROW'))) xseq  
        WHERE  ROWNUM <= 10;
    

    Now could someone let me know, How to find how the column of XMLTYPE (Order_desc) was divided between other objects, just as I did for the Table with XMLTYPE (as shown above)?

    Thank you very much.

    First of all, because you are on 11.2, ExtractValue is obsolete and the documentation lists three options to use instead.  Here's an (untested) option

    SELECT owner, object_name, object_type, object_id, created
      FROM db_objects do,
           XMLTable('/ROWSET/THISROW'
                    PASSING do.object_value
                    COLUMNS
                    -- Set data types accordingly
                    owner        VARCHAR2(20) PATH 'owner',
                    object_name  VARCHAR2(20) PATH 'object_name',
                    object_type  VARCHAR2(20) PATH 'object_type',
                    object_id    VARCHAR2(20) PATH 'object_id',
                    created      VARCHAR2(20) PATH 'created');
    

    Secondly, why the column order matter?  You store in a method of object / relational.  As long as the XML is valid per the schema, Oracle will be able to store the data and thus to retrieve later.  How these data are mainly internal Oracle and shouldn't be touched because it can be changed from one version to another.  You can use the schema annotation to control how Oracle cards and stores the XML content, but nothing in there specifies the column order I know.

    It seems several details are missing information which could help others to answer your question as to what you need.

  • Validate the XML column when inserting

    Hello

    I'm on 11 GR 2.

    I have a table

    create table root_table (id number, text xmltype);

    I tried to sign up:

    Start

    dbms_xmlschema.registerSchema ('test', xmltype)

    "' < xs: schema xmlns: XS ="http://www.w3.org/2001/XMLSchema"xmlns:xdb ="http://xmlns.oracle.com"elementFormDefault ="unqualified">

    < name XS: complexType 'RootType' = >

    < xs: SEQUENCE >

    < xs: element name = "Required" / >

    < xs: element name = "Énumération" >

    < xs:simpleType >

    < xs:restriction base = "XS: String" >

    < xs:enumeration value = 'A' / >

    < xs:enumeration value = 'B' / >

    < xs:enumeration value = 'C' / >

    < / xs:restriction >

    < / xs:simpleType >

    < / xs: element >

    < xs: element name = "MinLength" >

    < xs:simpleType >

    < xs:restriction base = "XS: String" >

    < xs:minLength value = "4" / >

    < xs:maxLength value = "20" / >

    < / xs:restriction >

    < / xs:simpleType >

    < / xs: element >

    < xs: element name = "MaxLength" >

    < xs:simpleType >

    < xs:restriction base = "XS: String" >

    < xs:minLength value = "1" / >

    < xs:maxLength value = "4" / >

    < / xs:restriction >

    < / xs:simpleType >

    < / xs: element >

    < xs: element name = "MaxOccurs" type = "xs: String" maxOccurs = "2" / >

    < xs: element name = "MinOccurs" minOccurs = '2' maxOccurs = "2" / >

    < xs: element name = "Optional" type = "xs: String" minOccurs = "0" / >

    < / xs: SEQUENCE >

    < / xs: complexType >

    < xs: element name = "root" type = "RootType" xdb:defaultTable = "ROOT_TABLE" / >

    ((< / xs: Schema > '));

    end;

    /

    table should point to the table where the XML column is default, I guess that

    is the 'root' in the same line a reference to the name of the xmltype column?

    Now - how do I ensure the XML I have insert in the column "change" is validated against the schema above?

    concerning

    Mette


    For both options, save the diagram with these options (you can substitute the url of course):

    Start

    () dbms_xmlschema.registerSchema

    schemaURL-online "test.xsd.

    schemaDoc-online xmltype (bfilename ('TEST_DIR', 'test.xsd'), 873)

    local-online true

    genTypes-online fake

    genTables-online fake

    enableHierarchy-online dbms_xmlschema. ENABLE_HIERARCHY_NONE

    options-online dbms_xmlschema. REGISTER_BINARYXML

    );

    end;

    /

    Then the #1 option:

    create table root_table)

    Identification number

    text xmltype

    )

    XMLType column can store as xml binary securefile

    XmlSchema 'test.xsd' element 'root '.

    ;

    SQL > insert into root_table values (1,

    2 xmlparse (document

    3'

    4

    5    A

    6 XXXX

    7 12345

    8

    9

    10

    11  ')

    (12);

    insert into root_table values (1,

    *

    ERROR on line 1:

    ORA-31061: error XDB: XML error event

    ORA-19202: an error has occurred in the processing of XML

    LSX-00222: "12345" is too long (maximum is 4)

    SQL >

    SQL > insert into root_table values (1,

    2 xmlparse (document

    3'

    4

    5    A

    6 XXXX

    7 1234

    8

    9

    10

    11 ')

    (12);

    insert into root_table values (1,

    *

    ERROR on line 1:

    ORA-31061: error XDB: XML error event

    ORA-19202: an error has occurred in the processing of XML

    LSX-00213: only 1 occurrences of the 'MinOccurs' particle, the minimum is 2

    SQL > insert into root_table values (1,

    2 xmlparse (document

    3'

    4

    5    D

    6 XXXX

    7 1234

    8

    9

    10

    11

    12  ')

    (13);

    insert into root_table values (1,

    *

    ERROR on line 1:

    ORA-31061: error XDB: XML error event

    ORA-19202: an error has occurred in the processing of XML

    LSX-00290: invalid enumeration choice "D".

    SQL > insert into root_table values (1,

    2 xmlparse (document

    3'

    4

    5    A

    6 XXXX

    7 1234

    8

    9

    10

    11

    12  ')

    (13);

    1 line of creation.

    For the #2 option:

    create table root_table2)

    Identification number

    text xmltype

    )

    XMLType column can store it as clob securefile

    ;

    create or replace trigger root_table2_biu_t

    before the insert or update

    on root_table2

    for each line

    declare

    doc xmltype: =: new.tekst.createSchemaBasedXML ('test.xsd');

    Start

    doc.schemaValidate ();

    end;

    /

    SQL > insert into root_table2 values (1,

    2 xmlparse (document

    3'

    4

    5    D

    6 XXXX

    7 1234

    8

    9

    10

    11

    12  ')

    (13);

    insert into root_table2 values (1,

    *

    ERROR on line 1:

    ORA-31154: invalid XML document

    ORA-19202: an error has occurred in the processing of XML

    LSX-00290: invalid enumeration choice "D".

    ORA-06512: at "SYS." XMLTYPE", line 354

    ORA-06512: at DEV. "" ROOT_TABLE2_BIU_T ", line 4

    ORA-04088: error during execution of trigger ' DEV. ROOT_TABLE2_BIU_T'

    Both options will perform a validation of strict type.

    There are other possible configurations, such as CLOB based on a storage schema, but this approach is now obsolete.

    If you are only interested in whether the XML instance is valid or not, you can also use a constraint check with the XMLisValid function.

  • Storage of XmlType type

    Hi all
    I have a doubt as to the storage of XmlType type when I load the XML directly in the xml db repository using the dbms_xdb function. CreateResource.

    for example, with DBMS_XDB.createResource ('/ test/test.xml ', XMLTYPE('<root>test</root>'))
    the responsible storage of resource type is binary xml or data (CLOB) unstructured?

    How does take to load a resource using as a model of object-relational storage (GOLD)?

    I use oracle 11g 2

    Thank you

    Michele Bassanelli

    987939 wrote:
    Referring to the example I posted earlier
    "DBMS_XDB.createResource ('/ test/test.xml ', XMLTYPE ('test')).
    in which I is not registered to a schema and the resource is loaded in the form "SECUREFILE BLOB";
    This means that I am using the case 4 (unfounded binary xml schema)?

    If I use the expression
    "DBMS_XDB.createResource (" test.xml/test / ','test' ").
    I load the resource as CLOB, then as unstructured data?

    No, both are stored internally in a BLOB. Have you seen the diagram? I find it quite clearly.
    The resource content can be anything, not just XML, but both binary data (and so on for the archives of images, PDF, zip).
    In order to store all the content, Oracle uses a BLOB.

    Now comes the case of XML data.
    There are two options:
    (1) store the data in the BLOB, in this case only the Content-Type of the resource is marked as "text/xml" (if the file extension indicates a XML content)
    (2) store data in an XMLType table, using the either or storage (need a schema) or XML binary (which may or may not need a schema)

    Therefore, to achieve the option 2, you must follow one of these approaches

    -Save a schema for OR and use xdb:defaultTable annotation, so when you load an XML instance document consistent with the schema in the repository it is automatically stored in the table that you have said through the annotation.
    -Save a binary XML schema and use the xdb:defaultTable annotation (same mechanism or of)
    -Insert an XML document in an XMLType table, get the REF pointer on the line, and then use the pointer during the creation of the resource: that way the resource only stores the pointer to the document and the actual content will reside in the table (this is not structured or binary XML).

    Here are some examples:

    declare
      res  boolean;
      xref ref xmltype;
    begin
      res := dbms_xdb.CreateResource('/public/test1.xml', 'test');
      res := dbms_xdb.CreateResource('/public/test2.xml', xmltype('test'));
      res := dbms_xdb.CreateResource('/public/test3.xml', to_clob('test'));
      res := dbms_xdb.CreateResource('/public/test4.dat', 'test');
    
      insert into tmp_xml t values ( xmltype('test') )
      returning ref(t) into xref ;
    
      res := dbms_xdb.CreateResource('/public/test5.xml', xref);
    
    end;
    /
    

    Test4 and test2, test3 test1 resources are stored as BLOBs because we didn't tell Oracle to do otherwise.
    However, only test1 to test3 will be marked as given that the repository maintains a mapping between the XML content types and file extensions.

    E.g. for the test1 resource:

    
    

    Resource test4 will have its content type set to "binary":

    
    

    The content of the test5.xml resource lies in the XMLType of the TMP_XML table.

    The following query shows that test1 to test4 are stored in a BLOB, but not of test5:

    SQL> select x.res_name
      2       , utl_raw.cast_to_varchar2(res_content) as res_content
      3  from resource_view v
      4     , xmltable(
      5         xmlnamespaces(default 'http://xmlns.oracle.com/xdb/XDBResource.xsd')
      6       , '/Resource'
      7         passing v.res
      8         columns res_name    varchar2(30) path 'DisplayName'
      9               , res_content blob         path 'XMLLob'
     10       ) x
     11  where under_path(v.res, '/public') = 1 ;
    
    RES_NAME                       RES_CONTENT
    ------------------------------ ------------------------------
    test1.xml                      test
    test2.xml                      test
    test3.xml                      test
    test4.dat                      test
    test5.xml
    
  • compress the blob column to save space on the server

    Hi friends,

    I have a problem with the blob column, in the oracle 11.2.0.4 on aix Server database

    I have a table with a blob of column (containing a jpg file). This table is in a tablespace of 300 GB and storage space is full. There is no space on the server (asm).

    I need to load the jpg more in this table, but there is no space.

    I've read a few articles on tha compress blob type column, but I'm not sure what I should do.

    Is it possible to compress the blob column without going to a different tablespace (because the server has no more space to create a new one).

    The table and column have been created in a traditional way.

    Please, advice?

    Best regards

    Dbape.

    But this method requires add-on EA "Adv. Compression" ($$$).

    OP he wanted to compress .jpg files.

    BUDOKAI

    It is not possible.

    the .jpg files are already compressed.

    IIRC (of my Compression Adv. test) - SecureFile "knows best" and will not try to compress BLOBs identified as JPGs or any other known formats of files (such as .zip files)

    In other words - SecureFile is not the OP no good for the type of data, it is try to compress them.

    Are the only solutions that the OP has to enable it to store more JPG images

    • get rid of the old pictures
    • Add more disks
    • resize images (ordimage)
    • recompress the image by reducing the quality as long as the resulting image is unusable (ordimage)

    MK

  • Ask the CLOB column (with XML content)

    1. how to extract a particular xml tag value for a column with the CLOB data type.

    Example:

    < REQUEST_DETAIL >

    PR < GROUP_TYPE > < / GROUP_TYPE >

    < GroupName > ASSET MANAGEMENT TECHNICAL DATA < / GroupName >

    < BUS_UNIT_ACRN > SCS-FCAT < / BUS_UNIT_ACRN >

    < PROJ_MGR_ID > < / PROJ_MGR_ID >

    < PROJ_MGR_NAME > Roland Roy < / PROJ_MGR_NAME >

    < / REQUEST_DETAIL >

    Select

    XmlType (provable). Extract('/REQUEST_DETAIL/GROUP_TYPE/text()').getStringVal)

    e t

    /

    example above works.

    If I do not know the order of xml tag to ask how can I get the value.

    (/ * * / / * * / REQUEST_DETAIL/GROUP_TYPE / * / *)

    2 using the DBMS_LOB. SUBSTR takes longer to run and it never returns results and session will wait status for access to LOB_INDEX content (at the same time the CLOB column is used by the application).

    Y at - it another option for faster results.

    SELECT DBMS_LOB. SUBSTR (xml_blob, 4, DBMS_LOB.) INSTR (xml_blob, "< name >", 1, 1) + 6) name.

    status,

    CNT to COUNT (*)

    OF LOG_TBL

    WHEN TRUNC (IO_DATE) = TRUNC (SYSDATE)

    GROUP OF DBMS_LOB. SUBSTR (xml_blob, 4, DBMS_LOB.) INSTR (xml_blob, "< name >", 1, 1) + 6),

    status

    Kind regards

    Veera

    Adiitional your reuirement to omit the public areas

    2729533 wrote:

    Your 1 returln sql any domain name (p099 and public - seems to search all nodes in an xml file). I only need 1 domain name (and omit the public areas)

    1. SELECT X.*
    2. T
    3. , xmltable ('(//*[DomainName!="PUBLIC"]/DomainName) [1] ')
    4. PASSAGE xmlparse (document t.XML_BLOB)
    5. THE DOMAIN VARCHAR2 COLUMNS (15) PATH '.'
    6. ) X
    7. where t.no = 317663815
  • How repeat/option output values from XML in the CLOB column?

    Environment:


    Oracle 11.2.0.3 EE on Solaris


    Very much a newbie XML but try.  :-)


    I have a table with the XML stored in a CLOB (no, I can't imagine the environment but I live here).


    I need to display the data in a flat file format.  Some of the data is both optional and possibly repeat if present.


    Here's a fun sample data:


    "< res: customers xmlns: res = ' http://www.whatever.com/response ">

    < res: lastName > SMITH < / res: lastName >

    < res: firstName > JENNIFER < / res: name >

    < res: Extras >

    < res: Extra >

    HOME < res: phoneType > < / res: phoneType >

    555-555-5555 < res: phoneNumber > < / res: phoneNumber >

    < / res: Extra >

    < res: Extra >

    < res: phoneType > MOBILE < / res: phoneType >

    666-666-6666 < res: phoneNumber > < / res: phoneNumber >

    < / res: Extra >

    < / res: Extras >

    < res: lastName > JONES < / res: name >

    < res: firstName > ROBERT < / res: name >

    < res: Extras >

    < res: Extra >

    HOME < res: phoneType > < / res: / phoneType >

    123-456-7890 < res: phoneNumber > < / res: phoneNumber >

    < / res: Extra >

    < / res: Extras >

    < res: lastName > MURPHY < / res: lastName >

    < res: firstName > SEAN < / res: name >

    < / res: customers >

    I'm trying to get my output to look like this:


    Last name first name model number

    ------------- -------------- -------- ---------------

    JENNIFER SMITH 555-555-5555 HOME

    SMITH JENNIFER MOBILE 666-666-6666

    HOME OF ROBERT JONES 123-456-7890

    SEAN MURPHY


    I don't know how to get the repeated lines printed and I don't know how to get the printed line that does not contain the optional data.


    Here is the script that I have developed so far.  With my actual data I can get the printed name and I can get phone information printed out but only to the exclusion of the names. I was unable to get the data if the optional data is not present.


    I tried to refer to information from phone and then back up to 2 levels for the information of name but I receive: ORA-19110: no support for XQuery expression


    Select x.*

    client m.

    XMLTable (XMLNamespaces ('http://www.whatever.com/response' as "res") )

    , ' / res: clients/res: res/Extras: Extra '

    by the way of xmltype (m.CUSTOMER_XML)

    columns

    lastName varchar2 (80) WAY '... /... / res: LastName'

    , name varchar2 (30) WAY '... /... /FirstName'

    , varchar2 (30) phoneType PATH '.'

    , number of phone varchar2 (30) PATH '.'

    ) x

    Any help is greatly appreciated.


    -gary

    Hi Gary,.

    Are you sure the sample XML code correspond to your actual data?

    The second query expected error because the PATH expression refers to multiple targets.

    If it's really like that, the XML structure is not very easy to deal with. It would be wise to have a container element enclosing each customer information, like this:

    http://www.whatever.com/response">

    SMITH

    JENNIFER

    HOME

    555-555-5555.

    MOBILE

    666-666-6666.

    ...

    To answer your main question, you can use an OUTER JOIN to include data that do not have Extras.

    Using your original sample XML, something like this works for me:

    SQL > select x.lastName

    2, x.firstName

    3, y.phoneType

    4, y.phoneNumber

    client 5 m

    6, XMLTable)

    7 XMLNamespaces (default 'http://www.whatever.com/response')

    8, ' for $i in/clients/first name

    9 return element {} r

    $i 10 / following - sibling:Extras [1]

    11, $i/next - sibling:firstName [1]

    12          , $i

    13          }'

    14 passage xmltype (m.CUSTOMER_XML)

    15 columns

    lastName 16 varchar2 (80) PATH "lastName."

    17, firstName varchar2 (30) PATH "first name".

    18, extras xmltype PATH "Extras."

    (19) x

    20, XMLTable)

    21 XMLNamespaces (default 'http://www.whatever.com/response')

    22, ' / extras/Extra.

    23 passage x.extras

    24 columns

    VARCHAR2 (30) 25 phoneType PATH "phoneType".

    26, phoneNumber varchar2 (30) PATH "phone".

    27       ) (+) y

    28;

    LASTNAME FIRSTNAME PHONETYPE PHONENUMBER

    ------------ ----------- ----------- --------------

    JENNIFER SMITH 555-555-5555 HOME

    SMITH JENNIFER MOBILE 666-666-6666

    HOME OF ROBERT JONES 123-456-7890

    SEAN MURPHY

  • Stored in the BLOB column display PDF problem

    Hello everyone.

    I tried to follow this tutorial http://asktom.oracle.com/pls/asktom/f?p=100:11:0:p11_question_id:232814159006 on the display of PDF files stored in BLOB columns. This is done on Apex 4.2, with my DB 11 g running. I have my procedure, which I will post below:
    create or replace procedure "PDF" (p_id IN gvo_documents.doc_id%type)
    is
        l_lob    blob;
        l_amt    number default 30;
        l_off   number default 1;
        l_raw   raw(4096);
    begin
        select contents into l_lob
            from gvo_documents 
             where doc_id = p_id;
    
     -- make sure to change this for your type!
        owa_util.mime_header( 'application/pdf' );
    
    
        begin
            loop
              dbms_lob.read( l_lob, l_amt, l_off, l_raw );
              htp.prn( utl_raw.cast_to_varchar2( l_raw ) );
              l_off := l_off+l_amt;
              l_amt := 4096;            
        end loop;
            exception
               when no_data_found then 
                  NULL;
            end;
    
    end;
    
    I am trying to run this through a region dynamic PL/SQL, and even if I don't get any error, the content displayed is a huge mess of truncated text and strange characters. I tried to run this procedure on many other types of documents, including word and jpeg image files, all with the necessary changes in my inside, and regardless of what I use, I always get a big mess of strange characters. Does anyone have information or ideas why this is happening?

    If I understand correctly, your needs must be broken down into two problems:
    1) click the link that opens a window showing a new APEX page
    (2) an APEX page displays the document, download it not.

    I did not (yet) #1.
    However, you can generate a URL that points to the new page in the select for the report.

    It's a related issue, but no response yet:
    Open the pdf file in the browser window

    The key is to target = "_blank" to the anchor tag.
    To generate the URL, you must use the APEX_UTIL.prepare_URL () function.

    If this does not work, a dynamic Action that makes magical things of JavaScript may be necessary.

    # 2, I lost the URL that showed how to display a PDF file in a page "form.
    From what I remember:
    Start with a blank page with a pristine area of HTML (all items will in the HTML area)
    Add an element to the PK/annual
    part I forgot Create a Data Manipulation process
    -Automated row Fetch
    -By loading - after the header
    -(stuff for your table/view)
    part I forgot Create a (I think) "File browser" item type. For the parameters:
    -Storage of Type "BLOB column specified in the Source element" (and put the name of the BLOB column)
    -MIME Type column: (column name) - since there are several types, this is a MUST HAVE
    -Filename column: (column name) - I highly recommend you have this.
    -Provision of content is INLINE<-- this="" is="" the="">

    In addition, you will need a browser for each of the Types MIME Plugin (if not, the browser may try to "Download" the file)
    Browsers can manage the types of images internally. Plugin Adobe can handle PDF files. I do not know Word/Excel.

    Yet once again, I don't remember the exact details, but that should cover most of it.

    MK

  • Extract the value of the XML column.

    Hello

    I'm on 11.2.0.3 and got query
    select other_xml from v$sql_plan where sql_id=’2y32qkr40b82a’ and other_xml is not null
    
    <other_xml><info type="db_version">11.2.0.3</info>
    <info type="parse_schema"><![CDATA["LIU"]]></info><info type="dynamic_sampling">2</info>
    <info type="plan_hash">3882242470</info><info type="plan_hash_2">281948136</info>
    <peeked_binds><bind nam=":N1" pos="1" dty="2" pre="0" scl="0" mxl="22">c30d51</bind>
    <bind nam=":N2" pos="2" dty="2" pre="0" scl="0" mxl="22">c30d51</bind>
    <bind nam=":N3" pos="3" dty="2" pre="0" scl="0" mxl="22">c30d51</bind></peeked_binds>
    <outline_data><hint><![CDATA[IGNORE_OPTIM_EMBEDDED_HINTS]]></hint>
    <hint><![CDATA[OPTIMIZER_FEATURES_ENABLE('11.2.0.3')]]></hint>
    <hint><![CDATA[DB_VERSION('11.2.0.3')]]></hint>
    <hint><![CDATA[FIRST_ROWS(100)]]></hint>
    <hint><![CDATA[OUTLINE_LEAF(@"SEL$1")]]></hint>
    <hint><![CDATA[FULL(@"SEL$1" "LIU"@"SEL$1")]]></hint>
    </outline_data></other_xml>
    I want to output associated to < type info = "dynamic_sampling" > 2 < / info >:

    dynamic_sampling of name of column
    value of line 2

    reflection by using dynamic_sampling value as a predicate would be great if:

    Select * from v$ sql_plan
    where
    dynamic_sampling = 2

    How to transform the other_xml column to get such results?


    Concerning
    GregG

    Published by: GregG on February 8, 2013 13:14

    XMLTABLE is a better way to do it as EXTRACTVALUE is obsolete but:

    select p.sql_id,  extractvalue(h.column_value,'/info') lvl
    from   v$sql_plan p
    ,      table(xmlsequence(extract(xmltype(p.other_xml),'/other_xml/info'))) h
    where  p.other_xml is not null
    and    extractvalue(h.column_value,'/info/@type') = 'dynamic_sampling';
    

    11.1 I think the tag can say 'yes' rather than giving level.
    If there is no dynamic sampling, there should be no tag dynamic sampling.

  • Query to read the XML of the CLOB column

    Hello

    I want a SQL to get the following information extracted a CLOB column.

    MasterReport/sg:RptDef/sg:RptCell@RealDesc MasterReport/sg:RptDef/sg:RptCell@RealNum
    100 credits
    flow rates from 100

    Example of XML data in the column of table is:
    <? XML version = "1.0" encoding = "UTF-8"? >
    < MasterReport xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:sg = "http://www.oracle.com/fsg/2002-03-20/" xsi: schemaLocation = "http://www.oracle.com/2002-03-20/fsg.xsd" >
    Vision Portugal < sg:LDGName > < / sg:LDGName >
    Vision Portugal < sg:SOBName > < / sg:SOBName >
    Vision Portugal < sg:DataAccessSetName > < / sg:DataAccessSetName >
    Model report 30 < sg:InternalReportName > < / sg:InternalReportName >
    < sg:CustomParam10 / >
    < sg:RowContext RowId = "r100001" >
    < sg:RowName / >
    disputes credits - Total amount previous period < sg:RowLineItem > < / sg:RowLineItem >
    < sg:RowDispUnit > 1 < / sg:RowDispUnit >
    < sg:RowDispFormat / >
    < sg:RowUnitOfMeasure > EUR < / sg:RowUnitOfMeasure >
    < sg:RowLedgerCurrency > ALL < / sg:RowLedgerCurrency >
    < sg:RowCurrencyType > T < / sg:RowCurrencyType >
    < sg:RowChangeSign > 0 < / sg:RowChangeSign >
    < sg:RowSeq > 1.0000000000000 < / sg:RowSeq >
    < / sg:RowContext >
    < sg:RowContext RowId = "r100002" >
    < sg:RowName / >
    < sg:RowLineItem > Litigation credits-taxed amounts of Column2 for the previous period < / sg:RowLineItem >
    < sg:RowDispUnit > 1 < / sg:RowDispUnit >
    < sg:RowDispFormat / >
    < sg:RowUnitOfMeasure > EUR < / sg:RowUnitOfMeasure >
    < sg:RowLedgerCurrency > ALL < / sg:RowLedgerCurrency >
    < sg:RowCurrencyType > T < / sg:RowCurrencyType >
    < sg:RowChangeSign > 0 < / sg:RowChangeSign >
    < sg:RowSeq > 2.0000000000000 < / sg:RowSeq >
    < / sg:RowContext >
    < sg:ColContext ColId = "c1000" >
    < sg:ColAmountType / >
    < sg:ColPeriod / >
    < sg:ColPerOffset / >
    < sg:ColChangeSign / >
    < sg:ColPosition / >
    < sg:ColSeq / >
    < sg:ColWidth > 100 < / sg:ColWidth >
    < / sg:ColContext >
    < sg:ColContext ColId = "c1001" >
    Total of < sg:ColName > < / sg:ColName >
    < sg:ColDescr / >
    < sg:ColDispUnit > 1 < / sg:ColDispUnit >
    < sg:ColUnitOfMeasure > EUR < / sg:ColUnitOfMeasure >
    < sg:ColLedgerCurrency > ALL < / sg:ColLedgerCurrency >
    < sg:ColCurrencyType > T < / sg:ColCurrencyType >
    < sg:ColDispFormat > 999999999.99 < / sg:ColDispFormat >
    CDA-real < sg:ColAmountType > < / sg:ColAmountType >
    < sg:ColPerOffset > 0 < / sg:ColPerOffset >
    < sg:ColAmntId > 14 < / sg:ColAmntId >
    < sg:ColParamId >-1 < / sg:ColParamId >
    A < sg:ColType > < / sg:ColType >
    < sg:ColStyle > B < / sg:ColStyle >
    < sg:ColPeriod > 10 / 08 < / sg:ColPeriod >
    < sg:ColPeriodYear > 2008 < / sg:ColPeriodYear >
    < sg:ColPeriodNum > 11 < / sg:ColPeriodNum >
    < sg:ColPeriodStart > 2008 - 10-01 T 00: 00:00 < / sg:ColPeriodStart >
    < sg:ColPeriodEnd > 2008-10-31 T 00: 00:00 < / sg:ColPeriodEnd >
    < sg:ColChangeSign > 0 < / sg:ColChangeSign >
    the totals of < sg:ColHeadLine1 > < / sg:ColHeadLine1 >
    < sg:ColHeadLine2 / >
    < sg:ColHeadLine3 / >
    < sg:ColHeadLine4 / >
    < sg:ColHeadLine5 / >
    < sg:ColHeadLine6 / >
    < sg:ColHeadLine7 / >
    < sg:ColHeadLine8 / >
    < sg:ColHeadLine9 / >
    < sg:ColPosition > 99 < / sg:ColPosition >
    < sg:ColSeq > 1.0000000000000 < / sg:ColSeq >
    < sg:ColWidth > 14 < / sg:ColWidth >
    < / sg:ColContext >
    "< sg:RptDef RptId = 'p1001" RptDetName = "book = PT Vision (Vision Portugal)" RptPESegm = "" RptPEVal = "" RptTabLabel = "Exit 1 (Vision PT)" > "
    < sg:RptLine RptCnt = 'p1001"RowCnt ="r100001"LineRowSeq ="1.0000000000000"LinCnt ="l100001">
    < sg:RptCell ColCnt RealDesc "c1000" = "flows" = > flow < / sg:RptCell >
    < sg:RptCell ColCnt "c1001' RealNum = '100.000000' = > 100,00 < / sg:RptCell >
    < / sg:RptLine >
    < sg:RptLine RptCnt = 'p1001"RowCnt ="r100002"LineRowSeq ="2.0000000000000"LinCnt ="l100002">
    < sg:RptCell ColCnt = "c1000" RealDesc = "creditsd" > credits < / sg:RptCell >
    < sg:RptCell ColCnt "c1001' RealNum = '100.000000' = > 100,00 < / sg:RptCell >
    < / sg:RptLine >
    < / sg:RptDef >
    < sg:TabCount > 1 < / sg:TabCount >
    < / MasterReport >

    Please help me.

    Concerning
    Goussard

    Published by: user576087 on March 18, 2012 23:54

    I don't know if you want that the values of the attribute or the element, but it should give you a good start:

    SQL> alter session set nls_numeric_characters = ".,";
    
    Session altered
    
    SQL>
    SQL> select x.*
      2  from my_table t
      3     , xmltable(
      4         xmlnamespaces('http://www.oracle.com/fsg/2002-03-20/' as "sg")
      5       , '/MasterReport/sg:RptDef/sg:RptLine'
      6         passing xmltype(t.xmldoc)
      7         columns type    varchar2(30) path 'sg:RptCell[1]'
      8               , amount  number       path 'sg:RptCell[2]'
      9       ) x
     10  ;
    
    TYPE                               AMOUNT
    ------------------------------ ----------
    debits                                100
    credits                               100
     
    
  • How remove the line by line by comparing to the first column?

    Hello!

    I have a problem - I need to remove the line by line, but the problem is, I know that the first COLUMN of the table is a PK.
    To retrieve the NAME of the COLUMN that I use:

    SELECT column_name, table_name FROM USER_TAB_COLUMNS WHERE column_id = 1 and table_name = c1.tmp_table_name;
    But it does not somehow.
    Below you can see my script (which has not worked for now):

    declare
    XXX varchar2 (100);
    Start
    C1 in (select table_name, tmp_tables tmp_table_name) loop
    IMMEDIATE EXECUTION
    ' SELECT column_name in ' | xxx | "USER_TAB_COLUMNS WHERE column_id = 1 AND table_name = ' |" ' || C1.tmp_table_name | " ' ;
    immediate execution
    "start."
    for c2 in (select * from ' | c1.tmp_table_name | start loop ')
    Insert into ' | C1.table_name | "values c2; delete from ' | C1.tmp_table_name | 'where ' | xxx |' = c2.' | xxx |'; exception: when other then null; end; end loop; end;';
    end loop;
    end;

    P.S. The Inserts work perfect. I have a problem with deleting lines that are in c1.table_name, of c1.tmp_table_name (the two tables have the same structure, PK, always), because I have the names of columns different another tables which are PK. (for example: K, ID, NS and so on) Please help me to write the correct script.
    For example this will be for the first line recovered as:
    Start
    C1 in (select table_name, tmp_tables tmp_table_name) loop
    immediate execution
    «Start for c2 in (select * from ' |)» C1.tmp_table_name | Start loop ')
    Insert into ' | C1.table_name | "values c2; delete from ' | C1.tmp_table_name: ' where K = c2. K; exception: when other then null; end; end loop; end;';
    end loop;
    end;
    This script works perfectly. But I have many other tables with different PK - K No.

    Solution with the logging of errors table

    -- create the error-logging table
    CREATE TABLE tbl_MergeErrors (
        Stamp       TIMESTAMP(3),
        TableName   VARCHAR2(30),
        KeyColumn   VARCHAR2(30),
        KeyValue    VARCHAR2(4000),
        ErrorCode   NUMBER(5),
        ErrorMsg    VARCHAR2(4000),
    
      CONSTRAINT pk_MergeErrors
          PRIMARY KEY (TableName, Stamp)
          USING INDEX
    )
    /
    
    -- procedure to insert errors
    CREATE OR REPLACE
    PROCEDURE LogMergeError (pTableName  IN VARCHAR2,
                             pKeyColumn  IN VARCHAR2,
                             pKeyValue   IN VARCHAR2)
    IS PRAGMA AUTONOMOUS_TRANSACTION;
    
        -- you couldn't insert SQLCODE or SQLERRM directly into a table (ORA-00984)
        nSQLCODE   NUMBER(5)      := SQLCODE;
        vcSQLERRM  VARCHAR2(4000) := SQLERRM;
    
    BEGIN
      INSERT INTO tbl_MergeErrors
             (Stamp, TableName, KeyColumn, KeyValue, ErrorCode, ErrorMsg)
          VALUES (SYSTIMESTAMP, RTrim( SubStr( pTableName, 1, 30)),
                  RTrim( SubStr( pKeyColumn, 1, 30)), SubStr( pKeyValue, 1, 4000),
                  nSQLCODE, vcSQLERRM);
      COMMIT WORK;
    
    -- if an error occured here, then just roll back the autonomous transaction
    EXCEPTION
      WHEN OTHERS THEN   ROLLBACK WORK;
    END LogMergeError;
    /
    
    -- create the tables and insert test-data
    CREATE TABLE TMP_TABLES (
        TABLE_NAME       VARCHAR2(200),
        TMP_TABLE_NAME   VARCHAR2(200),
      CONSTRAINT TMP_TABLES_X PRIMARY KEY (TABLE_NAME)
    )
    /
    CREATE TABLE TMP_KL002 (
        K   VARCHAR2(40),
        N   VARCHAR2(200)
    )
    /
    CREATE TABLE TMP_TABLE1 (
        NS   VARCHAR2(40),
        N    VARCHAR2(200)
    )
    /
    CREATE TABLE KL002 (
        K VARCHAR2(40),
        N VARCHAR2(200),
      CONSTRAINT PK_KL002 PRIMARY KEY (K)
    )
    /
    CREATE TABLE TABLE1 (
        NS   VARCHAR2(40),
        N    VARCHAR2(200),
      CONSTRAINT PK_TABLE1 PRIMARY KEY (NS)
    )
    / 
    
    INSERT INTO TMP_TABLES (TABLE_NAME, TMP_TABLE_NAME) VALUES ('kl002','tmp_kl002');
    INSERT INTO TMP_TABLES (TABLE_NAME, TMP_TABLE_NAME) VALUES ('table1','tmp_table1');
    INSERT INTO tmp_KL002 (K, N) VALUES ('00', 'none');
    INSERT INTO tmp_KL002 (K, N) VALUES ('07', 'exists');
    INSERT INTO tmp_KL002 (K, N) VALUES ('08', 'not assigned');
    INSERT INTO tmp_table1 (NS, N) VALUES ('2000', 'basic');
    INSERT INTO tmp_table1 (NS, N) VALUES ('3000', 'advanced');
    INSERT INTO tmp_table1 (NS, N) VALUES ('4000', 'custom');
    COMMIT WORK;
    
    -- to test, if it works correct when primary key values exists before
    INSERT INTO KL002 VALUES ('07', 'exists before');
    COMMIT WORK;
    
    -- check the data before execution
    SELECT * FROM TMP_KL002 ORDER BY K;
    SELECT * FROM KL002 ORDER BY K;
    SELECT * FROM TMP_TABLE1 ORDER BY NS;
    SELECT * FROM TABLE1 ORDER BY NS;
    
    -- empty the error-logging table
    TRUNCATE TABLE tbl_MergeErrors DROP STORAGE; 
    
    -- a solution
    DECLARE
    
        PLSQL_BLOCK  CONSTANT VARCHAR2(256) := '
    BEGIN
      FOR rec IN (SELECT * FROM <0>) LOOP
        BEGIN
          INSERT INTO <1> VALUES rec;
          DELETE FROM <0> t WHERE (t.<2> = rec.<2>);
        EXCEPTION
          WHEN OTHERS THEN
              LogMergeError( ''<1>'', ''<2>'', rec.<2>);
        END;
      END LOOP;
    END;';
    
    BEGIN
      FOR tabcol IN (SELECT t.Tmp_Table_Name, t.Table_Name, c.Column_Name
                     FROM Tmp_Tables t,
                          User_Tab_Columns c
                     WHERE     (c.Table_Name = Upper( t.Tmp_Table_Name))
                           AND (c.Column_ID = 1)
                ) LOOP
        EXECUTE IMMEDIATE Replace( Replace( Replace( PLSQL_BLOCK,
                                   '<0>', tabcol.Tmp_Table_Name),
                                   '<1>', tabcol.Table_Name),
                                   '<2>', tabcol.Column_Name);
      END LOOP;
    END;
    / 
    
    -- check the data after execution ...
    SELECT * FROM TMP_KL002 ORDER BY K;
    SELECT * FROM KL002 ORDER BY K;
    SELECT * FROM TMP_TABLE1 ORDER BY NS;
    SELECT * FROM TABLE1 ORDER BY NS;
    
    -- ... and also the error-logging table
    SELECT * FROM tbl_MergeErrors ORDER BY Stamp, TableName;
    
    -- of couse you must issue an COMMIT (the ROLLBACK is only for testing
    ROLLBACK WORK;
    
    -- drop the test-tables
    DROP TABLE TABLE1 PURGE;
    DROP TABLE KL002 PURGE;
    DROP TABLE TMP_TABLE1 PURGE;
    DROP TABLE TMP_KL002 PURGE;
    DROP TABLE TMP_TABLES PURGE;
    
    -- you shouldn't drop the error-logging table, but I use it to free up my db
    DROP TABLE tbl_MergeErrors PURGE;
    

    Greetings, Niels

  • Two or more SRID in the same column?

    Hello, I am working with Oracle Spatial, and I have a problem with the SRID.

    I have a column in a table with the SDO_GEOMETRY type and I need to create a Spatial Index to use. But to create a Spatial Index first, I need to insert metadata into the table incluied SRID: for example

    Insert in user_sdo_geom_metadata (table_name, column_name, srid, diminfo) values ('Spatial_Test', 'GEOMETRIA', 8307, SDO_DIM_ARRAY (SDO_DIM_ELEMENT('LONGITUDE',-180,180,0.5), SDO_DIM_ELEMENT ('LATITUDE',-90, 90, 0.5)));

    But I need to work with more than one SRID in this column. Is there anyway to have two or more SRID in the same column? How? and if I insert them, can they give any problem?

    Thank you very much.

    Good bye.

    ZeyKa,

    . . . . You can transform and store all your geometries in SRID 8307 and then turn to their original SRID when you SELECT them.

    -- "Example: Transform geometry from  to SRID 8307 for storage"
    -- "NOTE: Replace  and  with your values"
    INSERT INTO MyTable (ID, geometry,RenderSRID) VALUES (1, SDO_CS.TRANSFORM(,8307), );
    
    -- "Example: Transform stored geometry back to its "
    SELECT SDO_CS.TRANSFORM(geometry,RenderSRID) FROM MyTable WHERE ID = 1;
    

    Kind regards
    Noel

  • the value of the xml column type tag data BLOB

    Hello

    I'm on Oracle 10 g.
    I have a table that has a column as BLOB data type and contains XML data. I need to select specific table records according to a unique tag value of the xml data in the BLOB column. For example:
    The table say Test has two columns: id (integer) and MESG (BLOB)
    The xml in the MESG column message is assumed:
    < message >
    < > 123456 contactphone < / contactphone >
    < contactname > ABCD < / contactname >
    < amount > 9999 < / amount >
    < / message >

    I need to extract only the records where the amount is = 9999

    Help, please. Thanks in advance.

    user12850338 wrote:
    Hi BluShadow,
    Thanks for your reply.
    I confess that if we would have used type xml in the first place, things would have been easier.
    For example, I mentioned three tags in the xml file, but my real data contains some hundreds of tags... :( So it will always be a good idea with this approach.

    Yes, it's a good approach. Oracle has provided built-in XML functionality to manage XML, then of course it's the best thing to use. :)

    For example, you can easily deal with namespaces and repeating nested groups and flatten the data in a table structure. for example

    SQL> ed
    Wrote file afiedt.buf
    
      1  WITH t as (select XMLTYPE('
      2  
      3    
      4      1
      5      1800
      6      
      7        1
      8        28
      9        6
     10        12
     11      
     12      
     13        5
     14        19
     15        1
     16        90
     17      
     18    
     19    
     20      2
     21      2400
     22      
     23        3
     24        14
     25        7
     26        5
     27      
     28    
     29  ') as xml from dual)
     30  -- END OF TEST DATA
     31  select x.country, x.point, y.user_id, y.target, y.state, y.task
     32  from t
     33      ,XMLTABLE(XMLNAMESPACES('http://www.w3.org' as "aa"),
     34                '/RECSET/aa:REC'
     35                PASSING t.xml
     36                COLUMNS country NUMBER PATH '/aa:REC/aa:COUNTRY'
     37                       ,point   NUMBER PATH '/aa:REC/aa:POINT'
     38                       ,user_info XMLTYPE PATH '/aa:REC/*'
     39               ) x
     40      ,XMLTABLE(XMLNAMESPACES('http://www.w3.org' as "aa"),
     41                '/aa:USER_INFO'
     42                PASSING x.user_info
     43                COLUMNS user_id NUMBER PATH '/aa:USER_INFO/aa:USER_ID'
     44                       ,target  NUMBER PATH '/aa:USER_INFO/aa:TARGET'
     45                       ,state   NUMBER PATH '/aa:USER_INFO/aa:STATE'
     46                       ,task    NUMBER PATH '/aa:USER_INFO/aa:TASK'
     47*              ) y
    SQL> /
    
       COUNTRY      POINT    USER_ID     TARGET      STATE       TASK
    ---------- ---------- ---------- ---------- ---------- ----------
             1       1800          1         28          6         12
             1       1800          5         19          1         90
             2       2400          3         14          7          5
    
    SQL>
    
  • Use the 2nd column for the label data

    This should be easy. Online help for the numbers shows an example under Add graphics > adjust figure brands and labels.  My table is a simple 2-d column chart. In a single column, I have the weight in pounds, and in the second column, I have a date. When I have only the weight column selected in the form of data, I get a graph that is almost perfect, but there is no date label. When I try to include date data, I have a reverse relationship X and Y. Once I selected a cell as reference data, it doesn't have any way to deselect. What I want to do is chart weight against date and have the date appear as a label.

    Any advice is welcome.

    Hi innerserenity,

    I swapped the order of the columns. Column A is a column header.

    Kind regards

    Ian.

  • an alphabet by typing in a cell gives drop down suggestions from previous hits on the same column. But how the drop down to choose the suggestions of the other columns and other sheets.

    an alphabet by typing in a cell gives drop down suggestions from previous hits on the same column. But how the drop down to choose the suggestions of the other columns and other sheets.

    Hi mdsavol,

    Your observations are accurate. The 'suggestions' are previous entries in the same column that correspond to what has been entered so far in the active cell. The only direct user control is to activate the function turn on or off in numbers preferences > general.

    There are other ways to include or exclude items of suggestions:

    • To remove typos in the suggestions list, the user must correct the typos in the cell above the active cell. If they are more in the list, they won't be presented as suggestions.
    • To include selections added to the list, the user must enter these suggestions in the individual cells above the active cell and column where they are wanted as suggestions.

    There was a request here a while there is a list of suggestion 'live' similar to those of some websites, which offers a descending list of possible entries as a type in an input box.

    The only way I see to reach a solution similar to what you have asked is to use as many lines at the top of the non-en-tete of the table section to list the items likely to repeat in your table, and then hide the lines. You'll need a list for each column where you want to use this feature with a list previously planted. Existing items will then require a likely hit up to three, then a click to choose from a list small enough to enter a value into a cell. News he will need to enter in full the first time, but after that it will be put on the list and answer the same thing as the terms preseeded.

    While your setting upward (or decide not to do), consider going on the menu of number (in numbers), choosing to provide feedback from numbers and writing a feature in Apple request. Describe what you want. Explain how he could help the average user numbers, and then hope for the best.

    Kind regards

    Barry

Maybe you are looking for