NCLOB 4000 chars

I am using Oracle Oledb provider to connet to a 9i database using ADO. One of the tables has a field of type NCLOB. When I try to write to the field data >4000 chars I get an error
ORA-24806 . The description of the error says
ORA-24806 LOB form mismatch
Cause: When reading from or writing into LOBs, the character set form of the user buffer should be same as that of the LOB.
Action: Make sure that the buffer you are using to read or write has the same form as that of the LOB.
But since I don't get this error for strings < 4000 chars, I assume all my settings ( char set etc) are Ok. This also should be the case since I am running the client on the same machine as server and the same home.
It also works if I change the field type to CLOB instead of NCLOB.
Has anybody used NCLOBS > 4000 chars with ADO ?

The original program is in C++. But here is a small VB test program I wrote to demonstrate the problem.
It works when I try to insert small strings but not large ones
The evnironment is
windows 2000 SP2
Oralce 9i (9.0.1.1)
Oracle oledb provider 9i
Ado version 2.5
Option Explicit
Dim Cn As ADODB.Connection
Dim CPw1 As ADODB.Command
Dim CPw2 As ADODB.Command
Dim Rs As ADODB.Recordset
Dim Conn As String
Dim QSQL As String
Private Sub cmdSend_Click()
Dim strl As String
Dim i As Integer
Set Rs = New ADODB.Recordset
Rs.CursorType = adOpenKeyset
Rs.LockType = adLockOptimistic
strl = "t"
For i = 1 To 4002
strl = strl + "t"
Next
Rs.Open "test1", Cn, , , adCmdTable
Rs.AddNew
Rs!ncol = strl
Rs.Update
Rs.Close
End Sub
Private Sub cmdcheck_Click()
Set Rs = New ADODB.Recordset
Rs.CursorType = adOpenForwardOnly
Rs.LockType = adLockReadOnly
' Set CPw2 = New ADODB.Command
With CPw2
.ActiveConnection = Cn
.CommandText = "Select * from test1"
.CommandType = adCmdText
.Execute
End With
Set Rs = CPw2.Execute
Rs.MoveFirst
MsgBox "Return value is " + Rs!ncol + " length is " + Len(Rs!ncol)
Rs.Close
End Sub
Private Sub Form_Load()
'You will need to replace the "*" with the appropriate values.
Conn = "Provider=OraOledb.Oracle;User ID=*;Data Source=*;password=*;Ndatatye=True"
Set Cn = New ADODB.Connection
With Cn
.ConnectionString = Conn
.CursorLocation = adUseClient
.Open
End With
QSQL = "Create table test1 (ncol nclob)"
Set CPw1 = New ADODB.Command
Set CPw2 = New ADODB.Command
With CPw1
.ActiveConnection = Cn
.CommandText = QSQL
.CommandType = adCmdText
' .Execute
' On Error Resume Next
End With
End Sub
Private Sub Form_Unload(Cancel As Integer)
Cn.Close
Set Cn = Nothing
Set CPw1 = Nothing
Set CPw2 = Nothing
End Sub
--------------------------

