Converting a CLOB toBLOB

Hi
Is it possible to convert a CLOB data to a BLOB data?
Thanks in advance
bye

or vice versa?

Similar Messages

  • How to convert a CLOB to BLOB

    Hi,
    Can any one tell me how to convert a CLOB into BLOB? In Oracle 10g there is a function which is converttoblob(). But in Oracle 9i there is no function as such. If i am using Hextoraw() function still then its giving some pointer error. please let me know the solution.

    FUNCTION c2b( c IN CLOB ) RETURN BLOB
    -- typecasts CLOB to BLOB (binary conversion)
    IS
    pos PLS_INTEGER := 1;
    buffer RAW( 32767 );
    res BLOB;
    lob_len PLS_INTEGER := DBMS_LOB.getLength( c );
    BEGIN
    DBMS_LOB.createTemporary( res, TRUE );
    DBMS_LOB.OPEN( res, DBMS_LOB.LOB_ReadWrite );
    LOOP
    buffer := UTL_RAW.cast_to_raw( DBMS_LOB.SUBSTR( c, 16000, pos ) );
    IF UTL_RAW.LENGTH( buffer ) > 0 THEN
    DBMS_LOB.writeAppend( res, UTL_RAW.LENGTH( buffer ), buffer );
    END IF;
    pos := pos + 16000;
    EXIT WHEN pos > lob_len;
    END LOOP;
    RETURN res; -- res is OPEN here
    END c2b;

  • Trying to convert a CLOB to an XMLTYPE

    I'm trying to insert a xm ldocument stored in a CLOB into a XMLTYPE column registered to a schema.
    I'm trying so use the function below to convert the CLOB to an XMLTYPEbut i keep getting a ORA-06553 Error: wrong number or arguments. Am i using the xmltype constructor properly?
    create or replace function to_xmltype (clobcol CLOB)
    return xmltype as
    begin
    return xmltype(clobcol,'http://localhost:8080/source/schemas/poSource/xsd/mySchema.xsd');
    end;
    insert into xml_table (xmldata) values (select to_xmltype(ct.clob_data) from clob_table ct );
    Thanks for the help

    Looks fine to me except that you should omit the values clause:
    insert into xml_table (xmldata) select to_xmltype(ct.clob_data) from clob_table ct ;

  • Encoding problem with convert and CLOB involving UTF8 and EBCDIC

    Hi,
    I have a task that requires me to call a procedure with a CLOB argument containing a string encoded in EBCDIC. This did not go well so I started narrowing down the problem. Here is some SQL to illustrate it:
    SQL> select * from v$version;
    BANNER
    Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
    PL/SQL Release 10.2.0.4.0 - Production
    CORE 10.2.0.4.0 Production
    TNS for Solaris: Version 10.2.0.4.0 - Production
    NLSRTL Version 10.2.0.4.0 - Production
    SQL> select value from v$nls_parameters where parameter = 'NLS_CHARACTERSET';
    VALUE
    AL32UTF8
    SQL> select convert(convert('abc', 'WE8EBCDIC500'), 'AL32UTF8', 'WE8EBCDIC500')
    output from dual;
    OUT
    abc
    SQL> select convert(to_char(to_clob(convert('abc', 'WE8EBCDIC500'))), 'AL32UTF8', 'WE8EBCDIC500') output from dual;
    OUTPUT
    ╒╫¿╒╫¿╒╫¿
    So converting to and from EBCDIC works fine when using varchar2, but (if I am reading this right) fails when involving CLOB conversion.
    My question then is: Can anyone demonstrate how to put correct EBCDIC into a CLOB and maybe even explain why the examples do what they do.

    in order to successfully work with xmldb it is recommended that you use 9.2.0.4
    and above. Its seems to have lower version.
    Okay now related to the problem , if your data that you want to send to the attributes are not greater than 32767, then you can use the pl/sql varchar2 datatype to hold the data rather then CLOB and overcome this problem.
    here is the sample. use function with below pl/sql to return the desired output.
    SQL> declare
      2   l_clob     CLOB := 'Hello';
      3   l_output   CLOB;
      4  begin
      5    select  xmlelement("test", xmlattributes(l_clob AS "a")).getclobval()
      6      into l_output from dual;
      7  end;
      8  /
      select  xmlelement("test", xmlattributes(l_clob AS "a")).getclobval()
    ERROR at line 5:
    ORA-06550: line 5, column 44:
    PL/SQL: ORA-00932: inconsistent datatypes: expected - got CLOB
    ORA-06550: line 5, column 3:
    PL/SQL: SQL Statement ignored
    SQL> declare
      2   l_vchar     varchar2(32767) := 'Hello';
      3   l_output   CLOB;
      4  begin
      5    select  xmlelement("test", xmlattributes(l_vchar AS "a")).getclobval()
      6      into l_output from dual;
      7    dbms_output.put_line(l_output);
      8  end;
      9  /
    <test a="Hello"></test>
    PL/SQL procedure successfully completed.

  • Query Column List convert to CLOB

    Hi,
    we need to print the data by using UTL_FILE from the dynamically constructing sql query with pivot column (It is having more than 1000 column).
    But this query contains 1008 columns but it throwing error maxmimum number of columns in a table or views 1000.
    Query
    Select col1,col2,col3,clo4,col5,col6,col7,col8 ,Pivot columns 1 to 1000 from tab1
    Each and every column data having more than 3500.
    Please share your idea ?
    1.is it possoble to concatenate all the columns and write into file using utl_file.
    2.How to convert the rows as clob column
    3.Each and every row should contains more than 32767.
    Regards,
    Sudhakar P.

    Sudhakar P wrote:
    Hi,
    we need to print the data by using UTL_FILE from the dynamically constructing sql query with pivot column (It is having more than 1000 column).
    But this query contains 1008 columns but it throwing error maxmimum number of columns in a table or views 1000.Can't overcome Oracle's internal limits.
    Each and every column data having more than 3500.More than 3500 what?
    1.is it possoble to concatenate all the columns and write into file using utl_file.Yes.
    2.How to convert the rows as clob columnUse built in LOB functionality, such as provided in the DBMS_LOB package for example.
    3.Each and every row should contains more than 32767.You would have to use CLOB's to store more than 4000 characters in SQL. 32767 is the limit in PL/SQL for VARCHAR2.
    If it's dynamic, then you're going to have to pretty much use the DBMS_SQL package to construct things (11g allows the use of CLOB with EXECUTE IMMEDIATE for dynamic statements but it's still not ideal to get the data back if you don't know the output structure).
    Here's an example from my standard library for writing out dynamic SQL output to a CSV file, which would probably be a good starting point...
    As sys user:
    CREATE OR REPLACE DIRECTORY TEST_DIR AS '\tmp\myfiles'
    GRANT READ, WRITE ON DIRECTORY TEST_DIR TO myuser
    /As myuser:
    CREATE OR REPLACE PROCEDURE run_query(p_sql IN VARCHAR2
                                         ,p_dir IN VARCHAR2
                                         ,p_header_file IN VARCHAR2
                                         ,p_data_file IN VARCHAR2 := NULL) IS
      v_finaltxt  VARCHAR2(4000);
      v_v_val     VARCHAR2(4000);
      v_n_val     NUMBER;
      v_d_val     DATE;
      v_ret       NUMBER;
      c           NUMBER;
      d           NUMBER;
      col_cnt     INTEGER;
      f           BOOLEAN;
      rec_tab     DBMS_SQL.DESC_TAB;
      col_num     NUMBER;
      v_fh        UTL_FILE.FILE_TYPE;
      v_samefile  BOOLEAN := (NVL(p_data_file,p_header_file) = p_header_file);
    BEGIN
      c := DBMS_SQL.OPEN_CURSOR;
      DBMS_SQL.PARSE(c, p_sql, DBMS_SQL.NATIVE);
      d := DBMS_SQL.EXECUTE(c);
      DBMS_SQL.DESCRIBE_COLUMNS(c, col_cnt, rec_tab);
      FOR j in 1..col_cnt
      LOOP
        CASE rec_tab(j).col_type
          WHEN 1 THEN DBMS_SQL.DEFINE_COLUMN(c,j,v_v_val,2000);
          WHEN 2 THEN DBMS_SQL.DEFINE_COLUMN(c,j,v_n_val);
          WHEN 12 THEN DBMS_SQL.DEFINE_COLUMN(c,j,v_d_val);
        ELSE
          DBMS_SQL.DEFINE_COLUMN(c,j,v_v_val,2000);
        END CASE;
      END LOOP;
      -- This part outputs the HEADER
      v_fh := UTL_FILE.FOPEN(upper(p_dir),p_header_file,'w',32767);
      FOR j in 1..col_cnt
      LOOP
        v_finaltxt := ltrim(v_finaltxt||','||lower(rec_tab(j).col_name),',');
      END LOOP;
      --  DBMS_OUTPUT.PUT_LINE(v_finaltxt);
      UTL_FILE.PUT_LINE(v_fh, v_finaltxt);
      IF NOT v_samefile THEN
        UTL_FILE.FCLOSE(v_fh);
      END IF;
      -- This part outputs the DATA
      IF NOT v_samefile THEN
        v_fh := UTL_FILE.FOPEN(upper(p_dir),p_data_file,'w',32767);
      END IF;
      LOOP
        v_ret := DBMS_SQL.FETCH_ROWS(c);
        EXIT WHEN v_ret = 0;
        v_finaltxt := NULL;
        FOR j in 1..col_cnt
        LOOP
          CASE rec_tab(j).col_type
            WHEN 1 THEN DBMS_SQL.COLUMN_VALUE(c,j,v_v_val);
                        v_finaltxt := ltrim(v_finaltxt||',"'||v_v_val||'"',',');
            WHEN 2 THEN DBMS_SQL.COLUMN_VALUE(c,j,v_n_val);
                        v_finaltxt := ltrim(v_finaltxt||','||v_n_val,',');
            WHEN 12 THEN DBMS_SQL.COLUMN_VALUE(c,j,v_d_val);
                        v_finaltxt := ltrim(v_finaltxt||','||to_char(v_d_val,'DD/MM/YYYY HH24:MI:SS'),',');
          ELSE
            v_finaltxt := ltrim(v_finaltxt||',"'||v_v_val||'"',',');
          END CASE;
        END LOOP;
      --  DBMS_OUTPUT.PUT_LINE(v_finaltxt);
        UTL_FILE.PUT_LINE(v_fh, v_finaltxt);
      END LOOP;
      UTL_FILE.FCLOSE(v_fh);
      DBMS_SQL.CLOSE_CURSOR(c);
    END;This allows for the header row and the data to be written to seperate files if required.
    e.g.
    SQL> exec run_query('select * from emp','TEST_DIR','output.txt');
    PL/SQL procedure successfully completed.Output.txt file contains:
    empno,ename,job,mgr,hiredate,sal,comm,deptno
    7369,"SMITH","CLERK",7902,17/12/1980 00:00:00,800,,20
    7499,"ALLEN","SALESMAN",7698,20/02/1981 00:00:00,1600,300,30
    7521,"WARD","SALESMAN",7698,22/02/1981 00:00:00,1250,500,30
    7566,"JONES","MANAGER",7839,02/04/1981 00:00:00,2975,,20
    7654,"MARTIN","SALESMAN",7698,28/09/1981 00:00:00,1250,1400,30
    7698,"BLAKE","MANAGER",7839,01/05/1981 00:00:00,2850,,30
    7782,"CLARK","MANAGER",7839,09/06/1981 00:00:00,2450,,10
    7788,"SCOTT","ANALYST",7566,19/04/1987 00:00:00,3000,,20
    7839,"KING","PRESIDENT",,17/11/1981 00:00:00,5000,,10
    7844,"TURNER","SALESMAN",7698,08/09/1981 00:00:00,1500,0,30
    7876,"ADAMS","CLERK",7788,23/05/1987 00:00:00,1100,,20
    7900,"JAMES","CLERK",7698,03/12/1981 00:00:00,950,,30
    7902,"FORD","ANALYST",7566,03/12/1981 00:00:00,3000,,20
    7934,"MILLER","CLERK",7782,23/01/1982 00:00:00,1300,,10The procedure allows for the header and data to go to seperate files if required. Just specifying the "header" filename will put the header and data in the one file.
    Adapt to output different datatypes and styles are required.

  • Replace xml code when used as a xmltype converted from clob.

    I am still new at all this so I will try to make sense.
    I have the "sys_xmlgen" where it takes my clob_content which is a clob and converts it into the v_xml which is xmltype.
    ****code to show change of clob to xmltype.
    SELECT sys_xmlgen(clob_content) INTO v_xml FROM xmltest2 WHERE item_id = v_item_id;
    update xmltest2 set xml = v_xml where item_id = v_item_id;
    **end of code
    When you use sys_xmlgen it changes the xml into this example:
    <?xml version="1.0"?>
    <CLOB_CONTENT>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
    &lt;!DOCTYPE metadata SYSTEM &quot;csdgm2.dtd&quot;&gt;
    &lt;?xml-stylesheet href=&quot;FGDC_V2.xsl&quot; type=&quot;text/xsl&quot;?&gt;
    &lt;metadata&gt;
    &lt;idinfo&gt;
    </CLOB_CONTENT>
    I need to remove the <CLOB_CONTENT> tag and change some things such as the "&lt;" to a "<" and so on. But when I do a replace statement
    select replace(clob_content, '&lt;', '<') into v_xml from xmltest2;
    It says I can not do a clob into number.
    Just to make myself clear, the clob_content is clob and v_xml is xmltype. SOOO I think that is where my problem is. Does anyone know the syntax to replace the code in my xml so that it looks like the original clob xml??
    Any help would be appreciated.

    I am still new at all this so I will try to make sense.
    I have the "sys_xmlgen" where it takes my clob_content which is a clob and converts it into the v_xml which is xmltype.
    ****code to show change of clob to xmltype.
    SELECT sys_xmlgen(clob_content) INTO v_xml FROM xmltest2 WHERE item_id = v_item_id;
    update xmltest2 set xml = v_xml where item_id = v_item_id;
    **end of code
    When you use sys_xmlgen it changes the xml into this example:
    ?xml version="1.0"?>
    <CLOB_CONTENT>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
    &lt;!DOCTYPE metadata SYSTEM &quot;csdgm2.dtd&quot;&gt;
    &lt;?xml-stylesheet href=&quot;FGDC_V2.xsl&quot; type=&quot;text/xsl&quot;?&gt;
    &lt;metadata&gt;
    &lt;idinfo&gt;
    &lt;citation&gt;
    &lt;citeinfo&gt;</CLOB_CONTENT>
    I need to remove the <CLOB_CONTENT> tag and change some things such as the "<" to a "<" and so on. But when I do a replace statement
    select replace(clob_content, '<', '<') into v_xml from xmltest2;
    It says I can not do a clob into number.
    Just to make myself clear, the clob_content is clob and v_xml is xmltype. SOOO I think that is where my problem is. Does anyone know the syntax to replace the code in my xml so that it looks like the original clob xml??
    Any help would be appreciated.

  • Converting PDF CLOBS to text or HTML

    I would like to run though all the PDFs (stored as CLOBS) in a database table and copy them to a text or HTML CLOB. Doing this beforehand will should allow me to rapidly index and snippet-ify these fields duirng queries.
    How exactly can I use the built-in facilities in Oracle Text to do this?
    Roger Ford has had some great input on my snippet performance problems and had this to say:
    "The key is to pre-convert before indexing. You can do that with a pl/sql procedure that uses ctxdoc.policy_filter or ctxdoc.ifilter."
    The Reference Manual, page B-2, has this to say:
    "This technology [AUTO_FILTER] also enables you to convert documents to HTML for document presentation with the CTX_DOC package."

    I apologize for posting prematurely....
    I should be able to use CTX_DOC.FILTER as Roger suggested.
    I think I can just loop through every PDF in the table and dump each converted PDF to the result table. I will set the query id to the key from the PDF table thus allowing me to get at the metadata.

  • Convert UTF8 clob charset

    Thanks for your advice.
    Actually NLS support may not apply to my case because I need to specify different charset when I need the CLOB UTF8 data from my database. Maybe this time I need Big5, next time I need GBK. The thing is, I know there is a function to convert varchar2 from UTF8 to different charset.
    Question is: can I convert CLOB as well?
    Thanks for any advice!

    There are no SQL convert functions to handle CLOB conversion in Oracle8i . In 9i all SQL functions for VARCHAR2 will work with CLOBs too.
    Why do you need to have do the conversion explicitly, if you set your client NLS_LANG character set to ZHT16BIG5 or ZHT16GBK , they these CLOBs should be converted to the client Character set automatically.

  • Converting a Clob to a String

    I've had a search around for ways to do this on the forum, but most of the posts only deal with the conversion of a String to a Clob.
    Is this conversion possible and does anybody have any pointers or know how to perform it?
    Thanks for your time,
    Tom.

    what's wrong with doing this:
    Clob c = rs.getClob("clobcol");
    String cValue = c.getSubString(0, c.length());

  • Convert CLOB to VARCHAR2 in Oracle 8i

    Hello all,
    I would like to convert a CLOB column from a table to a VARCHAR2.
    How can I do this?
    I would like that this works in Oracle 8i, 9i and 10g.
    Thank you very much.

    Hello APC,
    I found the problem.
    I have Oracle Reports 6i + patch 17.
    The problem was that I couldn't select a CLOB column and store his value in a CLOB variable.
    I needed to do the conversion DBMS_LOB.SUBSTR in the select statement and store his value in a VARCHAR2 variable.
    Thank you

  • Convert clob to xmltype

    Hi
    How to convert data CLOB datatype to XMLTYPE Datatype
    Ex: field col1 has clob data type
    any possible to convert col1 in target table col1 xmltype datatype
    Regards,
    Venkat

    Hi Venkat,
    Please try the following:
    CREATE TABLE CLOBTABLE (
    CLOBCOL1 CLOB
    INSERT INTO clobtable VALUES ('<?xml version="1.0"?> <EMP> <EMPNO>2</EMPNO> <ENAME>Sumeet</ENAME> </EMP>');
    CREATE OR REPLACE FUNCTION to_xmltype (clobcol CLOB) RETURN XMLTYPE AS
    BEGIN
    RETURN XMLType(clobcol);
    END;
    SELECT to_xmltype(clobcol) FROM clobtab;

  • Convert CLOB to LONG

    I have an app that has a CLOB column in a table. The reporting software, which is separate from the application, cannot read CLOBs. So the solution that was revealed to me was to setup a trigger to copy any data going into the CLOB table to another table where the column is a LONG.
    Of course, no DBA in their right mind would be happy with this. So, I'm trying to set about creating a view that will convert the CLOB to a LONG, so as to relieve my poor SAN from all the I/O. There is no TO_LONG function, nor can I find anywhere how to do this.
    Anyone feel like taking a stab at this?

    Tom,
    My guess is you might have to use dbms_lob.substr subprogram. Anyway, LONG datatype has a limit of 2gb while clob or blob can be bigger (theoritically upto 8TB ). So, you have to decide if you wanna truncate your data and store only the first 2gb. Also, just for information purposes, this is what Oracle says in documentation.
    ----------ORACLE DOCUMENTATION------
    Note:
    Do not create tables with LONG columns. Use LOB columns (CLOB, NCLOB) instead. LONG columns are supported only for backward compatibility.
    Oracle also recommends that you convert existing LONG columns to LOB columns. LOB columns are subject to far fewer restrictions than LONG columns. Further, LOB functionality is enhanced in every release, whereas LONG functionality has been static for several releases.
    HTH,
    Rahul.

  • Convert CLOB to a VARCHAR2

    Hello all,
    I would like to convert a CLOB column from a table to a VARCHAR2.
    How can I do this? I would like that this works in Oracle 8i, 9i and 10g.
    If I try with dbms_lob.substr I don't know why the application crash.
    It says: 'RWRBE60.exe has generated errors and it will be closed for Windows'
    But if I don't use this command it works correctly.
    Any suggestion?
    Thank you very much.

    I found the problem.
    I have Oracle Reports 6i + patch 17.
    The problem was that I couldn't select a CLOB column and store his value in a CLOB variable.
    I needed to do the conversion DBMS_LOB.SUBSTR in the select statement and store his value in a VARCHAR2 variable.
    Thank you

  • How to convert CLOB to BLOB with SQL Developer migration wizard?

    Hi,
    According to our requirement, we need to only migrate data from SQL Server 2008 to Oracle 11. I use the SQL Developer 3.0.04 migration wizard to do it.
    I do migration from SQL Server (database name: SCDS41P2) to Oracle (User name: HCDS41P2).
    My migration steps are as below: (I need to modify the target schema, so I add the steps 2) and step 3) )
    1) Do migration by SQL Developer migration wizard;
    2) Remove the Converted Database Objects node from migration project;
    3) Re-do convert by SQL Developer migration wizard (contains changing the target schema);
    When do step 1), the DBO_SCDS41P2 user is created automatically. CLOBTOBLOB_SQLDEVELOPER procedure is also created in this user.
    I continued to run step 2) and step 3) with online mode. And find the table data which contains BLOB column can be moved into the target table. But from the Logging Page, I can't see the other detailed error info, so that I can't check which tables don't move data successfully.
    Could you please tell me where the detail log file (e.g. contains every table's migration status) is if I use the online mode?
    Additional, If I use offline mode to do step 3), I found the CLOB data can't be converted into BLOB automatically. Because in the load script (that is oracle_ctl.bat), only copy the source data to the CLOB column. After copy, it don't deal with the converting from CLOB to BLOB.
    So could you please tell me how to convert CLOB to BLOB with offline mode?
    Thanks so much.

    Hi,
    For your first question about logging - after the migration there will be an entry in the right hand panel for the migration project. If you open this there are various fields that give information about the status of each part of the migration. Does this give you the information you need ?
    For the second problem about offline moving blob data have a look at the SQL*Developer documentation -
    Oracle® SQL Developer User’s Guide Release 3.0
    in the section -
    2.2.8.1.4 Populating the Destination Database Using the Data Files
    which describes the problem and how to get round it.
    Regards,
    Mike
    Edited by: mkirtley on Aug 12, 2011 10:49 AM

  • Convert a column from CLOB to BLOB

    hi,
    I recently had a requirement to save a XML file in Database. Presently the column is of datatype CLOB. But since CLOB has asize limitation, when iam saving a file of larger size it is throwing exception.
    So iam planning to convert this CLOB column to BLOB.
    Is this a right approach??

    798116 wrote:
    hi,
    I recently had a requirement to save a XML file in Database. Presently the column is of datatype CLOB. But since CLOB has asize limitation, when iam saving a file of larger size it is throwing exception.
    So iam planning to convert this CLOB column to BLOB.
    Is this a right approach??I'd be very concerned if you're creating XML that exceeds the limits of a CLOB column. That would smell of bad design somewhere.
    Character based data such as XML, would be better placed in a CLOB than a BLOB, as a BLOB is primarily for storing binary data, not character data.
    The best however would be to store your XML in an XMLTYPE datatype, which is based on CLOB, as that offers XML methods around it.

Maybe you are looking for

  • How can i closed production verion wise in c223

    Welcome, ANILKUMAR BEHERA    Your Control Panel  Your Reward Points  Your Questions  Expert Forums » ABAP Development » ABAP Objects Thread: how can i get production version value(verid) for luck through bdc. Your question is not answered. Mark as an

  • Can't update because "don't have permission to acess..." on new Mac

    I am trying to download the newest version of Firefox. Running Mac 10.6.6 Older version of Firefox exists. When I try to add the newer download I get ''The operation can't be completed because you don't have permission to access some of the items''.

  • PARAMETER ID's for Purchase Order Release

    Hi , Can you give the SETPA/GETPA PARAMETER ID's for Purchase order release. Regards, Chow.

  • How to setup session scope in servlet?

    bean tag can be used in jsp to setup its scop, like <jsp:usebean id="abc" class="def" scope="session"/> but is it possible to setup session scope to divide two users in order not to use the same bean? becuase i encounter a problem that, when using be

  • Buy Back Purchase from Sales order

    Hi, I have this scenario and need advise how should I go ahead. end customer buys some material (Jewelry) from a particular sales unit. A standard sales order cycle is run for this. after sometime, the same customer comes and sells the same material