PCI-6052E doesn't save all data, buffer too small?

WinXP,Labview6.1,PCI-6052 board,collect data from all 16 channels every 5 seconds
(Test 1)
I set external scan clock 10KHz, external channel clock 200KHz, buffersize 10K, "number of scan to read" 10K, theorically, in each file I should have 50,000x16 data. But my result is not right: every 5 seconds I got a file, but in side those files, the data is either 3000x16 or 2000 x16 alternatively. For example:
File1 is 3000x16
File2 is 2000x16
File3 is 3000x16
File4 is 2000x16
File5 is 3000x16
File6 is 2000x16
During the simulation, I see some change in the "scan backlog", but the number is not accumulated, for example, the numbers appeared are,36,0,0,..89,0. No error during the simulation. But when I stop the program I got the error: AI read is not enough fast for the data acquisition...
(Test 2)
When I set external scan clock 5KHz, external channel clock 100KHz, buffersize 5K, "number of scan to read" 5K, my result is right: I got a file every 5 second, and in each file therea are 25,000x16.
Why some data missing in the test one? The PCI6052 board clock is 333KHZ, so my setting of external scan clock and channel clock should be ok. The number of scan to read is set to as the scan rate, so I got accurately one second tiem. Is there something related with the board buffer size and setting or computer is not faster enough?
Thanks very much for help

There are a couple different possibilities for why the data is not all in one folder in Test 1. First of all, I noticed that you expected each file to have 50,000x16 data, but you said that each file had 3000x16 and 2000x16. Is that correct or is it 30,000x16 and 20,000x16? If what you initially said is correct it looks like you might be losing some data. However, if you meant to say 30,000x16 and 20,000x16 it looks like all of the data is there but it is just in separate files.
You are trying to read a lot of data in a little bit of time, so it is very possible that your computer cannot keep up with your settings. Also, the type of file you are trying to write the data too could be the reason you are not seeing all of your data. Excel is very slow and if you are writing to an Excel spreadsheet this could also be the reason.
The numbers that you were seeing in the "scan backlog" look fine to me. When the number increases that means that you have data in the buffer that is ready to be read. When the number drops to zero that means all the data has been read. So, what you are seeing is not a problem.
Do you have to read at such a fast rate? If not I would just keep it like test 2.
Hope this helps.
Jenk