Similar Messages

  • ORA-01704:String literal too long with update of more than 4000 chars

    Hi,
    I want to update a table column in Oracle Database(version 10) with more than 4000 chars.
    The datatype of the table column is NCLOB.
    I want to achieve this with one single line of update query as below,
    update mytable set MY_DESCRIPTION = 'longdesc' where ID = '111' ;
    But there's a problem, if the 'longdesc' is more than 4000 chars, it gives the error , "ORA-01704:String literal too long"
    How can I achieve this in sql developer ?
    I dont want to do this using stored procedures, I want to do this update using only sql statement.
    Please help.
    thanks,
    sudhakar

    Hello Sudhakar,
    I am afraid, this will never work by SQL.
    Just because an SQL-Statement must not contain a string literal over 4,000 characters (or did that change lately?).
    Maybe you can bypass the limit with PL/SQL ... but you will certainly run into the 32K limit sooner or later
    regards
    Peter

  • Literal too long when 4000 chars

    I get an error that literal too long when trying to insert a record to a clob or varchar2 field when the string is over 4000 chars.
    How to resolve this problem. I'd like to be able to treat this insert the same as all other inserts rather than make a special case out of it so no special processing would be needed.
    The application reads from an html form textarea and inserts the value of the text area along with the other fields of the form to a database.

    Hi,
    The maximum length of VARCHAR2 data is 4000 bytes.
    You can't store more than 4000 bytes in varchar2 column.
    CLOB can store upto 4GB of data.
    You can check the LOB Datatype sample for details on how to insert data into CLOB.
    The sample is located at
    [url http://otn.oracle.com/sample_code/tech/java/sqlj_jdbc/files/advanced/LOBSample/LOBSample.java.html] LOB Datatype source
    Check the loadSamples method which shows how to insert data into CLOB using empty_clob() method.
    Hope this helps.
    For furthur clarifications please post your question at
    [url http://forums.oracle.com/forums/forum.jsp?forum=75]SQL and PL/SQL Forum
    Regards,
    Anupama
    [url http://otn.oracle.com/sample_code/content.html]OTN Sample Code[url ]

  • Literal too long when inserting 4000 chars to long or clob

    How to avoid getting the 'literal too long' error when inserting a string >4000 chars to a long or clob field?

    A string literal can only be 4000 characters. To insert into a LOB, you need to use the dbms_lob package.
    Justin

  • Using sqlldr when source data column is 4000 chars

    I'm trying to load some data using sqlldr.
    The table looks like this:
    col1 number(10) primary key
    col2 varchar2(100)
    col3 varchar2(4000)
    col4 varchar2(10)
    col5 varchar2(1)
    ... and some more columns ...
    For current purposes, I only need to load columns col1 through col3. The other columns will be NULL.
    The source text data looks like this (tab-delimited) ...
    col1-text<<<TAB>>>col2-text<<<TAB>>>col3-text
    more-col3-text
    more-col3-text
    more-col3-text
    more-col3-text
    more-col3-text
    END-OF-RECORD
    There's nothing special about the source data for col1 and col2.
    But the data for col3 is (usually) much longer than 4000 chars, so I just need to truncate it to fit varchar2(4000), right?
    The control file looks like this ...
    LOAD DATA
    INFILE 'load.dat' "str 'END-OF-RECORD'"
    TRUNCATE
    INTO TABLE my_table
    FIELDS TERMINATED BY "\t"
    OPTIONALLY ENCLOSED BY '"'
    TRAILING NULLCOLS
    col1 "trim(:col1)",
    col2 "trim(:col2)",
    col3 char(10000) "substr(:col3,1,4000)"
    I made the column 3 specification char(10000) to allow sqlldr to read text longer than 4000 chars.
    And the subsequent directive is meant to truncate it to 4000 chars (to fit in the table column).
    But I get this error ...
    Record 1: Rejected - Error on table COL3.
    ORA-01461: can bind a LONG value only for insert into a LONG column
    The only solution I found was ugly.
    I changed the control file to this ...
    col3 char(4000) "substr(:col3,1,4000)"
    And then I hand-edited (truncated) the source data for column 3 to be shorter than 4000 chars.
    Painful and tedious!
    Is there a way around this difficulty?
    Note: I cannot use a CLOB for col3. There's no option to change the app, so col3 must remain varchar2(4000).

    You can load the data into a staging table with a clob column, then insert into your target table using substr, as demonstated below. I have truncated the data display to save space.
    -- load.dat:
    1     col2-text     col3-text
    more-col3-text
    more-col3-text
    more-col3-text
    more-col3-text
    more-col3-text
    XYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
    YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
    END-OF-RECORD-- test.ctl:
    LOAD DATA
    INFILE 'load.dat' "str 'END-OF-RECORD'"
    TRUNCATE
    INTO TABLE staging
    FIELDS TERMINATED BY X'09'
    OPTIONALLY ENCLOSED BY '"'
    TRAILING NULLCOLS
    col1 "trim(:col1)",
    col2 "trim(:col2)",
    col3 char(10000)
    SCOTT@orcl_11gR2> create table staging
      2    (col1 varchar2(10),
      3       col2 varchar2(100),
      4       col3 clob)
      5  /
    Table created.
    SCOTT@orcl_11gR2> host sqlldr scott/tiger control=test.ctl log=test.log
    SCOTT@orcl_11gR2> select * from staging
      2  /
    COL1
    COL2
    COL3
    1
    col2-text
    col3-text
    more-col3-text
    more-col3-text
    more-col3-text
    more-col3-text
    more-col3-text
    XYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
    YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
    1 row selected.
    SCOTT@orcl_11gR2> create table my_table
      2    (col1 varchar2(10) primary key,
      3       col2 varchar2(100),
      4       col3 varchar2(4000),
      5       col4 varchar2(10),
      6       col5 varchar2(1))
      7  /
    Table created.
    SCOTT@orcl_11gR2> insert into my_table (col1, col2, col3)
      2  select col1, col2, substr (col3, 1, 4000) from staging
      3  /
    1 row created.
    SCOTT@orcl_11gR2> select * from my_table
      2  /
    COL1
    COL2
    COL3
    COL4       C
    1
    col2-text
    col3-text
    more-col3-text
    more-col3-text
    more-col3-text
    more-col3-text
    more-col3-text
    XYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
    YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
    1 row selected.

  • Need to insert into a table 1 of the fields (CLOB)with more than 4000 chars

    Dear Gurus,
    As far I understood, I need to write a function which get as parameter the large text and using bind variables I can return a CLOB containing more than 4000 chars. I tried all I can do and feel I want to died. Please, can I get specified help in this issue?
    I APPRICIATE YOUR HELP, MARCELO.

    *** Duplicate Post ***
    Please, Marcelo, use the forum properly. Pick a single group and post there.
    Thank you.

  • How To Increase the Size of Memo Fields 4000 Char in WebCenter 11g?

    How To Increase the Size of Memo Fields greater than 4000 Char in WebCenter Content (UCM) 11g?
    I was able to increase the size of Memo field from 2000 Char to 4000 by setting parameter value MEMOFIELDSIZE=4000 . But the requirement is to increase the size more than 4000 around 7000 char but Database(Oracle 11G) is not supporting more than 4000 char.
    Is there any other way to increase the size of Memo field?
    Thanks in Advance!!
    Regards
    Ram

    Hello All,
    Thanks for your responses.
    Let me explain the scenario again in detail:
    1. we have three meta-data fileds xProductCategory,xProductFamily and xProducts
    2. These fields are related with DCL feature and corresponding values are being stored in corresponding custom Views
    3. xProducFamily is dependent of xProductCategory and xProduct is dependent on xProductFamily
    4. currently, there are around 250 Product values and average name of Product can be of 25 Char, so if we are selecting all product values for some Contents then Product Values are being stored in DocMeta table as comma separated values with one space, so total characters are being very high than 4K Char.
    5. Currently view that is storing the Product values, stores "Name" column instead of ID(like 1,2,3....)
    6. And our Content Server is integrated with Oracle WebSenter Portal, where logic has written to retrieve the contents based on "Product Name" instead of "Product ID" and already we are in UAT phase.Currently we are not in situation to revert the changes from Product Name to Product ID.
    7. Also if we are storing the values on the basis of Product ID, then again the issue may arise in Future, if the number of Products increased.
    Hoping the issue explanation is clear now and waiting for some possible solution for increasing the length of memo field.
    Thanks in Advance !!
    Regards
    Ram

  • Oracle ADF: ORA-01460 4000 chars problem

    Hello,
    please excuse my bad english. I hope you will understand what I mean.
    I hope I'am right here with my Problem:
    I hava a web application written with Oracle ADF in jDeveloper. A View-Object contains the SQL-Statemant to search with a bind variable (Type: String) and uses Oracle Text.
    WHERE contains(Index, :mySearchString, 1) > 0
    Java generates the String (Type: String) that might have a length of 12 chars, 1234 chars or maybe something about 4000 chars.
    If the String is below 4000 chars, there is no problem.
    But if he exceeds the 4000 chars I get a exception with the message "ORA-01460:     unimplemented or unreasonable conversion requested".
    How to execute this statement with a String longer than 4000 chars?
    Could someone help me?
    I am at my wit's end.
    Thank you!
    DB: Oracle 10g Enterprise Edition (10.1.0.4.2)
    JDBC Version: 10.1.0.5
    Greetings
    One

    Thank you! Good to know that it isn't impossible to enhance this.
    I wrote a sql function:
    create or replace function mysearch(p_arg varchar2)return sys_refcursor is
    l_resultset sys_refcursor;
    begin
    open l_resultset for select ... from ... where contains(attribut, p_arg);
    return l_resultset;
    end;
    and create a View-Object. This View-Object has the follwing SQL-Statement:
    SELECT mysearch(:p_arg) AS MY_SEARCH FROM DUAL
    but no attributes! And the Object which I get has only 1 row. It should contains about 9000.
    And I get anyway the message "ORA-01460:     unimplemented or unreasonable conversion requested".
    In a PL/SQL context varchar2 can be 32KB!? Or not?
    Is this a ADF Problem? :-( (I hope so! If not: SORRY)

  • Using in clause having more than 4000 chars in a VO.

    Hi Experts,
    JDEV version 11.1.1.5.0
    I have a problem passing a bind variable having length of more than 4000 chars in ADF for use in a IN clause.
    For e.g the query is
    select user_id from employees where user_name in (
    SELECT     column_value
    FROM TABLE (CAST (in_list_char (nvl( 'apple,oranges',user_name) ) AS ChartableType)) A)
    in_list_char is function returning an array of type ChartableType.
    ChartableType is a type
    create or replace TYPE    "CHARTABLETYPE" as table of varchar2(4000);
    It works if the bind value that I pass is of length less than 4000 chars.
    Anything higher it breaks and throws ORA-01460: unimplemented or unreasonable conversion requested.
    Have even tried changing the ChartableType  varchar2 length to 32767..but no luck.
    Any help would be appreciated.

    Hi Timo,
    I am using a in clause as the value that I pass as a bind variable is not stored anywhere in the db for me to have a join or a subselect.
    It's a comma separated string (comma separated user names) for which I would need to check against the employee table to fetch the user_id's .
    An alternative would be to store those values in temp table and have a join.
    But then I was trying to find an alternative , either having a OR clause or UNION dynamically appended to my VO
    Any help is much appreciated.

  • PL/SQL process returning message with more than 4000 chars

    In our apex application we are using a pl/sql process returning a message.
    This message should be shown to the user.
    Our problem is now, that the application items in APEX seem to be limited to 4000 chars and the message can be longer.
    We are also not able to use a collection, because we can't print the content of a collection in the "Process Success Message".
    Here is the content of a page process which is running on page load after header:
    Name - Type:     PL/SQL anonymous block
    Source - Process: :AI_TEST := p0001_pkg.get_text;
    Messages - Process Success Message: &AI_TEST.
    Image from process [https://twitter.com/OliverLemm/status/324058809138032640/photo/1/large]
    If the page is called the result is this error message:
    ORA-06502: PL/SQL: numeric or value error: character string buffer too small
    Technical Info (only visible for developers)
    is_internal_error: false
    ora_sqlcode: -6502
    ora_sqlerrm: ORA-06502: PL/SQL: numeric or value error: character string buffer too small
    component.type: APEX_APPLICATION_PAGE_PROCESS
    component.id: 16433072916569237418
    component.name: get_text
    error_backtrace:
    ORA-06512: at "APEX_040200.WWV_FLOW_PROCESS", line 100
    ORA-06512: at "APEX_040200.WWV_FLOW_PROCESS", line 141
    Edited by: Oliver L on 16.04.2013 09:17

    no an item like P0_TEST on page 0 / global page also does not help.
    But the error is not the application item / page item it's the problem that the "Process Success Message" can't handle more than 4000 chars.
    I tried to paste a string into the process success message, but the error "Error processing row. ORA-01461: can bind a LONG value only for insert into a LONG column" occured even when i filled the textarea and saved the process.
    So there's no problem with the application item or page item.
    Edited by: Oliver L on 16.04.2013 10:00

  • Difference between varchar2(4000 byte) & varchar2(4000 char

    Hi,
    My existing database NLS parameters as follows
    CHARACTER SET US7ASCII
    NATIONAL CHARACTER SET AL16UTF16
    created a test database to support globalization, I changed as follows
    CHARACTER SET UTF8
    NATIONAL CHARACTER SET UTF8
    some of the table column datatypes are varchar2(4000)
    I would like to know what is difference between VARCHAR2(4000 BYTE) and VARCHAR2(4000 CHAR).
    Thanks

    Indeed, VARCHAR2(x BYTE) means that the column will hold as much characters as will fit into x bytes. Depending on the character set and particular characters this may be x or less characters.
    For example, a VARCHAR2(20 BYTE) column in an AL32UTF8 database can hold 20 characters from the ASCII range, 10 Latin letters with umlaut, 10 Cyryllic, 10 Hebrew, or 10 Arabic letters (2 bytes per character), or 6 Chinese, Japanese, Korean, or Devanagari (Indic) characters. Or a mixture of these characters of any total length up to 20 bytes.
    VARCHAR2(x CHAR) means that the column will hold x characters but not more than can fit into 4000 bytes. Internally, Oracle will set the byte length of the column (DBA_TAB_COLUMNS.DATA_LENGTH) to MIN(x * mchw, 4000), where mchw is the maximum byte width of a character in the database character set. This is 1 for US7ASCII or WE8MSWIN1252, 2 for JA16SJIS, 3 for UTF8, and 4 for AL32UTF8.
    For example, a VARCHAR2(3000 CHAR) column in an AL32UTF8 database will be internally defined as having the width of 4000 bytes. It will hold up to 3000 characters from the ASCII range (the character limit), but only 1333 Chinese characters (the byte limit, 1333 * 3 bytes = 3999 bytes). A VARCHAR2(100 CHAR) column in an AL32UTF8 database will be internally defined as having the width of 400 bytes. It will hold up to any 100 Unicode characters.
    The above implies that the CHAR limit works optimally if it is lower than 4000/mchw. With such restriction, the CHAR limit guarantees that the defined number of characters will fit into the column. Because the widest character in any Oracle character set has 4 bytes, if x <= 1000, VARCHAR2(x CHAR) is guaranteed to hold up to x characters in any database character set.
    The declaration VARCHAR2(x):
    - for objects defined in SYS schema means VARCHAR2(x BYTE),
    - for objects defined in other schemas it means VARCHAR2(x BYTE) or VARCHAR2(x CHAR), depending on the value of the NLS_LENGTH_SEMANTICS parameter of the session using the declaration (see the NLS_SESSION_PARAMETERS view).
    After an object is defined, its BYTE vs CHAR semantics is stored in the data dictionary and it does not depend on the NLS_LENGTH_SEMANTICS any longer. Even Export/Import will not change this.
    Character length semantics rules are valid for table columns and for PL/SQL variables.
    -- Sergiusz

  • Report region columns constrained to 4000 chars?   Hitting LOV problems.

    Hi all,
    I've hit a problem that I'm hoping will have a simple answer.
    Quick overview of issue:
    APEX 3.01 application running against a 10gR2 DB.
    We have an LOV defined that works just fine on various forms but in report regions where the LOV is available via a drop down column value in the report region HTML table we are hitting the error:
    report error:
    ORA-06502: PL/SQL: numeric or value error: character string buffer too small
    Some judicious debugging reveals that this seems to be because we are trying to load in more than 4000 characters into the LOV drop down in the report regions HTML table column (it's a moderately large LOV)..
    This suggests that the default column type in a report region HTML table is VARCHAR2 and thus that there is a default 4000 character limit on any such column values, would that be a fair assumption? I know that the actual report row size always used to be limited to a total of 32k but this limit is a new one to me.
    If there is such a limit, does anyone have any suggestions on how to work-around it i.e. is it possible to redefine report region column values to be other datatypes/dimensions or should we be looking at using an alternative such as a pop-up instead?
    Many thanks.

    Hi Scott,
    Okay, what we have is a fairly simple Dynamic Page with two report regions (both standard type of 'SQL Query'). The second report region is the one causing us the headache. The column headings are set to 'Custom' but apart from that everything seems as it should be.
    The following query populates an HTML table being generated in the second report region (problem line in bold):
    SELECT apex_item.hidden(7,task_id)||
    apex_item.select_list_from_lov(1, estimate_type, 'TASKSMK', NULL, 'YES', 0,'** Select Task **',NULL, NULL) as "Task Type",
    '<img src="/i/themes/aqa/required.gif" alt="Required Field" tabindex="999" />'||apex_item.text(2, description,30,4000,'required="true"') as "Work Item(s)",
    dbms_lob.substr(apex_item.select_list_from_lov_xl(3, username, 'PEOPLE', NULL, 'YES', 0, '** Select Resource **', NULL, NULL),4000) as "Resource",
    apex_item.text(4, days,5,5) as "Days",
    apex_item.text(5, start_date,11,11) as "target Start (dd-mon-yyyy)",
    apex_item.text(6, NVL(end_date,ADD_MONTHS(start_date,1)),11,11) as "Target End (DD-MON-YYYY)",
    rownum link
    FROM
    (SELECT t.task_id,
    e.estimate_type,
    t.description,
    t.username ,
    t.days,
    t.start_date,
    t.end_date
    FROM estimate e, task t
    WHERE e.project_project_id = TO_NUMBER(:F172_PROJECT_ID)
    AND e.active_yn = 'Y'
    -- and t.days > 0
    AND t.ese_id = e.id
    --AND e.creation_date = (SELECT MAX(ei.creation_date) FROM estimate ei WHERE ei.project_project_id = e.project_project_id AND ei.active_yn = 'N')
    UNION ALL
    SELECT 0 task_id,
    0 estimate_type,
    NULL description,
    '0' username,
    NULL days,
    sysdate start_date,
    ADD_MONTHS(sysdate,1) end_date
    FROM dual
    CONNECT BY LEVEL < = TO_NUMBER(:P19_ROWS_CNT))
    All appears well until the number of values being returned in the second LOV (retrieved by the apex_item.select_list_from_lov_xl) exceeds 4000 characters and then we get the error first detailed. The substr around the function isn't usually present, it was added during the debugging, if I allow one more character than the 4000 or remove the substr completely then I get the error again. If the same function is used to retrieve the LOV on a normal Dynamic Form field then all is well, it only seems to have a problem when present in the HTML table being generated.
    Are we doing something silly here?
    Thanks.
    Message was edited by:
    jac

  • FUNCTION returning more than 4000 characters

    I am calling the below function from a view, and function is failing because it returning more than 4000chars.
    An I know when the return type is varchar2 it cannot return more than 4000 chars.
    It's working fine when I use CLOB for the return type. Is there any other better option to handle this err.
    CREATE OR REPLACE FUNCTION FN_CONCATENATE_COMMENTS (
    P_CASENO IN PATIENT_DET.CASE_NO%TYPE,
    P_POLICY IN PATIENT_DET.POLICYNO%TYPE
    RETURN VARCHAR2
    AS
    V_TEMP VARCHAR2(300);
    V_COMMENT VARCHAR2(30000);
    CURSOR FETCHCOMMENT IS
    SELECT TO_CHAR (C.CREATED_TS,'mm/dd/yyyy hh:mi:ss AM - ')|| C.DOC_COMMENT_DESC DOC_COMMENT_DESC
    FROM TREATEMENT_DET C
    WHERE C.CASE_CD = P_CASENO AND C.POLICY_N0 = P_POLICY
    ORDER BY C.CREATED_TS ;
    BEGIN
    OPEN FETCHCOMMENT;
    LOOP
    FETCH FETCHCOMMENT INTO V_TEMP;
    EXIT WHEN FETCHCOMMENT%NOTFOUND;
    V_COMMENT := V_COMMENT ||' '|| TRIM(V_TEMP) ||' ';
    END LOOP;
    CLOSE FETCHCOMMENT;
    RETURN V_COMMENT;
    EXCEPTION
    WHEN OTHERS
    THEN
    DBMS_OUTPUT.PUT_LINE('SYSTEM ERROR PLEASE CONTACT DBA ' || SQLERRM);
    END FN_CONCATENATE_COMMENTS;

    HI
    Welcome to the forum!
    try this please.
    -- IT IS NOT TESTED --
    CREATE OR REPLACE FUNCTION FN_CONCATENATE_COMMENTS (
    P_CASENO IN PATIENT_DET.CASE_NO%TYPE,
    P_POLICY IN PATIENT_DET.POLICYNO%TYPE
    RETURN VARCHAR2
    AS
    V_TEMP VARCHAR2(300);
    V_COMMENT CLOB;
    CURSOR FETCHCOMMENT IS
    SELECT TO_CHAR (C.CREATED_TS,'mm/dd/yyyy hh:mi:ss AM - ')|| C.DOC_COMMENT_DESC DOC_COMMENT_DESC
    FROM TREATEMENT_DET C
    WHERE C.CASE_CD = P_CASENO AND C.POLICY_N0 = P_POLICY
    ORDER BY C.CREATED_TS ;
    BEGIN
    OPEN FETCHCOMMENT;
    LOOP
    FETCH FETCHCOMMENT INTO V_TEMP;
    EXIT WHEN FETCHCOMMENT%NOTFOUND;
    V_COMMENT := V_COMMENT ||' '|| TRIM(V_TEMP) ||' ';
    END LOOP;
    CLOSE FETCHCOMMENT;
    RETURN DBMS_LOB.SUBSTR(V_COMMENT ,32000,1);
    EXCEPTION
    WHEN OTHERS
    THEN
    DBMS_OUTPUT.PUT_LINE('SYSTEM ERROR PLEASE CONTACT DBA ' || SQLERRM);
    END FN_CONCATENATE_COMMENTS;Edited by: Mahir M. Quluzade on Apr 22, 2011 1:45 PM
    Edited by: Mahir M. Quluzade on Apr 22, 2011 1:46 PM

  • Need ouput more than 4000 characters

    Hi , how to create a script that fetches more than 4000 charaters in the ouput

    declare your pl/sql variable as varchar2(32767) which is the maximum and then you can select that amount.Not so fast Blu ;)
    SQL>  create or replace function f
    return varchar2
    as
    begin
    return lpad ('x', 32767, 'x');
    end f;
    Function created.
    SQL>  exec dbms_output.put_line(length(f))
    32767
    PL/SQL procedure successfully completed.
    SQL>  select length (f) from dual
    select length (f) from dual
    Error at line 1
    ORA-06502: PL/SQL: numeric or value error: character string buffer too small
    ORA-06512: at "MICHAEL.F", line 5To SELECT more than 4000 chars you'll always need a CLOB ..

  • Parameter longer than 4000 characters

    The java layer calls a EXEC_DDL stored proc that does a EXECUTE IMMEDIATE on the VARCHAR2 parameter string passed in. SInce the java layer is passing more than 4000 characters DDL statement we get an error about cannot bind long ..... What datatype should I use as a parameter instead of VARCHAR2 inside the EXEC_DDL stored proc. Steven Feuerstein advises against using LONG in his PL/SQL book. All the LOB types are for objects either INSIDE or OUTSIDE of the database but I just want the java code to be able to pass a DDL string greater than 4000 chars. I want to use the simplest approach.
    Thanks in anticipation

    a SUBSTR or a DBMS_LOB.SUBSTR works. This is the final working version of the EXEC_DDL proc. We used the DBMS_LOB package in case we needed to overload with other types of LOB parameters.
    procedure exec_ddl (
    pi_ddl_string IN CLOB
    ,po_status OUT PLS_INTEGER
    AS
    PRAGMA AUTONOMOUS_TRANSACTION;
    -- AUTHID CURRENT_USER will be added after exception handling is packaged
    v_clob_buff VARCHAR2(500);
    BEGIN -- outer block
    EXECUTE IMMEDIATE pi_ddl_string;
    po_status := PKG_SNAPIT.pk_success;
    EXCEPTION
    WHEN OTHERS THEN
    v_clob_buff := DBMS_LOB.SUBSTR(pi_ddl_string,500,1);
    insert into exception_log values(sysdate,'COMPILE ERROR IN : ' || v_clob_buff,'pkg_dynamic_sql'
    ,'exec_ddl');
    COMMIT;
    pkg_snapit.Log_Errors ( 'Error_Stack...' || Chr(10) || DBMS_UTILITY.FORMAT_ERROR_STACK() );
    pkg_snapit.Log_Errors ( 'Error_Backtrace...' || Chr(10) || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE() );
    po_status := SQLCODE;
    RAISE;
    END exec_ddl;
    Edited by: user4900730 on Mar 11, 2010 2:00 PM

Maybe you are looking for