Similar Messages

  • ORA-22835: buffer too small when trying to save pdf file in LONG RAW column

    Hi,
    I get "ORA-22835: Buffer too small for CLOB to CHAR or BLOB to RAW conversion (real : 125695, maximum : 2000)" when i trying to save a 120k pdf file in an Oracle Long Raw column using dotnet 4.0 and Entity FrameWork.
    Dim db As New OracleEntities
    Try
    Dim myEntity = (From e In db.TEXTE _
    Where e.TEXT_ID = txtTextId.Text _
    Select e).Single
    With myEntity
    If txtTextypeId.Text <> "" Then
    .TEXTYPE_ID = txtTextypeId.Text
    Else
    .TEXTYPE_ID = Nothing
    End If
    .TEXT_NUM = txtTextNum.Text
    .TEXT_NAME = txtTextName.Text
    .TEXT_DATE = dtTextDate.SelectedDate
    If DocAdded Then
    .TEXT_DOC = Document
    ElseIf DocDeleted Then
    .TEXT_DOC = Nothing
    End If
    End With
    db.SaveChanges()
    Document is an array of Byte and TEXT_DOC also (mapped to a long row column).
    is it possible to increase the size of the buffer ? how may i do it ?
    Thx in advance.
    Regards.

    Using a custom UPDATE or INSERT stored procedure for LONG RAW column with
    exceed-limit data may still get the following error.
    "ORA-01460: unimplemented or unreasonable conversion requested".
    One option is to use BLOB instead of LONG RAW in your table and regenerate your
    data model from the table. Then using the default UPDATE or INSERT statement
    (created by EF) should work.
    The following will modify your LONG RAW column to BLOB column.
    Disclaimers:
    1. It's irreversible--you cannot modify BLOB back to LONG RAW.
    2. I have not tried that when there are huge data in LONG RAW column.
    So be careful.
    alter table <your_table_name> modify <your_long_raw_type_column> blob;

  • The ADO NET Source was unable to process the data. ORA-64203: Destination buffer too small to hold CLOB data after character set conversion.

     We developed a SSIS Package to pull the data From Oracle source to Sql Server 2012. Here we used ADO.Net source to pull the records from Source but getting the below error after pulling some 40K records.
      [ADO NET Source [2]] Error: The ADO NET Source was unable to process the data. ORA-64203: Destination buffer too small to hold CLOB data after character set conversion.
    [SSIS.Pipeline] Error: SSIS Error Code DTS_E_PRIMEOUTPUTFAILED. 
     The PrimeOutput method on ADO NET Source returned error code 0xC02090F5. 
     The component returned a failure code when the pipeline engine called PrimeOutput(). 
    The meaning of the failure code is defined by the component, 
    but the error is fatal and the pipeline stopped executing. 
     There may be error messages posted before this with more 
    information about the failure.
    Anything that we can do to fix this?

    Hi,
      Tried both....
      * Having schema type as Nvarchar(max). - Getting the same error.
      * Instead of ADO.Net Source used OLEDB Source with driver as " Oracle Provide for OLE DB" Getting error as below.
           [OLE DB Source [478]] Error: SSIS Error Code DTS_E_OLEDBERROR.  An OLE DB error has occurred. Error code: 0x80004005.
           [SSIS.Pipeline] Error: SSIS Error Code DTS_E_PRIMEOUTPUTFAILED.  The PrimeOutput method on OLE DB Source returned error code 0xC0202009.  The component returned a failure
    code when the pipeline engine called PrimeOutput(). The meaning of the failure code is defined by the component, but the error is fatal and the pipeline stopped executing.  There may be error messages posted before this with more information about the
    failure.
    Additional Info:
       * Here the Source task is getting failed not the conversion or destination task.
    Thanks,
    Loganathan A.

  • Report error:ORA-06502:character string buffer too small. urgent!!

    Hi guys,
    My APEX version is 3.0.1.00.08, my application run on my test environment, but on PROD environment, it raised the error:
    report error:
    ORA-06502: PL/SQL: numeric or value error: character string buffer too small
    In this page, on the left is a tree, the right side is a tabular form, when I click one tree node, it will pass the current node id to the form and the form will display the children data. When I click some tree node, it will raise the ORA-06502 error, but when click some other nodes, it is correct. I don't know why. And on my test environment, it has no this error, the test environment has same version with prod environment, only has less data in database. Could you help me???
    I searched in forum, someone says it's LOV problem, if it's LOV problem, all the nodes should have error, why click some nodes are ok?
    Thanks !
    Jessica

    I don't think it is related only to the number of rows but also to the content of the rows. So, counting only the number of rows doesn't say anything about if it is going to work or not. My question: can't you filter those entries? Making a choice between 250 entries in a tabular form isn't a simple task. Using popup-key LOV instead would also be a solution. However, if you use popup-key LOV be aware of the fact that you need two index numbers for those.
    Denes Kubicek
    http://deneskubicek.blogspot.com/
    http://www.opal-consulting.de/training
    http://apex.oracle.com/pls/otn/f?p=31517:1
    -------------------------------------------------------------------

  • WWV_FLOW_WORKSHEET_CONDITIONS - ORA-06502 character string buffer too small

    Hi,
    I am currently working on a application that can upload CSV files inside many tables. Since I hate reinventing the wheels, I have decided to reverse engineer APEX and APEX APIs that are used by the SQL Workshop to upload CSV files to a single table. Since this feature was tested many times by many developers around the world, I know I can trust the code. If in a future release of APEX those packages are modified, I'll have to update my abstraction layer to call my own packages instead of APEX packages. (This is not an issue for our team.)
    First Step
    Use apex_040000.wwv_flow_load_data.create_csv_collection to create an apex collection with the first 20 rows of the csv file. At this step, we can validate the format of a sample of the file without loading all rows of the csv file.
    Second Step
    Use apex_040000.wwv_flow_load_data.load_csv_data to upload all rows of the csv file inside a table.
    Third Step
    Do whatever you want with the data inside the table. (i.e.: Send the data into multiple tables...)
    Here's my problem..._
    After the first or second steps, I display the data using interactive reports. I want to highlight every cells containing "invalid" data. I use apex_040000.wwv_flow_worksheet_api.add_or_update_highlight. When I have too many invalid cells, the IR doesn't show at run time, and you can see ORA-06502: PL/SQL: numeric or value error: character string buffer too small on the page.
    I would like to know the limitations of IR using the table WWV_FLOW_WORKSHEET_CONDITIONS. Is there a way to create many highlight conditions inside a single row of WWV_FLOW_WORKSHEET_CONDITIONS ? I want to find the best approach to add hundreds of conditions.
    Thanks
    Louis-Guillaume Carrier-Bédard
    My Google+: https://profiles.google.com/lgcarrier
    My Blog: http://www.lgcarrier.com
    Twitter: http://www.twitter.com/lgcarrier
    APEX Québec: http://www.apexquebec.com
    APEXFramework: http://www.apexframework.com

    At run time, when I look at the html source code, I can see all the generated CSS rules to highlight the cells of the IR.
    ie.: *.apexir_WORKSHEET_DATA tr td.rule_5352115461902443_td {background-color:#FF0000 !important;}*

  • Listener Error - character string buffer too small (ORA-06502)

    I am running into a very strange problem with the APEX listener on seemingly random pages. I can hit every page in my application just fine, but as soon as I hit this specific one, Glassfish throws an HTTP 500 error. If I click Debug, the page seems to load fine with no indications of trouble, but as soon as I turn debug back off, it goes back to the HTTP 500 error. I don't see anything special about the page that makes this happen. It is pretty simple and has 4 regions. I have noticed that if I set any 1 of the 4 regions to "Never display", the page loads fine. It's like having all 4 of them enabled at once are causing some overload, even though it's actually a smaller amount of data than most of my other pages.
    **Update: I just discovered this only happens if I'm logged into the workspace first and then try to run the page! If I log out of APEX and then hit the application as a normal user, page loads error-free. This is still an annoying problem, but at least it seems I have a decent workaround since regular users never see it.
    After a couple days, I noticed the exact same problem on a second APEX application I'm using. Again, it is on some random page whereas all the other pages work fine.
    Both applications and pages in question worked without issue in APEX 3.x. I am trying to get an APEX application up and running on the latest version.
    I have tried both Glassfish server and simply downloading the latest listener (version 1.1.1) and running it in standalone mode. I get the problem both ways, which is why it seems it's a listener issue.
    I have seen a few other threads of people having this problem, but I never did find anyone with a solution, and most of the posts stopped back in December.
    Some details on my environment:
    Database version: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
    APEX version: 4.0.2
    Webserver: Glassfish 3.1
    Here is the log entry from Glassfish when the HTTP 500 error displays as I try to load one of the bugged pages.
    [#|2011-05-10T21:14:22.967-0500|INFO|oracle-glassfish3.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=111;_ThreadName=Thread-1;|MaxConnectionReuseCount=50000|#]
    [#|2011-05-10T21:14:46.431-0500|SEVERE|oracle-glassfish3.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=112;_ThreadName=Thread-1;|
    ***********ERROR***********
    init: # headers=46
    declare nm owa.vc_arr := ?;
    vl owa.vc_arr := ?;
    begin
    owa.init_cgi_env( ?, nm, vl );
    htp.init; htp.HTBUF_LEN := 63;
    ? := sys_context('USERENV','SID');
    end;
    SID:1242
    CALL:
    begin
    f(p=>?);
    commit;
    end;
    BINDS
    p:100:2:220529248574492::NOPAGE CALL:
    declare
    nlns number := 999999;
    l_clob CLOB;
    lines htp.htbuf_arr;
    l_buff varchar2(32767);
    l_clob_init boolean:= false;
    l_file varchar2(5);
    l_doc_info varchar2(1000);
    begin
    OWA.GET_PAGE(lines, nlns);
    if (nlns > 1) then
    for i in 1..nlns loop
    if ( length(lines(i)) > 0 ) then
    if ( ( lengthb(l_buff) + lengthb(lines(i))) > 32767) then
    if (NOT l_clob_init) then
    dbms_lob.createtemporary(l_clob, TRUE);
    dbms_lob.open(l_clob, dbms_lob.lob_readwrite);
    l_clob_init:=true;
    end if;
    dbms_lob.writeappend(l_clob,length(l_buff),l_buff);
    l_buff := lines(i);
    else
    l_buff := l_buff || lines(i);
    end if;
    end if;
    end loop;
    end if;
    if (l_clob_init) then
    dbms_lob.writeappend(l_clob,length(l_buff),l_buff);
    l_buff := '';
    end if;
    ? := l_clob;
    ? := l_buff;
    if (wpg_docload.is_file_download) then l_file:='TRUE'; wpg_docload.get_download_file(l_doc_info); else l_file := 'FALSE'; end if; ? := l_file;
    ? := l_doc_info;
    end;
    get_page FAILED:ORA-06502: PL/SQL: numeric or value error: character string buffer too small
    ORA-06512: at line 33
    Edited by: BrianB on May 11, 2011 7:50 AM
    Edited by: BrianB on May 11, 2011 8:01 AM

    Brian,
    this post is going to get a bit longer, so the summary comes first.
    h6. Summary
    1. I could reproduce the problem on my system using the APEX Listener in standalone mode.
    2. I don't think the problem is content-related in the sense that you have any issue in your page or database contents.
    3. I have a workaround for your problem.
    h6. Error message
    Having that error in my environment made me start to think. I not only disabled some item and got it work, but I could also add something to achieve this effect.
    So I came to think, this really is somewhere deep down. The error message doesn't seem very helpful on first sight, but when starting to follow on what's happening there, things get clearer:
    APEX generates pages dynamically, replacing substitution strings and other tokens to get the actual page definition. This has to be read by a requesting client. The use of VARCHAR2 as buffer introduces a limit of 32767 bytes, after which the contents is handled as CLOB instead.
    h6. Analysis
    Obviously, there are cases where the "estimation" fails. Of course, this is may only be relevant in rare cases, because:
    1. If a page would exceed the maximum without some charset interpretation problem, the buffer would be switched to clob.
    2. If a page stays small enough to stay below 32767 even with some characters that are acutally larger then expected, the buffer isn't busted.
    To find out, if your could be one of these rare cases, I investigated the HTTP headers, focussing on X-DB-Content-length and made an odd observation.
    Test case 1: "Go" button disabled, so the page runs fine with APEX Listener
    1. It has *31968 bytes* when coming from APEX Listener with a Go button disabled.
    2. It has *31938 bytes* according to the header set by EPG - for exactly the same page.
    That makes a difference of 30 bytes for what is expected to be the same contents.
    Test case 2: The button is enabled again
    1. This causes the page load to crash in APEX Listener.
    2. EPG transports *32341 bytes* according to that header.
    So we are pretty close to the hard limit for the VARCHAR2 buffer.
    For some reason, APEX Listener seems to cause a false calculation of the actual page size. Whether this is due to some charset problem or due to some other problem with response handling, I don't know. The 30 bytes difference may result from the odd header "X-ORACLE-IGNORE" with value "IGNORE, IGNORE, IGNORE, IGNORE" sent by the APEX Listener. This value has exactly 30 bytes in length, but this could be coincidence, as there are more differences in headers. If I add the size of all headers, we are even closer to the buffer limit and probably exceed it when some items need more bytes than expected.
    This could even be as simple as a line break, as your page has about 424 lines when I disabled the button... Adding 1 byte per line to the 32341 bytes of the EPG, I get 32765 bytes. Now add that button (403 bytes difference on EPG) and you exceeed the limit. Reduce that value by the line count again and you are still below.
    Could be coincidence as well, but makes me wonder.
    h6. Workaround
    To make sure that we were actually hitting that limit, I now introduce my suggestion for a workaround.
    Test case 3: Add a hidden item
    1. APEX Listener loads the page, stating the size to be *32876 bytes*
    2. EPG sees 30 bytes less and transmits the header with *32846 bytes*
    h6. Conclusion
    I can't give you a real solution for that problem, nor do I have a definitive answer on what is the root cause for it. It seems, only one of the developers may find it. But I can offer you a workaround, which is to just add some hidden item to your page so it exceeds the limit for the VARCHAR2 buffer and gets handled as clob.
    Note that this may occur outside the app builder as well. The app builder just renders some additional items when starting that page, so it has a different size from its productive representation. On the other hand, I may start counting the size of that additional page section - I wouldn't wonder if that results in a value around 400 bytes, and this is the forgotten part...
    Unfortunately, if it actually is happening outside of the app builder, this workaround isn't very handy: Dynamic contents can't be calculated that easy all the time, so you may have cases where you just don't know in advance if you are close to the limit and have to add some item to exceed it or if you've already exceeded it or if you are far below, or close enough to actually hit it when adding just one byte...
    -Udo

  • Shuttle Demo Throws Error ORA-06502: PL/SQL: Character buffer too small

    Hello All.
    I am using Carl Backstrom's wonderful shuttle demo in my APEX 2.2 application and am running into this Oracle error "Character string buffer too small". My plsql code is:
    DHTML_SHUTTLE (
    'select func,func_id from phone_functions where rownum < 676 order by func',
    'select a.func,a.func_id from phone_functions a, function_phones b where a.func_id = b.func_id and b.phone_id = 2010 order by func',
    '1',
    '2',
    'Y',
    'Y',
    'N',
    '150',
    '350',
    v('WORKSPACE_IMAGES'),
    'first.png',
    'previous.png',
    'next.png',
    'last.png',
    'refresh.png',
    'shuttleRightAll.png',
    'shuttleRight.png',
    'shuttleLeft.png',
    'shuttleLeftAll.png'
    I put in the rownum < 676 ti test out how many rows of data it will allow me to
    output into the first select list box. I can go only upto 675 rows. After this I always get the error. The column FUNC is defined as varchar2(255). However,
    it's largest value is about 60 bytes.
    Does anyone know how to overcome this error. I have over 1000 rows I need to display in the list box.
    Thank you.
    Elie

    Hello,
    What is the limit on the number of
    bytes/characters one may use in your
    shuttle list boxes.Not sure but it's probably the hard 32k limit in which case try the solution that Scott posted above and see if that helps/
    Also, is it possible to create multiple shuttle 2-box
    combinations in different
    regions on the same APEX page? Would not the
    underlying plsql arrays
    become "confused" as to what data is in what array?
    Yes you can have more that one set of shuttle on a page. If you look here
    http://apex.oracle.com/pls/otn/f?p=9655:7
    all you have to do is change the pID_1 and pID_2 to a unique integer per each shuttle.
    pID_1 = Form element name. For example, 1 equals F01 and 2 equals F02.
    pID_2 = Form element name. For example, 1 equals F01 and 2 equals F02.
    Here's an example of two shuttles in a page, you can see the client side works fine though I didn't change the save procedure it would work as well. http://apex.oracle.com/pls/otn/f?p=9655:6
    Carl

  • Error:numeric or value error : buffer too small

    hi
    can any one please help me?
    i am developing the application in HTMLDB. i have an error numeric or value error: char buffer too small.
    i have an attributes plan_name,type......att_header1 in the database. The data's were inserted to the database, without the att_header item but if i have the item att_header int the HTMLDB then the insertion is not working. and also i was able to insert the data into the database for the field att_header1 through sql command . i think the problem is onle in my HTMLDB application.
    please tell me the solution for this error.
    thanx in advance
    valli
    Message was edited by:
    valli

    Valli,
    I don't think you understood my post, above:
    Can you please create an application that shows the problem on apex.oracle.com? Then we'll be able to see all your code together with the database tables, etc.
    If you do not have a workspace you can request one.
    Please request a workspace on apex.oracle.com. After your workspace request is approved, create an application there that shows this problem you are having. Create the necessary tables, packages, and other database objects in the database to support the example.
    As the last step, post here the workspace name, the application ID, and detailed instructions explaining how to use your application to demonstrate the problem.
    Scott

  • Oracle Report Error (string buffer too small) in Portal

    Hi,
    I have registered an oracle report (.rdf) with portal which works fine outside in Reports Builder, but when I try to run it in Portal it keeps throwing this error:
    SQL-6502: ORA-06502: PL/SQL: numeric or value error: character string buffer too small
    ORA-06512: at "PORTAL.WWV_RW_USR", line 444
    ORA-06512: at "PORTAL.WWV_RW_USR", line 923
    ORA-06512: at line 1
    Anyone know what needs to be done to fix this?
    Thanks

    Sean:
    Thank you very much for wading through my post.
    >"if (NIerror = DAQmxCfgInputBuffer(h, numSamples*4))"
    >I would leave this line out. DAQmx should create an input buffer automatically
    >based on the number of channels and number of samples per channel.
    Yeah- I put that in trying to fix the problem. The error message doesn't say *which* buffer is too small
    >If you just call the DAQmxReadDigitalLines() function with "numSampsPerChan" set to -1,
    >DAQmx will wait until all samples are acquired before performing the read.
    I'm trying to avoid the wait. That's why I'm trying to figure out how many samples are ready.
    I suppose I can try numSampsPerChan=-1, set a short timeout and check for the timeout error.
    >If this does not help, please send me a small section of code that reproduces that behavior,
    >and I will try running it on my machine.
    I will try modifying one of the examples to do what I'm trying to do.
    Again, Thank you!
    John Weeks
    WaveMetrics, Inc.
    Phone (503) 620-3001
    Fax (503) 620-6754
    www.wavemetrics.com

  • Checkbox Item: character string buffer too small (APEX 4.0. - 4.2.)

    Hi all,
    I'm currently running the Oracle Application Express 4.0.2 on the Oracle DB 11g and thinking about the APEX upgrading to current 4.2. version. We have there quite big application used by the inernal employees so prior I need to test, if the migration will work.
    I installed the new server with database and the APEX 4.2. and import the current application. Everything seems to working good except few checkboxes, which returns me the error: "ORA-06502: PL/SQL: numeric or value error: character string buffer too small."
    LOV (Source) Code of Checkbox Item:
    SELECT email as display_value, id as return_value
    FROM users
    WHERE <some conditions>;
    In the current version 4.0.2. I get the checkbox item (total count of the rows approx. 650), but in the 4.2. I get this "string buffer too small" error and the page could not be rendered (if I add to the same query limitation: "rownum<242" it will display the item).
    Could you please help me with this issue? Any idea, what I should set up in the new APEX to get the same results or you see there any limitation, why it does not work in the new version, but in the old version the same SQL works fine?
    Thank you all in advance.
    Regards,
    Tomas.

    1007462 wrote:
    Hi all,Welcome to the forum: please read the FAQ and forum sticky threads (if you haven't done so already), and update your forum profile with a real handle instead of "1007462".
    I'm currently running the Oracle Application Express 4.0.2 on the Oracle DB 11g and thinking about the APEX upgrading to current 4.2. version. We have there quite big application used by the inernal employees so prior I need to test, if the migration will work.
    I installed the new server with database and the APEX 4.2. and import the current application. Everything seems to working good except few checkboxes, which returns me the error: "ORA-06502: PL/SQL: numeric or value error: character string buffer too small."
    LOV (Source) Code of Checkbox Item:
    SELECT email as display_value, id as return_value
    FROM users
    WHERE <some conditions>;
    In the current version 4.0.2. I get the checkbox item (total count of the rows approx. 650), but in the 4.2. I get this "string buffer too small" error and the page could not be rendered (if I add to the same query limitation: "rownum<242" it will display the item).
    Could you please help me with this issue? Any idea, what I should set up in the new APEX to get the same results or you see there any limitation, why it does not work in the new version, but in the old version the same SQL works fine?The total size of the HTML generated for an LOV-based item in APEX is restricted to 32K (this limit applies to every version). Why you are hitting this limit in the new instance may be due to differences in data or the database configuration (e.g. character set) rather than changes introduced in APEX.
    Is the data exactly the same? Is the database configuration the same? When you limit the number of rows so the checkboxes are displayed and view the page source, is there any difference in the HTML used to render the checkbox form elements between the two versions?
    That said, from a usability perspective 650 LOV options is rather a lot, and your application may very well outgrow this limit naturally in any version of APEX as more users as added. It is probably worthwhile thinking about other ways to display these options.

  • PL/SQL: numeric or value error (character string buffer too small)

    Hi All,
    Below is the procedure used to send notifications. It was working fine in previous DB version :- 10.1.0.5.0 and there was recent upgrade to 11.2.0.2.0.
    I complies fine, but when executing it throws the error.
    PROCEDURE PROC_STATUS_MAIL_UNADJ IS
           K_BOUNDARY CONSTANT VARCHAR2(1000) := 'a1b2c3d4e3f2g1';
          l_analysis_report  VARCHAR2(32767); --empty_clob; --clob :=
          l_header VARCHAR2(1000);
          l_footer VARCHAR2(200);
          cnxn UTL_SMTP.connection;
          cursor cloc is select location_id from locations order by location_id asc;
          loc_id cloc%rowtype;
    BEGIN
      dbms_output.enable (1000000);
         FOR loc_id in  cloc
         loop
         l_analysis_report := '<style type="text/css">
        <!--.style1 { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; font-style: normal; color: #FF0000}-->
        <!--.sidebar1 { font-family: Arial, Helvetica, sans-serif; font-size: 10px}-->
        <!--.text { font-family: Arial, Helvetica, sans-serif; font-size: 12px}-->
        </style>
        <center><b><font face="Arial">Run Summary Report'
                    || TO_CHAR(SYSDATE, 'DD-MON-YYYY HH:MI AM') || '<br><br></font></b></center>'
                    || ' <div align="center"><table width="95%" border="1" cellspacing="0" cellpadding="1" </div>'
                    || '<span style="font-size: 10pt; font-family: Arial"> </span> '
                    || '<tr bgcolor=b4b4b4><td align="center"> <font size="3"> <b>'
                    || 'Analysis</b></td><td align="center"><font size="3"> <b>'
                    || 'Start Time</b></td><td align="center"><font size="3"> <b>'
                    || 'End Time</b></td><td align="center"><font size="3"> <b>'
                    || 'Run Duration (mins)</b></td><td align="center"><font size="3"> <b>'
                    || 'Status</b></font></td></tr> ' || UTL_TCP.CRLF;
                    FOR curr_refresh IN (SELECT AN.ANALYSIS_ID,AN.NAME ANALYSIS_NAME,TO_CHAR(ARH.RUN_START_TIME,'DD/MM/YYYY HH:MI:SS') START_TIME,
                                         TO_CHAR(ARH.RUN_END_TIME,'DD/MM/YYYY HH:MI:SS')END_TIME,
                                         ROUND(((ARH.RUN_END_TIME-ARH.RUN_START_TIME)*24*60),2) RUN_TIME_SECS,ARH.JOB_STATUS STATUS
                                         FROM
                                         RUN_HISTORY ARH,ANALYSES AN
                                         WHERE
                                         AN.ANALYSIS_ID=ARH.ANALYSIS_ID
                                         AND AN.CYCLE_IND_ID IN (1,3)
                                         AND ARH.RUN_START_TIME>TO_DATE(SYSDATE-30)
                                         AND ARH.JOB_NAME LIKE 'RHS_QU%'                                  
                                         AND AN.LOCATION_ID = loc_id.location_id
                                         AND ARH.JOB_STATUS='Completed'
                                         ORDER BY ARH.RUN_START_TIME DESC)
                           LOOP
                       l_analysis_report  := l_analysis_report ||'<tr><td align="center">'|| curr_refresh.analysis_name
                          || '</td><td align="center">' || curr_refresh.start_time || '</td><td align="center">'
                          || curr_refresh.end_time || '</td><td align="center">'|| curr_refresh.RUN_TIME_SECS ||
                          '</td><td align="center">'|| curr_refresh.status ||
                          '</td> </tr>' || UTL_TCP.CRLF;
                      exit when length (l_analysis_report) > 32500;
                   END LOOP;
                  l_analysis_report := l_analysis_report || '</table><br><br>';
                   l_footer := UTL_TCP.CRLF ||'<b> Note: This is an auto generated email. Please do not reply to it. Contact the IT team for any further information.</b>'||  UTL_TCP.CRLF;
                   FOR curr_email IN (SELECT GLOBAL_NAME INSTANCE_NAME,
                                      EU.EMAIL_USER_LAST_NAME last_name, EU.EMAIL_USER_FIRST_NAME ACNAME,
                                      EU.EMAIL_USER_EMAIL_ID,loc.LOCATION_NAME LOC_NAME,
                                      '[email protected]' MAIL_FROM
                                      FROM
                                      RHS_EMAIL_USER EU,LOCATIONS LOC,GLOBAL_NAME
                                      WHERE EU.LOCATION_ID=LOC.LOCATION_ID
                                      AND EU.LOCATION_ID=loc_id.location_id
                                  ) LOOP
                cnxn := UTL_SMTP.open_connection('smtprelay.inc.com', 25);
                UTL_SMTP.helo(cnxn, 'smtprelay.inc.com');
                UTL_SMTP.mail(cnxn, '[email protected]');
                UTL_SMTP.rcpt(cnxn, curr_email.EMAIL_USER_EMAIL_ID);
                      l_header := 'MIME-Version: 1.0'||'
    To: ' || curr_email.last_name || ' <' || curr_email.EMAIL_USER_EMAIL_ID || '>
    From: ' || curr_email.mail_from || '
    Subject: Un-Adjusted Analysis Report for ' || curr_email.loc_name || ' Location from' || curr_email.instance_name || ' on ' || to_char(sysdate, 'DD-MON-YYYY') || '
    Reply-To: [email protected]
    Content-Type: text/html;' || UTL_TCP.CRLF || UTL_TCP.CRLF;
                UTL_SMTP.data(cnxn, l_header || l_analysis_report || l_footer);
                UTL_SMTP.quit(cnxn);
                END LOOP;
                END LOOP;
    END PROC_STATUS_MAIL_UNADJ;
    Error :-
    ORA-06502: PL/SQL: numeric or value error: character string buffer too small
    ORA-06512: at "SYS.UTL_SMTP", line 591
    ORA-06512: at "SYS.UTL_SMTP", line 497
    ORA-06512: at "SYS.UTL_SMTP", line 503
    ORA-06512: at "RISK_HISTORY.PKG_RHS_EMAIL_NOTIFY", line 206
    ORA-06512: at "RISK_HISTORY.PKG_RHS_EMAIL_NOTIFY", line 414
    ORA-06512: at line 2Can you please let me know if there is any issue with code or any upgrade issue ?
    Regards,
    Sunny
    Edited by: k_17 on Oct 13, 2011 12:07 PM

    Hi Helios,
    Many thanks for your reply.
    I am able to figure out the issue. In the code we have
    l_analysis_report  := l_analysis_report ||'<tr><td align="center">'|| curr_refresh.analysis_name
                          || '</td><td align="center">' || curr_refresh.start_time || '</td><td align="center">'
                          || curr_refresh.end_time || '</td><td align="center">'|| curr_refresh.RUN_TIME_SECS ||
                          '</td><td align="center">'|| curr_refresh.status ||
                          '</td> </tr>' || UTL_TCP.CRLF;
                      exit when length (l_analysis_report) > 32500;where "l_analysis_report VARCHAR2(32767);"
    The issue is report has more characters, and when executing it throws the error " ORA-06502: PL/SQL: numeric or value error: character string buffer too small ".
    Can you please let me know how to have more characters/data in the report. Will CLOB help if yes, please let me know how to use it.
    Kindly suggest some options.
    Regards,
    Sunny

  • ORA-22835: Buffer too small for CLOB to CHAR or BLOB to RAW conversion

    Hi all,
    the following query select to_char(nvl(round(pc.target_cost*xx_primavera.geteurtolvrate,2),amount),'FM999G999G999G999G990D00') detail_amount,
    nvl(ct.cost_type, description) detail_description,
    tm_desc.memo_id,
    primavera_prj_name detail_prj_name,
    hp.party_number detail_party_number,
    xpid.interface_line_attribute1,
    utl_i18n.unescape_reference(replace(regexp_replace(utl_raw.cast_to_varchar2(tm_desc.task_memo), '<[^>]*>'), chr(13)||chr(10))) document_description,
    REPLACE(regexp_replace(utl_raw.cast_to_varchar2(tm_id.task_memo), '<[^>]*>'), chr(13)||chr(10)) prim_memo_client_id
    from XX_PRIMAVERA_INVOICES_DETAIL xpid
    join admuser.xx_ar_hz_parties xahp on xahp.orig_system_bill_customer_id = xpid.orig_system_bill_customer_id
    join hz_parties hp on hp.party_id = xahp.party_id
    left join admuser.projcost pc on pc.proj_id = xpid.primavera_prj_id and pc.cost_type_id != 29 and xpid.service_code = 8 and pc.task_id = xx_primavera.getTaskId(xpid.primavera_prj_id,'A1020', 'Изготвяне на оферта') and delete_session_id is null
    left join admuser.costtype ct on ct.cost_type_id = pc.cost_type_id
    left join admuser.taskmemo tm_id on tm_id.proj_id = xpid.primavera_prj_id and tm_id.memo_type_id = 53 and tm_id.task_id = xx_primavera.getTaskId(xpid.primavera_prj_id,'A1020', 'Изготвяне на оферта')
    left join admuser.taskmemo tm_desc on tm_desc.proj_id = xpid.primavera_prj_id and tm_desc.memo_type_id = 55 and tm_desc.task_id = xx_primavera.getTaskId(xpid.primavera_prj_id,'A1020', 'Изготвяне на оферта')
    where amount != 0
      and xpid.interface_line_attribute1 = :ra_ctp_attribute1
    ORDER BY xpid.primavera_prj_name, xpid.description;returns error:
    ORA-22835: Buffer too small for CLOB to CHAR or BLOB to RAW conversion (actual: 2371, maximum: 2000) I found that the error occurs in the row : utl_i18n.unescape_reference(replace(regexp_replace(utl_raw.cast_to_varchar2(tm_desc.task_memo), '<[^>]*>'), chr(13)||chr(10))) document_description,and tried to change it to: utl_i18n.unescape_reference(replace(regexp_replace(utl_raw.cast_to_varchar2(dbms_lob.substr(tm_desc.task_memo,1,2000)), '<[^>]*>'), chr(13)||chr(10))) document_description,....but it returns not value for that field... am i using dbms_lob.substr at the wrong place? The column 'tm_desc.task_memo' is BLOB type.
    Any ideas how to cheat it ?
    Version: Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production
    PL/SQL Release 11.1.0.7.0 - Production
    "CORE     11.1.0.7.0     Production"
    TNS for Linux: Version 11.1.0.7.0 - Production
    NLSRTL Version 11.1.0.7.0 - ProductionThanks in advance,
    Bahchevanov.

    Your second example has the parameters reversed. The amount (length) comes first and then the offset:
    DBMS_LOB.SUBSTR (
       lob_loc     IN    BLOB,
       amount      IN    INTEGER := 32767,
       offset      IN    INTEGER := 1)
      RETURN RAW;
    DBMS_LOB.SUBSTR (
       lob_loc     IN    CLOB   CHARACTER SET ANY_CS,
       amount      IN    INTEGER := 32767,
       offset      IN    INTEGER := 1)
      RETURN VARCHAR2 CHARACTER SET lob_loc%CHARSET;
    DBMS_LOB.SUBSTR (
       file_loc     IN    BFILE,
       amount      IN    INTEGER := 32767,
       offset      IN    INTEGER := 1)
      RETURN RAW;Also, remember that # of bytes is not necessarily the same as the # of characters depending on your character set. So 2000 bytes might become 4000 characters. And you have to make sure the BLOB is actually character data and not arbitrary binary data.
    Post the results of reversing the parameters and using a smaller chunk size.

  • Error in notification - "character string buffer too small"

    Hi All,
    Hope everyone is doing great...
    I have issue with one of the procedure which sends out status email for the reports. Below is the code.
    It worked fine from last six months but today it failed because of the length of characters (more reports are added).
    The variable "l_an_report" is VARCHAR and it has crossed it limit so gave the below error. Not sure how to handle the report so that it includes all the data.
    Also please let me if this is good solution :- Have the report status in excel sheet and attach to the email.
    If its fine please let me know how i can achieve this and any prerequisite from network team we need to get?
    ERROR :-
    ORA-06502: PL/SQL: numeric or value error: character string buffer too small
    ORA-06512: at "REPORT_STAT.PACKG_EMAIL", line 441
    ORA-06512: at line 2
    Procedure PRC_SUMMARY IS
          l_an_report varchar2(32767);
          l_header VARCHAR2(1000);
          cnxn UTL_SMTP.connection;
          P_job           NUMBER (10)    DEFAULT TO_NUMBER (TO_CHAR (SYSDATE,'YYYYMMDD'));
    BEGIN
                          l_an_report := '<style type="text/css">
    <!--.style1 { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; font-style: normal; color: #FF0000}-->
    <!--.sidebar1 { font-family: Arial, Helvetica, sans-serif; font-size: 10px}-->
    <!--.text { font-family: Arial, Helvetica, sans-serif; font-size: 12px}-->
    </style>
    <center><b><font face="Arial">Summary Report '
                || '<br><br></font></b></center>'
                || ' <div align="center"><table width="90%" border="1" cellspacing="0" cellpadding="1"'
                || 'style="font-size: 10pt; font-family: Arial" > '
                || '<tr bgcolor=b4b4b4><td align="center"> <font size="3"> <b>'
                || 'Report</b></td><td align="center"><font size="3"> <b>'
                || 'Run Duration </b></td><td align="center"><font size="3"> <b>'
                || 'Status</b></font></td></tr> ' || UTL_TCP.CRLF;
                    FOR curr_refresh IN (SELECT
                                         AN.NAME report_NAME,
                                         ROUND(((ARH.RUN_END_TIME-ARH.RUN_START_TIME)*24*60),2) RUN_TIME,
                                         ARH.JOB_STATUS STATUS
                                         FROM
                                         REPORT_HISTORY ARH,REPORT AN
                                         WHERE
                                         ARH.RUN_START_TIME>TO_DATE(SYSDATE-93)
                                         AND AN.report_ID=ARH.report_ID
                                         and arh.JOB_NAME like 'QA%'
                                         and arh.JOB_STATUS='Completed')
                                  LOOP
              l_an_report  := l_an_report ||
              '<tr><td align="center">'|| curr_refresh.report_name|| '</td><td align="center">'|| curr_refresh.RUN_TIME ||
              '</td><td align="center">'|| curr_refresh.STATUS ||
               '</td><td align="center">' || UTL_TCP.CRLF;                      
                exit when length (l_an_report) > 32767;                   
          END LOOP;
           l_an_report := l_an_report || '</table><br><br>';
                FOR curr_email IN (SELECT global_name instance_name,
                REU.EMAIL_USER_LAST_NAME last_name,
                REU.EMAIL_USER_FIRST_NAME first_name,
                REU.EMAIL_USER_EMAIL_ID,
                '[email protected]' mail_from
                                 FROM EMAIL_USER REU, EMAIL_GROUP REG,GLOBAL_NAME
                                             WHERE REU.EMAIL_GROUP_ID = REG.EMAIL_GROUP_ID
                                                   AND REG.EMAIL_GROUP_NAME ='IT') LOOP
                cnxn := UTL_SMTP.open_connection('smtprelay.ats.com', 25);
                UTL_SMTP.helo(cnxn, 'smtprelay.ats.com');
                UTL_SMTP.mail(cnxn, '[email protected]');
                UTL_SMTP.rcpt(cnxn, curr_email.EMAIL_USER_EMAIL_ID);
                   l_header := 'MIME-Version: 1.0'||'
                   To: ' || curr_email.last_name || ' <' || curr_email.EMAIL_USER_EMAIL_ID || '>
                   From: ' || curr_email.mail_from || '
                   Subject: Summary Report for ' || curr_email.instance_name || ' on ' || to_char(sysdate, 'DD-MON-YYYY') || '
                   Reply-To: [email protected]
                   Content-Type: text/html;' || UTL_TCP.CRLF || UTL_TCP.CRLF;
                UTL_SMTP.data(cnxn, l_header || l_an_report);
                UTL_SMTP.quit(cnxn);
          END LOOP;
    END PRC_SUMMARY;Please share your thoughts.
    Regards,
    Sunny

    >
    It worked fine from last six months but today it failed because of the length of characters (more reports are added).
    ORA-06502: PL/SQL: numeric or value error: character string buffer too small
    >
    The error is because you don't check the length of 'l_an_report' until it is already too long.
    This code checks the length AFTER adding to it.
    >
    l_an_report := l_an_report ||
    '<tr><td align="center">'|| curr_refresh.report_name|| '</td><td align="center">'|| curr_refresh.RUN_TIME ||
    '</td><td align="center">'|| curr_refresh.STATUS ||
    '</td><td align="center">' || UTL_TCP.CRLF;
    exit when length (l_an_report) > 32767;
    >
    You need to test the length of the new string to be added to make sure it won't cause 'l_an_report' to be too long
    -- add a new variable in the declare section
    v_new_string VARCHAR2(2000);
    -- in loop do calc
    v_new_string := '<tr><td align="center">'|| curr_refresh.report_name|| '</td><td align="center">'|| curr_refresh.RUN_TIME ||
              '</td><td align="center">'|| curr_refresh.STATUS ||
               '</td><td align="center">' || UTL_TCP.CRLF;                      
    -- test length
    IF (length(v_new_string) + length (l_an_report) > 32767 THEN EXIT;But as others have said if you need to handle lengths > 32767 then use an attachment as shown in the links provided.

  • "Character string buffer too small" in translated application

    Recently upgraded to Apex 3.1
    After translating an aplications to arabic something strange happened!
    ALL the report regions are showing error:
    ORA-06502: PL/SQL: خطأ رقمي أو قيمة: character string buffer too small
    I have not experienced this in 3.01 and i have not shanged the tables.
    Whenever i switch back to english everinthing is ok.
    Has anyone seen this behaviour? Workarounds?

    I could not find any relevant messages in Apache error log.
    This is output of debug:
    source of the report region "test" is: select 1 from dual
    0.00:
    0.00: S H O W: application="115" page="998" workspace="" request="" session="4006037156338848"
    0.00: alter session set nls_language="ARABIC"
    0.00: alter session set nls_territory="SAUDI ARABIA"
    0.00: NLS: CSV charset=AR8MSWIN1256
    0.00: ...NLS: Set Decimal separator="."
    0.00: ...NLS: Set NLS Group separator=","
    0.00: ...NLS: Set date format="DD/MM/RR"
    0.00: ...Setting session time_zone to +03:00
    0.00: NLS: Language=ar-sa
    0.00: Application 115, Authentication: CUSTOM2, Page Template: 1118203615491656
    0.01: ...Session ID 4006037156338848 can be used
    0.01: ...Application session: 4006037156338848, user=ADMIN
    0.01: ...Determine if user "ADMIN" workspace "941719318732142" can develop application "115" in workspace "941719318732142"
    0.01: Session: Fetch session header information
    0.01: ...Metadata: Fetch page attributes for application 115, page 998
    0.01: Fetch session state from database
    0.01: Branch point: BEFORE_HEADER
    0.01: Fetch application meta data
    0.01: Computation point: BEFORE_HEADER
    0.01: Processing point: BEFORE_HEADER
    0.01: Show page template header
    0.03: Computation point: AFTER_HEADER
    0.03: Processing point: AFTER_HEADER
    Logout ADMIN Change Password Application CentralAdministartion
    0.03: Region: Agency Label
    0.03: Computation point: BEFORE_BOX_BODY
    0.03: Processing point: BEFORE_BOX_BODY
    0.03: Region: test
    testEdit      
    report error:
    ORA-06502: PL/SQL: خطأ رقمي أو قيمة: character string buffer too small
    0.03: Computation point: AFTER_BOX_BODY
    0.03: Processing point: AFTER_BOX_BODY

  • ORA-22835: Buffer too small for CLOB to CHAR  on Solaris but not Windows

    Hi,
    I get the following error on Solaris but not Windows equivalent 10.2 installations
    ORA-22835: Buffer too small for CLOB to CHAR or BLOB to RAW conversion (actual: 4575, maximum: 4000)
    ORA-06512: at line 65
    the code causing the problem is:
    SELECT A.TABLE_NAME, A.DEFAULT_DIRECTORY_NAME, B.LOCATION,
    CASE
    WHEN INSTR(A.ACCESS_PARAMETERS,'RECORDS FIXED')<>0 THEN
    SUBSTR(A.ACCESS_PARAMETERS,INSTR(A.ACCESS_PARAMETERS,'RECORDS FIXED')+14,3)
    ELSE NULL
    END RSZ FROM USER_EXTERNAL_TABLES A, USER_EXTERNAL_LOCATIONS B
    WHERE A.TABLE_NAME = B.TABLE_NAME(+);
    the entire code being executed is:
    DECLARE
    EX BOOLEAN;
    CNT NUMBER;
    SQL1 VARCHAR2(4000);
    FLEN NUMBER;
    BSIZE NUMBER;
    TABNAME VARCHAR2(4000);
    DEFDIR VARCHAR2(4000);
    RSZ VARCHAR2(4000);
    ECODE NUMBER(38);
    ERRMSG VARCHAR2(4000);
    CURSOR C1 IS
    SELECT A.TABLE_NAME, A.DEFAULT_DIRECTORY_NAME, B.LOCATION,
    CASE
    WHEN INSTR(A.ACCESS_PARAMETERS,'RECORDS FIXED')<>0 THEN
    SUBSTR(A.ACCESS_PARAMETERS,INSTR(A.ACCESS_PARAMETERS,'RECORDS FIXED')+14,3)
    ELSE NULL
    END RSZ FROM USER_EXTERNAL_TABLES A, USER_EXTERNAL_LOCATIONS B
    WHERE A.TABLE_NAME = B.TABLE_NAME(+);
    TYPE C1_TYPE IS TABLE OF C1%ROWTYPE;
    REC1 C1_TYPE;
    BEGIN
    OPEN C1;
    FETCH C1 BULK COLLECT INTO REC1;
    FOR I IN REC1.FIRST .. REC1.LAST
    LOOP
    UTL_FILE.FGETATTR(NVL(REC1(I).DEFAULT_DIRECTORY_NAME,'CARDSLOAD'),
    REC1(I).LOCATION, EX, FLEN, BSIZE);
    IF EX THEN
    IF INSTR(TO_CHAR(REC1(I).RSZ),'\.')<>0 THEN
         DBMS_OUTPUT.PUT_LINE('INVALID RECORDSIZE OR CORRUPTED FILE');
         END IF;
         DBMS_OUTPUT.PUT_LINE('Table Name: ' || TO_CHAR(REC1(I).TABLE_NAME));     
    DBMS_OUTPUT.PUT_LINE('File Exists '||REC1(I).LOCATION);
         DBMS_OUTPUT.PUT_LINE('File Length: ' || TO_CHAR(FLEN));
         DBMS_OUTPUT.PUT_LINE('Record Size: ' || TO_CHAR(REC1(I).RSZ));
    DBMS_OUTPUT.PUT_LINE('Block Size: ' || TO_CHAR(BSIZE));
         DBMS_OUTPUT.PUT_LINE('# RECORDS: ' || FLEN/TO_NUMBER(REC1(I).RSZ));
         BEGIN
         CNT:='';
         SQL1:='SELECT COUNT(*) FROM '|| REC1(I).TABLE_NAME;
         EXECUTE IMMEDIATE SQL1 INTO CNT;
    DBMS_OUTPUT.PUT_LINE('SELECT COUNT FOR: ' || REC1(I).TABLE_NAME||' = '||CNT);
         EXCEPTION
         WHEN OTHERS THEN
         DBMS_OUTPUT.PUT_LINE('SELECT COUNT FAILED FOR: ' || REC1(I).TABLE_NAME);
         ECODE := SQLCODE;
    ERRMSG := SQLERRM;
    DBMS_OUTPUT.PUT_LINE(ECODE||' '||ERRMSG);
         END;
    ELSE
    DBMS_OUTPUT.PUT_LINE(REC1(I).TABLE_NAME||' '||REC1(I).LOCATION||' File Does Not Exist');
    END IF;
         DBMS_OUTPUT.PUT_LINE('-----------------------------------------------------');
    END LOOP;
    CLOSE C1;
    EXCEPTION
    WHEN OTHERS THEN RAISE;
    END;
    Any ideas why Solaris but not Windows would have this problem?
    Thanks,
    Victor

    Check out Bug 4715104 - ORA-22835 / truncated data from USER/ALL/DBA_EXTERNAL_TABLES

Maybe you are looking for