Ora 06502 pl sql numeric or value error invalid lob locator specified

clob to blob at some instance fails with PL/SQL: numeric or value error: invalid LOB locator specifi I am having an existing function to convert clob to blob as below — Description : Converts CLOB to BLOB function clob_to_blob (p_clob in clob) return blob is vOffset number default 1; vAmount number default 4096; vOffsetWrite […]

Содержание

  1. clob to blob at some instance fails with PL/SQL: numeric or value error: invalid LOB locator specifi
  2. Answers
  3. CONVERTTOBLOB Procedure

clob to blob at some instance fails with PL/SQL: numeric or value error: invalid LOB locator specifi

I am having an existing function to convert clob to blob as below

— Description : Converts CLOB to BLOB

function clob_to_blob (p_clob in clob) return blob is

vOffset number default 1;

vAmount number default 4096;

vOffsetWrite number default 1;

kProcedureName constant varchar2(61) := kMyPackage||’.clob_to_blob’;

dbms_lob.read(p_clob, vAmount, vOffset, vBuffer);

dbms_lob.write(vBlob, vAmountWrite, vOffsetwrite, utl_raw.cast_to_raw(vBuffer));

vOffsetWrite := vOffsetWrite + vAmountWrite;

vOffset := vOffset + vAmount;

when no_data_found then

when others then

sysmsg.add_error_msg(sysmsg.g_event_id, kProcedureName, sqlerrm, sqlcode);

‘Unable to read CLOB (bytes read: ‘||vAmountWrite||’, offset: ‘||vOffsetwrite||’)’);

At what instance can this fail with PL/SQL: numeric or value error: invalid LOB locator specified

Answers

. How is the function being called when it fails?

. Are dblinks involved?

. Are connection pools involved?

. How long does the function take to fail?

. What database version or versions are involved?

. Are all databases involved Oracle database?

. Does it work under different circumstances?

. Does it ever work?

. Can you copy/paste a real errorstack from a failure or is the title the whole errorstack verbatim?

You may be focused on the wrong error in the errors you posted. There is an ORA-22 that is listed in the title.

00022, 00000, «invalid session ID; access denied»

// *Cause: Either the session specified does not exist or the caller

// does not have the privilege to access it.

// *Action: Specify a valid session ID that you have privilege to access,

// that is either you own it or you have the CHANGE_USER privilege.

Two MAJOR problems with what you posted:

First — get rid of this GARBAGE so Oracle can properly report any exceptions

Second — if you had just read the Oracle docs BEFORE you try to use Oracle functionality you would find Oracle ALREADY HAS that function.

So there is no need to write your own.

In the future PLEASE RTFM when you want to learn about Oracle functionality.

CONVERTTOBLOB Procedure

Then if you read the spec for the ‘amount’ parameter you will find this:

No need to reinvent the wheel.

No need for any looping.

BIG NEED to read the docs.

Sorry for not posting entire detail

Version is Oracle Database 12c Standard Edition Release 12.1.0.2.0

How long does the function take to fail? — This is immediately reflected in Front end Oracle APex which calls view

All database involved are Oracle databases across schemas defined as views

Function is called from view like schema.package.function as below

Yes it works for certain set of organisations and fails for others while debugging found when commenting clob_to_blob(csv_CLOBContent) it works. Hence arrived this will be the issue. Still trying to find out why this fails for specific organisations.

(case when (csv_FileName is not null) then . . .

ORA-06502: PL/SQL: numeric or value error: invalid LOB locator specified: ORA-22275

It is called in Oracle apex as

when 0 then null

from — This view is defined in top portion

This is an existing code which is being maintained and hence not created anything new

This is working most of the times but when it fails at some times for some ofthe organisation unable to really debug what causes the entire issue

There are 2 different exceptions reported:

ORA-06502: PL/SQL: numeric or value error: invalid LOB locator specified: ORA-22275

This is likely the root error and caused by passing an invalid LOB pointer (aka locator) to the function.

ORA-14552: cannot perform a DDL, commit or rollback inside a query or DML

This is likely caused by your calls in the exception handler to the error logging package, which does DML into error log table(s).

. so there’s a typo in the title then. No ORA-22 in actual error stack. *sigh*

The unmodified error stack will give you line numbers that raised each part of the error stack, this removes all guessing so why are you deciding to swallow it?

Scrap the when others then.. or reraise the original error stack at the end of it (But if you are going do to that, make sure the calls you are doing in the exception handling are actually legal to make, it very much sounds like they’re not)

I suspect your code fails for the following reasons.

An exception is occurring in conversion for some reason. It isn’t a no data found one, so hits the when others. This logs data and calls commit, which causes ORA-14552, as you can’t commit whilst running a select or other DML, for a very good reason, default transaction isolation is read committed, meaning data could change, which breaks the ACID model.

The transaction issue causes your temporary lob locator to be invalid.

Solution, remove the WHEN OTHERS. sysmsg rubbish, or use the DBMS_LOB version rp suggests, you’ll see what the problem is. Other possible solution is to make the sysmsg transaction autonomous, which it should be anyway.

I have no idea what that means or why you think it is relevant.

That ‘existing code’ has a bug. The only way to fix that bug is to fix the code.

The BEST way to fix the code is to use Oracle’s function to do the conversion.

What is it that isn’t clear about that?

If you have some plan to fix the code without modifying it we would all be very interested in how you think you can do that.

What ’causes the entire issue’ is that someone chose to write their own function (and did a VERY POOR job of it) when Oracle already has one and provides support for it.

Even if you needed to use a function with that same name and signature the TRIVIAL solution is to replace the body of the function with a simple call to the Oracle supplied function.

Then the calling code won’t know the difference and there will be NOTHING to ‘debug’.

Источник

  • ORA-22275 :invalid LOB locator specified error while loading BLOBs/CLOBS.

    Hello All,
    I am trying to load BLOB/CLOB data from a client oracle DB to the oracle db on our side,we are using ODI version 10.1.3.5.6,which reportedly has the issue of loading BLOB/CLOBS solved.I am using
    The extraction fails in the loading stage when inserting data into the C$ table with the following error.
    «22275:99999 :java.sql.BatchUpdateException:ORA-22275:Invalid LOB locator specified».
    Kindly let me know how I can resolve this issue as the requirement to load this data is very urgent.
    Thanks,
    John

    One alternate way can be done out of ODI as ODI is still not able to resolve this issue. You can trim these fields (CLOB/BLOB) and push this data as separate fields into ODI and at the reporting end you can again concatenate them.
    May be this may solve your problem ….it solved mine.
    —XAT                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

  • DBMS_LOB.ISOPEN throws the error ora-22275 invalid lob locator

    DBMS_LOB.ISOPEN throws the error below error.
    ora-22275 invalid lob locator
    The below assume that i am getting the v_lob_length as empty. But i am getting error when it comes to DBMS_LOB.ISOPEN.
    Please correct me if i am wrong.
    here is my code:
    DBMS_LOB.createtemporary(v_xml_clob, TRUE);
    DBMS_LOB.open(v_xml_clob, DBMS_LOB.lob_readwrite);
    SELECT  DBMS_XMLGEN.getxml (‘SELECT object_name, object_type from dba_objects where rownum <= 5’)
    INTO    v_xml_clob
    FROM    DUAL;
    v_lob_length    := NVL(DBMS_LOB.getlength(v_xml_clob),0);
    v_index       := 1;
    fnd_file.put_line(fnd_file.log,’v_lob_length : ‘||v_lob_length);
    WHILE v_index <= v_lob_length
    LOOP
        v_read_cnt   := 32767;
        DBMS_LOB.read (
              v_xml_clob,
              v_read_cnt,
              v_index,
              v_chunk
        fnd_file.put(fnd_file.output,v_chunk);
        v_index := v_index + v_read_cnt;
    END LOOP;
    IF DBMS_LOB.ISOPEN(v_xml_clob) = 1
    THEN
        DBMS_LOB.close(v_xml_clob);
        DBMS_LOB.freetemporary(v_xml_clob);
    END IF;

    Most likely v_xml_clob is NULL so you’d rather check IF v_xml_clob IS NOT NULL AND DBMS_LOB.ISOPEN(v_xml_clob) = 1
    THENbye
    TPD

  • ORA-22275: invalid LOB locator specified

    Hello,
    I use Oracle 11.2.0.3. APEX 4.2.2… Listener 2.0.3 …. Glassfish server 4.0.
    When I run this procedure ( that is used in this tutorial )
    I get ORA-22275: invalid LOB locator specified.
    The error persists over Glass fish 3.0.2, Listener 2.0.1 and 2.0.2.
    Also, I installed this patch 16803775, but to not avail.
    declare
            v_mime  VARCHAR2(48);
            v_length  NUMBER;
            v_file_name VARCHAR2(2000);
            Lob_loc  BLOB;
    BEGIN
            SELECT MIMETYPE, CONTENT, filename,DBMS_LOB.GETLENGTH(content)
                    INTO v_mime,lob_loc,v_file_name,v_length
                    FROM image
                    WHERE id = 70;
                     htp.init;
                  — set up HTTP header
                        — use an NVL around the mime type and
                        — if it is a null set it to application/octect
                        — application/octect may launch a download window from windows
                        owa_util.mime_header( nvl(v_mime,’application/octet’), FALSE );
                    — set the size so the browser knows how much to download
                    htp.p(‘Content-length: ‘ || v_length);
                    — the filename will be used by the browser if the users does a save as
                    htp.p(‘Content-Disposition:  attachment; filename=»‘||replace(replace(substr(v_file_name,instr(v_file_name,’/’)+1),chr(10),null),chr(13),null)|| ‘»‘);
                    — close the headers  
                    owa_util.http_header_close;        
                    owa_util.http_header_close;
                    — download the BLOB
                    wpg_docload.download_file( Lob_loc );
    end  ;
    Any help pls, in getting that procedure works ?
    Regards,
    Fateh

    replace this statement
    select empty_clob() into c_xml from dual for update;
    with
    dbms_lob.createtemporary(c_xml, TRUE);

  • ORA-22275: invalid LOB locator specified on trigger

    I have a trigger which copies a blob on insert to one table to another.
    CREATE OR REPLACE TRIGGER SWZTPRO.TSWTMPI_BEFORE_INSERT
    BEFORE INSERT
    ON SWZTPRO.TO_TSWTMPI
    REFERENCING NEW AS NEW OLD AS OLD
    FOR EACH ROW
    DECLARE
    discriminator TO_TSWCRUL.BTC_DIS%TYPE;
    discriminator:=:NEW.BTC_DIS;
    insert into …..
    If using after insert this triggerworks, but if the trigger fails for any reason, the client does not recieve the error.
    If using before insert this fails:
    insert into table, use before insert trigger
    ORA-22275: invalid LOB locator specified
    ORA-06512: at «SWZTPRO.TSWTMPI_BEFORE_INSERT», line 108
    ORA-22275: invalid LOB locator specified
    ORA-04088: error during execution of trigger ‘SWZTPRO.TSWTMPI_BEFORE_INSERT’
    Any help would be appreciated

    I have also used a varaiation tirgger to do an instead of on insert on a view and I get the following error:
    ORA-25008: no implicit conversion to LOB datatype in instead-of trigger

  • ORA-22275: invalid LOB locator specified in a function

    Hello all!!!
    I am having a little problem with a function that returns a blob… When I call the function, I get that error… Here is the function (I took all the exception management code to clear it up a little…)
    <CODE>
    FUNCTION f_getfileblob (p_id IN NUMBER,
    p_application IN VARCHAR2,
    p_subject IN VARCHAR2)
    RETURN BLOB
    IS
    v_table_name VARCHAR2(50);
    v_sql_string VARCHAR2(1000);
    lobfile BLOB := empty_blob();
    v_error NUMBER;
    BEGIN
    SELECT TABLE_NAME INTO v_table_name FROM ORACLE_TEXT_FILE WHERE APPLICATION = p_application AND SUBJECT = p_subject;
    v_sql_string := ‘SELECT FILE_BLOB FROM ‘ || v_table_name || ‘ WHERE id = :1’;
    EXECUTE IMMEDIATE v_sql_string INTO lobfile USING p_id;
    RETURN lobfile;
    END;
    </CODE>
    So, in this function, the first select is to find the name of the table in which I store my blobs (I’m trying to do something generic and cross application). Once I have that name, I can do the select of the blob. I can only use dynamic SQL because of the table name that is not known in advance.
    I tried this function with
    DBMS_LOB.CREATETEMPORARY(LOBFILE, TRUE, DBMS_LOB.CALL);
    to create the lob at the begining, but this returns another error… (i tried with and without the initialisation of the blob, empty_blob())
    ORA-24801: illegal parameter value in OCI lob function. But I don’t even know if it would help…
    Can somebody please help me?
    Thanks and best regards
    Neil.

    Sorry about that, error came from elsewhere…
    Thanks anyway
    Best regards
    Neil.

  • ORA-22275: invalid LOB locator specified problem

    Hi
    Can anybody point me in the right direction.. I am NOT using clob and blob anywhere in my operation.. All I am doing is plain inserts from arrays.. and it gives me this error.
    Here is the code:
    Connection conn = null;
              Statement stmt = null;
              PreparedStatement ps = null;
              CallableStatement cs= null;
              ResultSet rs = null;
              Connection conn1 = null;
              Statement stmt1 = null;
              CallableStatement cs1= null;
              ResultSet rs1 = null;
    conn = DataSrc.getDataSource().getConnection();
                   stmt =conn.createStatement();
                   conn1 = DataSrc.getDataSource().getConnection();
                   stmt1 =conn1.createStatement();
                   rs = stmt.executeQuery(sql1);
                   while (rs.next()) {
                        var10 = rs.getString(1);                    
                   cs=conn.prepareCall(«{call proc1}»);
                   cs.execute();
                   cs.close();
                   stmt = conn.createStatement();
                   ps = conn.prepareStatement(sql);
                   for (int pl = 0; pl < ij; pl++) {
                        var2 = array1[pl];
                        var3 = array2[pl];
                        var4 = array3[pl];
                        var5 = array4[pl];
                        var6 = “ABC”;
                        var7 = “ABC”;
                        var8 = array8[pl];
                        var9 = “ABC”;
                        var1 = var2.substring(0,6);
                        var2 = var2.substring(var2.length()-1);
                        var3 = var3.replace(«‘»,»»);
                        if (var9.length()<5) {
                             var9 = «00» + var9;
                        if (var9.length()<6) {
                             var9 = «0» + var9;
                        String sql2 = «xxxxxx»;
                        rs1 = stmt1.executeQuery(sql2);
                        while (rs1.next()) {
                             var11 = rs1.getString(1);                    
                                            if (!var2.equals(var8)) {
                             ps.setString(1, var1);
                             ps.setString(2, var2);
                             ps.setString(3, var3);
                             ps.setString(4, var4);
                             ps.setString(5, var5);
                             ps.setString(6, var6);
                             ps.setString(7, var7);
                             ps.setString(8, var8);
                             ps.setString(9, var9);
                             ps.setString(10, var10);
                             ps.setString(11, var11);
                             ps.executeUpdate();
                   ps.close();
                   cs=conn.prepareCall(«{call xxxxxxxxx}»);
                   cs.execute();
                   cs.close();               
                   stmt.executeUpdate(«COMMIT»);
                   stmt.close();
                   conn.close();
                   rs1.close();
                   stmt1.close();
                   conn1.close();

    cs=conn.prepareCall(«{call proc1}»);
    cs=conn.prepareCall(«{call xxxxxxxxx}»);check those procedures, might be invloved clob and blob operation….

  • ORA-22275 Invalid lob locator when using CLOB from a view

    Hi,
    I am having problems when passing a CLOB from a «Union all» view to a function. I get an ORA-22275 error when trying to construct an XmlType from the CLOB and
    the CLOB originates from a view. If the CLOB originates from a table, eveyting works fine. Here is the code, that reproduces the problem
    CREATE TABLE testclob
        (field1                         CLOB)
    — insert some data
    insert into testclob values (‘<a/>’);
    — Define a clob view over some tables
    create or replace view v_testclob
    (field1)
    as
    select field1 from testclob
    union all
    select field1 from testclob; — in reallity I use different tables
    — Creat a functions that proceses the CLOB
    CREATE OR REPLACE
    function MyFunction(v_myClob clob) return VARCHAR2
    IS
       myXML XMLTYPE;
    BEGIN
      select xmltype(v_myClob) into myxml from dual; — the view crashes ** HERE **
      — code ommited
      return ‘some data’;
    END;
    — Try to use the function:
    — Selecting from a table works OK
    select myfunction(field1) from testclob;
    — Selecting from the view crashes
    select myfunction(field1) from v_testclob;
    Error: ORA-22275: invalid LOB locator specified ORA-22275: invalid LOB locator specified ORA-06512: at «D_TEST.MYFUNCTION», line 6
    — I using the following version:
    select * from v$version;
    — Oracle9i Enterprise Edition Release 9.2.0.1.0 — Production      
    — PL/SQL Release 9.2.0.1.0 — Production                           
    — CORE     9.2.0.1.0     Production                                       
    — TNS for 32-bit Windows: Version 9.2.0.1.0 — Production          
    — NLSRTL Version 9.2.0.1.0 — Production The only workaround I have found is to use substr
      select xmltype(dbms_lob.substr(v_myClob)) into myxml from dual; — workaround.. but this mght trucnate my data.
    What am I doing wrong?
    Matej

    You need to apply the latest patchset for your version of the database on your version of the operating system:
    SQL> CREATE TABLE testclob
      2      (field1                         CLOB)
      3
    SQL> /
    Table created.
    SQL>
    SQL> — insert some data
    SQL> insert into testclob values (‘<Data>Testing</Data>’)
      2  /
    1 row created.
    SQL>
    SQL> — Define a clob view over some tables
    SQL>
    SQL> create or replace view v_testclob
      2  (field1)
      3  as
      4  select field1 from testclob
      5  union all
      6  select field1 from testclob
      7  /
    View created.
    SQL>
    SQL> — Creat a functions that proceses the CLOB
    SQL>
    SQL> CREATE OR REPLACE
      2  function MyFunction(v_myClob clob) return VARCHAR2
      3  IS
      4     myXML XMLTYPE;
      5  BEGIN
      6
      7    select xmltype(v_myClob) into myxml from dual; — the view crashes ** HERE **
      8    — code ommited
      9    return ‘some data’;
    10  END;
    11
    12  /
    Function created.
    SQL> — Try to use the function:
    SQL> — Selecting from a table works OK
    SQL> select myfunction(field1) from testclob;
    MYFUNCTION(FIELD1)
    some data
    SQL>
    SQL>
    SQL> — Selecting from the view crashes
    SQL> select myfunction(field1) from v_testclob;
    MYFUNCTION(FIELD1)
    some data
    some data
    SQL> disconnect
    Disconnected from Oracle9i Enterprise Edition Release 9.2.0.7.0 — Production
    With the Partitioning, OLAP and Oracle Data Mining options
    JServer Release 9.2.0.7.0 — Production
    SQL>

  • ORA-22275 invalid LOB locator

    I’ve tried to append couple of BLOB fields from one table and then update it to a record in another table. I got the following error. Does anyone know why?
    CHECK POINT 1
    begin
    ERROR at line 1:
    ORA-06502: PL/SQL: numeric or value error: invalid LOB locator specified:
    ORA-22275
    ORA-06512: at «SYS.DBMS_LOB», line 753
    ORA-06512: at «RBSSDEV.PG_TB_COMMENT_DETAIL», line 57
    ORA-06512: at line 2
    My store procedure is :
    PROCEDURE SP_Insert_Comment_Detail
    ( v_CommentOID IN TB_COMMENT_DETAIL.COMMENTOID%TYPE ,
    v_DBName IN TB_COMMENT_DETAIL.DBNAME%TYPE ,
    v_ApplicationOID IN TB_COMMENT_DETAIL.APPLICATIONOID%TYPE ,
    v_Comments IN TB_COMMENT_DETAIL.COMMENTS%TYPE ,
    v_Created IN TB_COMMENT_DETAIL.CREATED%TYPE ,
    v_UserID IN TB_COMMENT_DETAIL.USERID%TYPE
    IS
    lv_CommentsBlob BLOB := EMPTY_BLOB;
    lv_CommentBlob BLOB := EMPTY_BLOB;
    lv_NewComment VARCHAR2(1) := ‘N’;
    CURSOR CommentDetail_cur IS
    SELECT Comments
    FROM TB_COMMENT_DETAIL
    WHERE CommentOID = v_CommentOID
    ORDER BY RecDate, DBName;
    CURSOR Comment1_cur IS
    SELECT Comments
    FROM COMMENT1
    WHERE CommentOID = v_CommentOID FOR UPDATE;
    BEGIN
    DBMS_LOB.CreateTemporary(lv_CommentBlob, TRUE, DBMS_LOB.CALL);
    OPEN CommentDetail_cur;
    FETCH CommentDetail_cur INTO lv_CommentBlob;
    IF CommentDetail_cur%NOTFOUND THEN
    lv_NewComment := ‘Y’;
    END IF;
    CLOSE CommentDetail_cur;
    INSERT INTO TB_COMMENT_DETAIL
    (CommentOID, RecDate, DBName, ApplicationOID,
    Comments, Created, UserID)
    VALUES
    (v_CommentOID, SYSDATE, v_DBName, v_ApplicationOID,
    v_Comments, v_Created, v_UserID);
    IF lv_NewComment = ‘Y’ THEN
    INSERT INTO Comment1
    VALUES (v_CommentOID, v_ApplicationOID, v_Comments, v_Created, v_UserID);
    COMMIT;
    ELSE
    DBMS_LOB.CreateTemporary(lv_CommentBlob, TRUE, DBMS_LOB.CALL);
    DBMS_LOB.CreateTemporary(lv_CommentsBlob, TRUE, DBMS_LOB.CALL);
    OPEN Comment1_cur;
    FETCH Comment1_cur INTO lv_CommentsBlob;
    — Empty the Comments field of the Comment1 table
    IF Comment1_cur%FOUND THEN
    DBMS_OUTPUT.PUT_LINE(‘CHECK POINT 1’);
    DBMS_LOB.TRIM(lv_CommentsBlob, 0);
    DBMS_OUTPUT.PUT_LINE(‘CHECK POINT 2’);
    END IF;
    OPEN CommentDetail_cur;
    LOOP
    FETCH CommentDetail_cur INTO lv_CommentBlob;
    EXIT WHEN CommentDetail_cur%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(‘CHECK POINT 3’);
    DBMS_LOB.APPEND(lv_CommentsBlob, lv_CommentBlob);
    DBMS_OUTPUT.PUT_LINE(‘CHECK POINT 4’);
    END LOOP;
    COMMIT;
    CLOSE Comment1_cur;
    CLOSE CommentDetail_cur;
    END IF;
    END SP_Insert_Comment_Detail;

    Sorry about that, error came from elsewhere…
    Thanks anyway
    Best regards
    Neil.

  • DBMS_LOB.CONVERTTOBLOB invalid LOB locator specified: ORA-22275

    Hi all,
    the following code has been working great on 11g (and apex.oracle.com)
    now when I try to use this function under 10g XE
    I get following error :
    ORA-06502: PL/SQL: numeric or value error: invalid LOB locator specified: ORA-22275
    ORA-06512: at «SYS.DBMS_LOB», line 696
    ORA-06512: at «RIGHTSHOP.C2B», line 14line 14 being the line with DBMS_LOB.CONVERTTOBLOB
    any ideas ?
    CREATE OR REPLACE FUNCTION c2b( p_clob IN CLOB )
          RETURN BLOB
    is
      temp_blob   BLOB;
      dest_offset NUMBER  := 1;
      src_offset  NUMBER  := 1;
      amount      INTEGER := dbms_lob.lobmaxsize;
      blob_csid   NUMBER  := dbms_lob.default_csid;
      lang_ctx    INTEGER := dbms_lob.default_lang_ctx;
      warning     INTEGER;
    BEGIN
    DBMS_LOB.CREATETEMPORARY(lob_loc=>temp_blob, cache=>TRUE);
      DBMS_LOB.CONVERTTOBLOB(temp_blob, p_clob,amount,dest_offset,src_offset,blob_csid,lang_ctx,warning);
      return temp_blob;
    END;Kr
    Martin

    Can’t reproduce
    SQL> CREATE OR REPLACE FUNCTION c2b( p_clob IN CLOB )
    RETURN BLOB
    is
    temp_blob BLOB;
    dest_offset NUMBER := 1;
    src_offset NUMBER := 1;
    amount INTEGER := dbms_lob.lobmaxsize;
    blob_csid NUMBER := dbms_lob.default_csid;
    lang_ctx INTEGER := dbms_lob.default_lang_ctx;
    warning INTEGER;
    BEGIN
    DBMS_LOB.CREATETEMPORARY(lob_loc=>temp_blob, cache=>TRUE);
    DBMS_LOB.CONVERTTOBLOB(temp_blob, p_clob,amount,dest_offset,src_offset,blob_csid,lang_ctx,warning);
    return temp_blob;
    END;  2    3    4    5    6    7    8    9   10   11   12   13   14   15   16 
    17  /
    Function created.
    SQL> declare
      2     b blob;
      3     c clob;
      4  begin
      5     c := ‘x’;
      6     b := c2b (c);
      7  end;
      8  /
    PL/SQL procedure successfully completed.
    SQL> and my version (also XE)
    SQL> select *
      2    from v$version
      3  /
    BANNER
    Oracle Database 10g Express Edition Release 10.2.0.1.0 — Product
    PL/SQL Release 10.2.0.1.0 — Production
    CORE     10.2.0.1.0     Production
    TNS for Linux: Version 10.2.0.1.0 — Production
    NLSRTL Version 10.2.0.1.0 — Production

  • ORA-06502: PL/SQL: numeric or value error: invalid LOB locator specified:

    «ORA-06502: PL/SQL: numeric or value error: invalid LOB locator specified: ORA-22275»
    I use the procedure to convert the documents if it is not already converted before using procedure as follows
    PROCEDURE «STARDOC».»HTMLOUTPUT» (
    «DOCID» IN NUMBER) IS
    mklob clob;
    doccount number;
    errorcode number;
    errormessage varchar2(200);
    BEGIN — executable part starts here
    SELECT COUNT(document_id) INTO doccount FROM docviewhtml where document_id=docid;
    —dbms_output.put_line(doccount);
    if doccount=0 then
         dbms_output.put_line(‘Document Not Found: Converting ‘||docid);
         —If document is not found run document coversion routine
         ctx_doc.filter(‘idxdocuments’,docid, mklob,FALSE);
         INSERT INTO docviewhtml(document_id, html) VALUES (docid, mklob);
         COMMIT;
    elsif doccount=1 then
         —return;
         dbms_output.put_line(‘Document Found’);
         —if document id found then return the document content
         null;
    else
         —dbms_output.put_line(‘Error occured’);
         —need to deal with duplicate documents
         null;
    end if;
    dbms_lob.freetemporary(mklob);
    EXCEPTION
    —rollback when an exception occurs
         WHEN OTHERS THEN
              errorcode:=SQLCODE;
              errormessage:=SQLERRM;     
              dbms_output.put_line(sqlcode || ‘:’ ||sqlerrm);
              ROLLBACK;
              LOGERROR(errorcode,errormessage);
    END «HTMLOUTPUT»;
    i get the error when i convert large documents
    «ORA-06502: PL/SQL: numeric or value error: invalid LOB locator specified: ORA-22275»
    what is wrong. please help!

    «ORA-06502: PL/SQL: numeric or value error: invalid
    LOB locator specified: ORA-22275″
    PROCEDURE «STARDOC».»HTMLOUTPUT» (
    «DOCID» IN NUMBER) IS
    mklob clob;
         ctx_doc.filter(‘idxdocuments’,docid, mklob,FALSE);
    INSERT INTO docviewhtml(document_id, html) VALUES (docid, mklob);I think You forget to initialize variable mklob.
    You can do it, assigning the empty_clob().

  • IR: ORA-20001: get_dbms_sql_cursor error ORA-00904: : invalid identifier

    Hi everyone,
    has anyone else had this error which has been driving me round the bend during the last three days?
    I have an interactive report which used to work fine.
    Now it happens (when the page loads/a filter is en- or disabled) that — from time to time, but unpredictable — I receive
    ORA-20001: get_dbms_sql_cursor error ORA-00904: : invalid identifier
    The report is based on a table function.
    I will try to set up a testcase and post the link here, but so far I haven’t managed to force the error to occur.
    But maybe someone else has already bumped into this kind of error? I would be grateful for any hints!
    Best regards,
    Sabine
    Application Express 4.1.0.00.32
    Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 — 64bit Production

    Hi Jari,
    I changed the type definition (the return type of the table function) and extended the select list in the source of the IR.
    I do not use ‘select *’ but reference every column explicitly. So APEX easked me whether to add the new column.
    I also tried deleting in recreating the region, but no luck.
    Any more ideas?
    Best regards,
    Sabine

  • ERROR: ORACLE prepare error: ORA-00936: missing expression

    Hello,
    I am required to run «pass-through» Oracle SQL, to extract data from tables into SAS for processing and manipulation. My code (attached) reads and writes (executes) but with zero records to test first. I cannot get past the Prepare Error.
    The query is very much like other queries that seem to work, but I cannot get past this prepare error. I have no other access to individauls with adequate knowledge of PL SQL, and as a last stop hoped others in the forum could quickly spot the source of errror.
    Thanks very much in advance for any assistance.
    Jeff
    1 ;*’;*»;*/;quit;run;
    2 OPTIONS PAGENO=MIN;
    3 %LET _CLIENTTASKLABEL=%NRBQUOTE(rx_biplr_v3_2);
    4 %LET _EGTASKLABEL=%NRBQUOTE(rx_biplr_v3_2);
    5 %LET _CLIENTPROJECTNAME=%NRBQUOTE();
    6 %LET _SASPROGRAMFILE=;
    7
    8 ODS _ALL_ CLOSE;
    NOTE: Some of your options or statements may not be supported with the Activex or Java series of devices. Graph defaults for these
    drivers may be different from other SAS/GRAPH device drivers. For further information, please contact Technical Support.
    9 OPTIONS DEV=ACTIVEX;
    10 FILENAME EGHTML TEMP;
    NOTE: Writing HTML(EGHTML) Body file: EGHTML
    11 ODS HTML(ID=EGHTML) FILE=EGHTML ENCODING=’utf-8′ STYLE=EGDefault
    11 ! STYLESHEET=(URL=»file:///C:/Program%20Files/SAS/Shared%20Files/BIClientStyles/EGDefault.css»)
    11 ! ATTRIBUTES=(«CODEBASE»=»http://www2.sas.com/codebase/graph/v91/sasgraph.exe») NOGTITLE NOGFOOTNOTE GPATH=&sasworklocation
    11 ! ;
    12
    13 %gaccessible;
    14 /********************************************************/
    15 * RX_BIPLR_V3.SAS ;
    16 /********************************************************/
    17
    18 dm ‘log;clear;out;clear’;
    19 options linesize =120;
    20 Option obs=0 NoReplace;
    21
    22 ****************************************************************************************;
    23 *Date Programmer Reviewed By WHAT WAS DONE;
    24 *—— ————— ———— ——————————————;
    25 *2005 David Boyd Program creation for test population;
    26 *;
    27 *02/06/2006 Ivon Jones Modified to include total population;
    28 *;
    29 *07/20/2006 Ivon Jones Identified data elements for exclusion;
    30 * or inclusion for consolidation with ;
    31 * Robin’s report;
    32 *;
    33 *08/18/2006 Ivon Jones Updated the Specific Therapeutic Classes;
    34 * 10-2009 J Shaf — modified to extract actual or potential Bipolar Dx from UBH and Medical Claims;
    35 ****************************************************************************************;
    36
    37
    38
    39 *%let allclmorgn = (‘M’,’A’) ; /* all claims origin code */
    40 %let begdate=’01SEP2009’d;
    41 %let enddate=’30SEP2009’d;
    42 %let q = %str(%’) ;
    43
    44
    45 data _null_ ;
    46 call symput(‘fdos’,put(intnx(‘month’,»&begdate»d,-27,’beginning’), date9.) ) ;
    47 call symput(‘ldos’,put(intnx(‘month’,»&enddate»d,-0,’ending’), date9.) ) ;
    48 run ;
    NOTE: DATA statement used (Total process time):
    real time 0.00 seconds
    2 The SAS System 11:44 Friday, October 30, 2009
    cpu time 0.01 seconds
    49
    50
    51
    52 **************************************************************;
    53 * ??Use the data _null_ step to create a macro variable for the ;
    54 * year and month based on the ldos macro variable in the data ;
    55 * step above?? ;
    56 **************************************************************;
    57
    58
    59 data _null_ ;
    60 if month(«&ldos»d) < 10
    61 then call symput(‘yr_mo’,compress(year(«&ldos»d) || ‘0’ || month(«&ldos»d) ) ) ;
    62 else call symput(‘yr_mo’,compress(year(«&ldos»d) || month(«&ldos»d) ) ) ;
    63 run ;
    NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column).
    61:39 61:64 62:39 62:57
    NOTE: DATA statement used (Total process time):
    real time 0.00 seconds
    cpu time 0.00 seconds
    64
    65 *%put &biplr_dx;
    66 %put &begdate ;
    ’01SEP2009’d
    67 %put &enddate ;
    ’30SEP2009’d
    68 %put &fdos ;
    01JUN2007
    69 %put &ldos ;
    30SEP2009
    70 %put &q ;
    71
    72
    73 libname biplr’/home/jshafi01/projects/adhoc/biplr_dprsn/data’;
    NOTE: Libref BIPLR was successfully assigned as follows:
    Engine: V9
    Physical Name: /home/jshafi01/projects/adhoc/biplr_dprsn/data
    74 libname rosdwp oracle user=»&oracle_user.» pass=»&oracle_pass.» buffsize=32767 path=’rosdwp’;
    NOTE: Libref ROSDWP was successfully assigned as follows:
    Engine: ORACLE
    Physical Name: rosdwp
    75
    76 data work.biplr_up_v1;
    77 attrib mbr_id length=$26;
    78 set biplr.biplr_ubh_med_v1;
    79 run;
    NOTE: There were 0 observations read from the data set BIPLR.BIPLR_UBH_MED_V1.
    NOTE: The data set WORK.BIPLR_UP_V1 has 0 observations and 1 variables.
    NOTE: DATA statement used (Total process time):
    real time 0.01 seconds
    3 The SAS System 11:44 Friday, October 30, 2009
    cpu time 0.00 seconds
    80
    81 proc contents;
    82 run;
    NOTE: PROCEDURE CONTENTS used (Total process time):
    real time 0.03 seconds
    cpu time 0.03 seconds
    83
    84 proc datasets
    85      library = rosdwp nolist;
    86      delete biplr_up_v1;
    87 quit;
    NOTE: Deleting ROSDWP.BIPLR_UP_V1 (memtype=DATA).
    NOTE: PROCEDURE DATASETS used (Total process time):
    real time 3.74 seconds
    cpu time 0.03 seconds
    88
    89 proc datasets
    90      library=work nolist;
    91      copy out = rosdwp move;
    92      select biplr_up_v1 ;
    93 quit;
    NOTE: Moving WORK.BIPLR_UP_V1 to ROSDWP.BIPLR_UP_V1 (memtype=DATA).
    NOTE: SAS variable labels, formats, and lengths are not written to DBMS tables.
    NOTE: There were 0 observations read from the data set WORK.BIPLR_UP_V1.
    NOTE: The data set ROSDWP.BIPLR_UP_V1 has 0 observations and 1 variables.
    NOTE: PROCEDURE DATASETS used (Total process time):
    real time 0.32 seconds
    cpu time 0.04 seconds
    94
    95
    96
    97 *****************************************************************************;
    98
    99 *execute(commit) by rosdwp
    100 ******************************************************************************;
    101
    102
    103 proc SQL noprint ;
    104 connect to oracle as rosdwp (user=»&oracle_user.» password=»&oracle_pass» buffsize=32767 path=’rosdwp’
    104 ! preserve_comments);
    105      execute(alter session set nls_date_format = ‘ddmonyyyy’) by rosdwp;
    106 CREATE table biplr_rx as
    107 SELECT
    108 mrb_id,
    109 pcp_spc,
    110 rx_date,
    4 The SAS System 11:44 Friday, October 30, 2009
    111 brand,
    112 generic,
    113 ahfs_cd,
    114 ahfs_dsc,
    115 lbl,
    116 strngth,
    117 unt,
    118 spc_tx_cls_cd,
    119 spc_tx_cls_dsc,
    120 gcn,
    121 rx_num,
    122 rx_ingrd,
    123 rx_paid,
    124 rx_cnt,
    125 rx_qty,
    126 rx_day
    127 FROM connection to rosdwp
    128 (SELECT
    129 mid.UNIQ_MBR_ID as mrb_id,
    130 pd.PRVDR_SPCLTY_DESC as pcp_spc,
    131 pcf.LAST_SRVC_DT as rx_date,
    132 dd.BRAND_NAME as brand,
    133 dd.GNRC_NAME as generic,
    134 dd.AHFS_THRPTC_CLS_CD as ahfs_cd,
    135 dd.AHFS_THRPTC_CLS_DESC as ahfs_dsc,
    136 dd.LABEL_NAME as lbl,
    137 dd.STRNGTH_NUM as strngth,
    138 dd.STRNGTH_UNIT_DESC as unt,
    139 dd.SPECF_THRPTC_CLS_CD as spc_tx_cls_cd,
    140 dd.SPECF_THRPTC_CLS_DESC as spc_tx_cls_dsc,
    141 dd.GCN_NUM as gcn,
    142 pcf.PRSCRPTN_NUM as rx_num,
    143 SUM(pcf.INGRDNT_AMT) as rx_ingrd,
    144 SUM(pcf.PD_AMT) as rx_paid,
    145 SUM(pcf.UNIT_SRVC_CNT) as rx_cnt,
    146 SUM(pcf.DSPNSD_QTY) as rx_qty,
    147 SUM(pcf.DAY_SUPLY_CNT) as rx_day
    148 FROM
    149 PHRMCY_CLM_FACT pcf,
    150 MBR_ID_DMNSN mid,
    151 DRUG_DMNSN dd,
    152 PRVDR_DMNSN pd,
    153           biplr_up_v1
    154 WHERE
    155 (
    156 (biplr_up_v1.mbr_id = MBR_ID_DMNSN.UNIQ_MBR_ID) And
    157 (PHRMCY_CLM_FACT.FINL_CLM_KEY = PHRMCY_FINL_CLM_DMNSN.FINL_CLM_KEY) AND
    158 (PHRMCY_CLM_FACT.MBR_KEY = MBR_ID_DMNSN.MBR_KEY) And
    159 (PHRMCY_CLM_FACT.BNFT_KEY = MBR_BNFT_DMNSN.BNFT_KEY) And
    160 (PHRMCY_CLM_FACT.DRUG_KEY = DRUG_DMNSN.DRUG_KEY) And
    161 (PHRMCY_FINL_CLM_DMNSN.CLM_ORGN_CD IN (‘M’,’A’)) AND
    162 (PHRMCY_CLM_FACT.LAST_SRVC_DT BETWEEN between &q.&fdos.&q and &q.&ldos.&q)
    163      )
    164 Group By
    165 mid.UNIQ_MBR_ID ,
    166 pd.PRVDR_SPCLTY_DESC ,
    167 pcf.LAST_SRVC_DT ,
    168 dd.BRAND_NAME ,
    5 The SAS System 11:44 Friday, October 30, 2009
    169 dd.GNRC_NAME ,
    170 dd.AHFS_THRPTC_CLS_CD ,
    171 dd.AHFS_THRPTC_CLS_DESC ,
    172 dd.LABEL_NAME ,
    173 dd.STRNGTH_NUM ,
    174 dd.STRNGTH_UNIT_DESC ,
    175 dd.SPECF_THRPTC_CLS_CD ,
    176 dd.SPECF_THRPTC_CLS_DESC ,
    177 dd.GCN_NUM ,
    178 pcf.PRSCRPTN_NUM
    179 );
    ERROR: ORACLE prepare error: ORA-00936: missing expression. SQL statement: SELECT mid.UNIQ_MBR_ID as mrb_id,
    pd.PRVDR_SPCLTY_DESC as pcp_spc, pcf.LAST_SRVC_DT as rx_date, dd.BRAND_NAME as brand, dd.GNRC_NAME as generic,
    dd.AHFS_THRPTC_CLS_CD as ahfs_cd, dd.AHFS_THRPTC_CLS_DESC as ahfs_dsc, dd.LABEL_NAME as lbl, dd.STRNGTH_NUM as
    strngth, dd.STRNGTH_UNIT_DESC as unt, dd.SPECF_THRPTC_CLS_CD as spc_tx_cls_cd, dd.SPECF_THRPTC_CLS_DESC as
    spc_tx_cls_dsc, dd.GCN_NUM as gcn, pcf.PRSCRPTN_NUM as rx_num, SUM(pcf.INGRDNT_AMT) as rx_ingrd, SUM(pcf.PD_AMT)
    as rx_paid, SUM(pcf.UNIT_SRVC_CNT) as rx_cnt, SUM(pcf.DSPNSD_QTY) as rx_qty, SUM(pcf.DAY_SUPLY_CNT) as rx_day
    FROM PHRMCY_CLM_FACT pcf, MBR_ID_DMNSN mid, DRUG_DMNSN dd, PRVDR_DMNSN pd, biplr_up_v1 WHERE (
    (biplr_up_v1.mbr_id = MBR_ID_DMNSN.UNIQ_MBR_ID) And (PHRMCY_CLM_FACT.FINL_CLM_KEY =
    PHRMCY_FINL_CLM_DMNSN.FINL_CLM_KEY) AND (PHRMCY_CLM_FACT.MBR_KEY = MBR_ID_DMNSN.MBR_KEY) And
    (PHRMCY_CLM_FACT.BNFT_KEY = MBR_BNFT_DMNSN.BNFT_KEY) And (PHRMCY_CLM_FACT.DRUG_KEY = DRUG_DMNSN.DRUG_KEY) And
    (PHRMCY_FINL_CLM_DMNSN.CLM_ORGN_CD IN (‘M’,’A’)) AND (PHRMCY_CLM_FACT.LAST_SRVC_DT BETWEEN between ’01JUN2007′
    and ’30SEP2009′) ) Group By mid.UNIQ_MBR_ID , pd.PRVDR_SPCLTY_DESC , pcf.LAST_SRVC_DT , dd.BRAND_NAME ,
    dd.GNRC_NAME , dd.AHFS_THRPTC_CLS_CD , dd.AHFS_THRPTC_CLS_DESC , dd.LABEL_NAME , dd.STRNGTH_NUM ,
    dd.STRNGTH_UNIT_DESC , dd.SPECF_THRPTC_CLS_CD , dd.SPECF_THRPTC_CLS_DESC , dd.GCN_NUM , pcf.PRSCRPTN_NUM.
    NOTE: PROC SQL set option NOEXEC and will continue to check the syntax of statements.
    180 execute (drop table biplr_up_v1) by rosdwp;
    NOTE: Statement not executed due to NOEXEC option.
    181 disconnect from rosdwp;
    NOTE: Statement not executed due to NOEXEC option.
    182 quit;
    NOTE: The SAS System stopped processing this step because of errors.
    NOTE: PROCEDURE SQL used (Total process time):
    real time 0.14 seconds
    cpu time 0.03 seconds
    183
    184

    Hello Again ,
    Wish Oracle was a bit more informative. Am using a SAS Institute Product called Enterprise Guide. A «hot fix» was installed to address an issue that the product appears unable to save the latest version of edited code changes (hence » BETWEEN between» remaining even after a prior edit). In any case, with the change, am now receiving this error:
    » ERROR: ORACLE prepare error: ORA-00904: «PHRMCY_CLM_FACT».»LAST_SRVC_DT»: invalid identifier». (Log file appears below)
    -The error remains, regardless of whether one uses «pass through» code to pass the date range to Oracle (which looks ok from the log output below I believe), or if I hard code the date range into the PL SQL query itself.
    -The Prepare error always appears at end of the inner SELECT.
    -The Prepare error remains, with or without the GROUP BY clause.
    Is there anything else here I am missing? Someone suggested a reserve word — but from other ANSI SQL versions, I do not see that is the case. I have consulted SAS Tech Support and SAS List Serve at University of GA. but nothing definitive from these sources. Have requested facility to be able to run Oracle directly, outside this SAS Institute product — in process.
    Any suggestions are greatly appreciated. Thanks to everyone very much.
    Jeff
    14 /********************************************************/
    15 * RX_BIPLR_V3.SAS ;
    16 /********************************************************/
    17
    18 dm ‘log;clear;out;clear’;
    19 options linesize =120;
    20 Option obs=0 NoReplace;
    21
    22 ****************************************************************************************;
    23 *Date       Programmer         Reviewed By     WHAT WAS DONE;
    24 *——      —————     ————    ——————————————;
    25 *2005 D. Boyd Program creation for test population;
    26 *;
    27 *02/06/2006 I. Jones Modified to include total population;
    28 *;
    29 *07/20/2006 I. Jones Identified data elements for exclusion;
    30 * or inclusion for consolidation with ;
    31 * Robin’s report;
    32 *;
    33 *08/18/2006 I Jones Updated the Specific Therapeutic Classes;
    34 * 10-2009 J Shaf — modified to extract actual or potential Bipolar Dx from UBH and Medical Claims;
    35 ****************************************************************************************;
    36
    37
    38
    39 *%let allclmorgn = (‘M’,’A’) ; /* all claims origin code */
    40 %let begdate=’01SEP2009’d;
    41 %let enddate=’30SEP2009’d;
    42 %let q = %str(%’) ;
    43
    44
    45 data null ;
    46 call symput(‘fdos’,put(intnx(‘month’,»&begdate»d,-27,’beginning’), date9.) ) ;
    47 call symput(‘ldos’,put(intnx(‘month’,»&enddate»d,-0,’ending’), date9.) ) ;
    48 run ;
    2 The SAS System 12:46 Monday, November 2, 2009
    NOTE: DATA statement used (Total process time):
    real time 0.00 seconds
    cpu time 0.00 seconds
    49
    50
    51
    52 **************************************************************;
    53 * ??Use the data null step to create a macro variable for the ;
    54 * year and month based on the ldos macro variable in the data ;
    55 * step above?? ;
    56 **************************************************************;
    57
    58
    59 data null ;
    60 if month(«&ldos»d) < 10
    61 then call symput(‘yr_mo’,compress(year(«&ldos»d) || ‘0’ || month(«&ldos»d) ) ) ;
    62 else call symput(‘yr_mo’,compress(year(«&ldos»d) || month(«&ldos»d) ) ) ;
    63 run ;
    NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column).
    61:39 61:64 62:39 62:57
    NOTE: DATA statement used (Total process time):
    real time 0.00 seconds
    cpu time 0.01 seconds
    64
    65 *%put &biplr_dx;
    66 %put &begdate ;
    ’01SEP2009’d
    67 %put &enddate ;
    ’30SEP2009’d
    68 %put &fdos ;
    01JUN2007
    69 %put &ldos ;
    30SEP2009
    70 %put &q ;
    71
    72
    73 libname biplr’/home/jshafi01/projects/adhoc/biplr_dprsn/data’;
    NOTE: Libref BIPLR was successfully assigned as follows:
    Engine: V9
    Physical Name: /home/jshafi01/projects/adhoc/biplr_dprsn/data
    74 libname rosdwp oracle user=»&oracle_user.» pass=»&oracle_pass.» buffsize=32767 path=’rosdwp’;
    NOTE: Libref ROSDWP was successfully assigned as follows:
    Engine: ORACLE
    Physical Name: rosdwp
    75
    76 data work.biplr_up_v1;
    77 attrib mbr_id length=$26;
    78 set biplr.biplr_ubh_med_v1;
    79 run;
    NOTE: There were 0 observations read from the data set BIPLR.BIPLR_UBH_MED_V1.
    NOTE: The data set WORK.BIPLR_UP_V1 has 0 observations and 1 variables.
    NOTE: DATA statement used (Total process time):
    real time 0.00 seconds
    cpu time 0.01 seconds
    80
    81 proc contents;
    82 run;
    NOTE: PROCEDURE CONTENTS used (Total process time):
    real time 0.02 seconds
    cpu time 0.02 seconds
    83
    84 proc datasets
    85      library = rosdwp nolist;
    86      delete biplr_up_v1;
    87 quit;
    NOTE: Deleting ROSDWP.BIPLR_UP_V1 (memtype=DATA).
    NOTE: PROCEDURE DATASETS used (Total process time):
    real time 0.61 seconds
    cpu time 0.01 seconds
    88
    89 proc datasets
    90      library=work nolist;
    91      copy out = rosdwp move;
    92      select biplr_up_v1 ;
    93 quit;
    NOTE: Moving WORK.BIPLR_UP_V1 to ROSDWP.BIPLR_UP_V1 (memtype=DATA).
    NOTE: SAS variable labels, formats, and lengths are not written to DBMS tables.
    NOTE: There were 0 observations read from the data set WORK.BIPLR_UP_V1.
    NOTE: The data set ROSDWP.BIPLR_UP_V1 has 0 observations and 1 variables.
    NOTE: PROCEDURE DATASETS used (Total process time):
    real time 0.15 seconds
    cpu time 0.04 seconds
    94
    95
    96
    97 *****************************************************************************;
    98
    99 *execute(commit) by rosdwp
    100 ******************************************************************************;
    101
    102
    103 proc SQL noprint ;
    104 connect to oracle as rosdwp (user=»&oracle_user.» password=»&oracle_pass» buffsize=32767 path=’rosdwp’
    104 ! preserve_comments);
    105      execute(alter session set nls_date_format = ‘ddmonyyyy’) by rosdwp;
    106 CREATE table biplr_rx as
    107 SELECT
    108 mrb_id,
    109 uniq_mbr_id,
    110 pcp_spc,
    111 rx_date,
    112 brand,
    113 generic,
    114 ahfs_cd,
    115 ahfs_dsc,
    116 lbl,
    117 strngth,
    118 unt,
    119 spc_tx_cls_cd,
    120 spc_tx_cls_dsc,
    121 gcn,
    122 rx_num,
    123 rx_ingrd,
    124 rx_paid,
    125 rx_cnt,
    126 rx_qty,
    127 rx_day
    128 FROM connection to rosdwp
    129 (SELECT
    130 mid.UNIQ_MBR_ID as uniq_mrb_id,
    131 blpr.mrb_id.mbr_id,
    132 pd.PRVDR_SPCLTY_DESC as pcp_spc,
    133 pcf.LAST_SRVC_DT as rx_date,
    134 dd.BRAND_NAME as brand,
    135 dd.GNRC_NAME as generic,
    136 dd.AHFS_THRPTC_CLS_CD as ahfs_cd,
    137 dd.AHFS_THRPTC_CLS_DESC as ahfs_dsc,
    138 dd.LABEL_NAME as lbl,
    139 dd.STRNGTH_NUM as strngth,
    140 dd.STRNGTH_UNIT_DESC as unt,
    141 dd.SPECF_THRPTC_CLS_CD as spc_tx_cls_cd,
    142 dd.SPECF_THRPTC_CLS_DESC as spc_tx_cls_dsc,
    143 dd.GCN_NUM as gcn,
    144 pcf.PRSCRPTN_NUM as rx_num,
    145 SUM(pcf.INGRDNT_AMT) as rx_ingrd,
    146 SUM(pcf.PD_AMT) as rx_paid,
    147 SUM(pcf.UNIT_SRVC_CNT) as rx_cnt,
    148 SUM(pcf.DSPNSD_QTY) as rx_qty,
    149 SUM(pcf.DAY_SUPLY_CNT) as rx_day
    150 FROM
    151 PHRMCY_CLM_FACT pcf,
    152 MBR_ID_DMNSN mid,
    153 DRUG_DMNSN dd,
    154 PRVDR_DMNSN pd,
    155      BIPLR_UP_V1 blpr
    156 WHERE
    157 (BIPLR_UP_V1.mbr_id = MBR_ID_DMNSN.UNIQ_MBR_ID) And
    158 (PHRMCY_CLM_FACT.FINL_CLM_KEY = PHRMCY_FINL_CLM_DMNSN.FINL_CLM_KEY) AND
    159 (PHRMCY_CLM_FACT.MBR_KEY = MBR_ID_DMNSN.MBR_KEY) And
    160 (PHRMCY_CLM_FACT.BNFT_KEY = MBR_BNFT_DMNSN.BNFT_KEY) And
    161 (PHRMCY_CLM_FACT.DRUG_KEY = DRUG_DMNSN.DRUG_KEY) And
    162 (PHRMCY_FINL_CLM_DMNSN.CLM_ORGN_CD IN (‘M’,’A’)) AND
    163 (PHRMCY_CLM_FACT.LAST_SRVC_DT BETWEEN &q.&fdos.&q and &q.&ldos.&q)
    164 );
    ERROR: ORACLE prepare error: ORA-00904: «PHRMCY_CLM_FACT».»LAST_SRVC_DT»: invalid identifier. SQL statement: SELECT
    mid.UNIQ_MBR_ID as uniq_mrb_id, blpr.mrb_id.mbr_id, pd.PRVDR_SPCLTY_DESC as pcp_spc, pcf.LAST_SRVC_DT as
    rx_date, dd.BRAND_NAME as brand, dd.GNRC_NAME as generic, dd.AHFS_THRPTC_CLS_CD as ahfs_cd,
    dd.AHFS_THRPTC_CLS_DESC as ahfs_dsc, dd.LABEL_NAME as lbl, dd.STRNGTH_NUM as strngth, dd.STRNGTH_UNIT_DESC as
    unt, dd.SPECF_THRPTC_CLS_CD as spc_tx_cls_cd, dd.SPECF_THRPTC_CLS_DESC as spc_tx_cls_dsc, dd.GCN_NUM as gcn,
    pcf.PRSCRPTN_NUM as rx_num, SUM(pcf.INGRDNT_AMT) as rx_ingrd, SUM(pcf.PD_AMT) as rx_paid, SUM(pcf.UNIT_SRVC_CNT)
    as rx_cnt, SUM(pcf.DSPNSD_QTY) as rx_qty, SUM(pcf.DAY_SUPLY_CNT) as rx_day FROM PHRMCY_CLM_FACT pcf,
    MBR_ID_DMNSN mid, DRUG_DMNSN dd, PRVDR_DMNSN pd, BIPLR_UP_V1 blpr WHERE (BIPLR_UP_V1.mbr_id =
    MBR_ID_DMNSN.UNIQ_MBR_ID) And (PHRMCY_CLM_FACT.FINL_CLM_KEY = PHRMCY_FINL_CLM_DMNSN.FINL_CLM_KEY) AND
    (PHRMCY_CLM_FACT.MBR_KEY = MBR_ID_DMNSN.MBR_KEY) And (PHRMCY_CLM_FACT.BNFT_KEY = MBR_BNFT_DMNSN.BNFT_KEY) And
    (PHRMCY_CLM_FACT.DRUG_KEY = DRUG_DMNSN.DRUG_KEY) And (PHRMCY_FINL_CLM_DMNSN.CLM_ORGN_CD IN (‘M’,’A’)) AND
    (PHRMCY_CLM_FACT.LAST_SRVC_DT BETWEEN ’01JUN2007′ and ’30SEP2009′).
    NOTE: PROC SQL set option NOEXEC and will continue to check the syntax of statements.
    165 execute (drop table biplr_up_v1) by rosdwp;
    NOTE: Statement not executed due to NOEXEC option.
    166 disconnect from rosdwp;
    NOTE: Statement not executed due to NOEXEC option.
    167 quit;
    NOTE: The SAS System stopped processing this step because of errors.
    NOTE: PROCEDURE SQL used (Total process time):
    real time 0.24 seconds
    cpu time 0.02 seconds
    168
    Edited by: user12142482 on Nov 2, 2009 4:02 PM

  • ERROR: ORA-01017: invalid username/password; logon denied

    Hi all
    I need your kind help.
    I have installed Oracle Audit Vault Server  Release 10.2.3.2 in Linux system and collection agent in Windows system. Adding and starting DBAUD collector went fine however  adding REDO collector return back errors when executing avorcldb add_collector command as follow
    [[email protected] ~]$
    [[email protected] ~]$  avorcldb add_collector -srcname orcl -agentname avagent01 -colltype REDO -av Lugaopc:1521:orcl
    collector REDO_Collector for source orcl already exists
    initializing REDO Collector
    ERROR: could not get AV source user connection using jdbc:oracle:oci:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Lugaopc)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)))
    ERROR: ORA-01017: invalid username/password; logon denied
    [[email protected] ~]$
    Here is the contents of avorcldb.log file
    09-09-13 16:58:44 [INFO ] Processing command add_collector
    09-09-13 16:58:44 [INFO ] Processing arg -srcname = orcl
    09-09-13 16:58:44 [INFO ] Processing arg -agentname = avagent01
    09-09-13 16:58:44 [INFO ] Processing arg -colltype = REDO
    09-09-13 16:58:44 [INFO ] Processing arg -av = Lugaopc:1521:orcl
    09-09-13 16:58:44 [INFO ] Connect info : Lugaopc:1521:orcl
    09-09-13 16:58:45 [INFO ] Got AV admin connection using jdbc:oracle:oci:@AVDB
    09-09-13 16:58:45 [INFO ] Executing SQL as [[email protected]] select s.host||’:’||a1.num_value||’:’||a2.char_value from avsys.av$attrvalue a1, avsys.av$attrvalue a2, avsys.av$source s, avsys.av$attrdef ad1, avsys.av$attrdef ad2 where source_name = :1 and a1.inst_id = s.source_id and a2.inst_id = s.source_id and a1.attr_id = ad1.attr_id and ad1.attr_name = ‘PORT’ and a2.attr_id = ad2.attr_id and ad2.attr_name = ‘DB_SERVICE’
    09-09-13 16:58:45 [INFO ] Using bind value orcl
    09-09-13 16:58:45 [INFO ] Return value = Lugaopc:1521:orcl
    09-09-13 16:58:45 [INFO ] Connect info : Lugaopc:1521:orcl
    09-09-13 16:58:45 [INFO ] Executing SQL as [[email protected]] select to_char(source_id) from avsys.av$source where source_name = :1
    09-09-13 16:58:45 [INFO ] Using bind value orcl
    09-09-13 16:58:45 [INFO ] Return value = 1
    09-09-13 16:58:46 [INFO ] Got source user connection using jdbc:oracle:oci:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Lugaopc)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)))
    09-09-13 16:58:46 [INFO ] Executing SQL as [[email protected]] select decode(c.status, 1, ‘active’, 0, ‘dropped’, null) from avsys.av$collector c, avsys.av$source s where source_name = :1 and collector_name = :2 and c.source_id = s.source_id
    09-09-13 16:58:46 [INFO ] Using bind value orcl
    09-09-13 16:58:46 [INFO ] Using bind value REDO_Collector
    09-09-13 16:58:46 [INFO ] Return value = active
    09-09-13 16:58:46 [MESG ] collector REDO_Collector for source orcl already exists
    09-09-13 16:58:46 [INFO ] Executing SQL as [[email protected]] select decode(c.status, 1, ‘active’, 0, ‘dropped’, null) from avsys.av$collector c, avsys.av$source s where source_name = :1 and collector_name = :2 and c.source_id = s.source_id
    09-09-13 16:58:46 [INFO ] Using bind value orcl
    09-09-13 16:58:46 [INFO ] Using bind value REDO_Collector
    09-09-13 16:58:46 [INFO ] Return value = active
    09-09-13 16:58:46 [MESG ] initializing REDO Collector
    09-09-13 16:58:46 [INFO ] Executing SQL as [[email protected]] select username from avsys.av$source where source_name = :1
    09-09-13 16:58:46 [INFO ] Using bind value orcl
    09-09-13 16:58:46 [INFO ] Return value = AVSRCUSR1
    09-09-13 16:58:46 [INFO ] Executing SQL as [[email protected]] {? = call avsys.dbms_audit_vault.reset_source_user(?)}
    09-09-13 16:58:46 [INFO ] Adding mask for user password
    09-09-13 16:58:46 [INFO ] Executing SQL as [[email protected]] select table_name from user_tables where upper(table_name) = upper(:1)
    09-09-13 16:58:46 [INFO ] Using bind value STREAMS_HEARTBEAT
    09-09-13 16:58:46 [INFO ] Return value = STREAMS_HEARTBEAT
    09-09-13 16:58:46 [INFO ] Executing SQL as [[email protected]] drop table streams_heartbeat
    09-09-13 16:58:46 [INFO ] Executing SQL as [[email protected]] create table streams_heartbeat( src_dbname varchar2(4000), job_number number, heartbeat_time timestamp)
    09-09-13 16:58:46 [INFO ] Executing SQL as [[email protected]] declare dbs_name varchar2(4000); begin select global_name into dbs_name from global_name; insert into streams_heartbeat values (dbs_name, 0, SYSTIMESTAMP); end;
    09-09-13 16:58:46 [INFO ] Executing SQL as [[email protected]] create or replace procedure update_heartbeat IS begin update streams_heartbeat set heartbeat_time=(select systimestamp from dual); commit; end;
    09-09-13 16:58:46 [INFO ] Executing SQL as [[email protected]] select table_name from user_tables where upper(table_name) = upper(:1)
    09-09-13 16:58:46 [INFO ] Using bind value CAPTURE_RULES
    09-09-13 16:58:46 [INFO ] Return value = CAPTURE_RULES
    09-09-13 16:58:46 [INFO ] Executing SQL as [[email protected]] drop table capture_rules
    09-09-13 16:58:46 [INFO ] Executing SQL as [[email protected]] create table capture_rules( rule_name  varchar2(50), rule_scope varchar2(6),  rule_type  varchar2(3),  obj_name   varchar2(100))
    09-09-13 16:58:46 [INFO ] Executing SQL as [[email protected]] select global_name from global_name
    09-09-13 16:58:46 [INFO ] Return value = AVDB.AVSRV
    09-09-13 16:58:46 [INFO ] Executing SQL as [[email protected]] select db_link from user_db_links where db_link = :1
    09-09-13 16:58:46 [INFO ] Using bind value AVDB.AVSRV
    09-09-13 16:58:46 [INFO ] Return value = AVDB.AVSRV
    09-09-13 16:58:46 [INFO ] Executing SQL as [[email protected]] drop database link «AVDB.AVSRV»
    09-09-13 16:58:46 [INFO ] Executing SQL as [[email protected]] select version from v$instance
    09-09-13 16:58:46 [INFO ] Return value = 11.2.0.1.0
    09-09-13 16:58:46 [INFO ] Creating DB link using AVDB.AVSRV,AVSRCUSR1,{avsrcusr_pwd},Lugaopc,1521,orcl
    09-09-13 16:58:46 [INFO ] Connecting as srcuser_ora01 to @(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Lugaopc)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)))
    09-09-13 16:58:46 [INFO ] Output from SQLPlus
    09-09-13 16:58:46 [INFO ]
    09-09-13 16:58:46 [INFO ] Package created.
    09-09-13 16:58:46 [INFO ]
    09-09-13 16:58:46 [INFO ] No errors.
    09-09-13 16:58:47 [INFO ]
    09-09-13 16:58:47 [INFO ] Package body created.
    09-09-13 16:58:47 [INFO ]
    09-09-13 16:58:47 [INFO ] No errors.
    09-09-13 16:58:47 [INFO ]
    09-09-13 16:58:47 [INFO ] Package created.
    09-09-13 16:58:47 [INFO ]
    09-09-13 16:58:47 [INFO ] No errors.
    09-09-13 16:58:47 [INFO ]
    09-09-13 16:58:47 [INFO ] Package body created.
    09-09-13 16:58:47 [INFO ]
    09-09-13 16:58:47 [INFO ] No errors.
    09-09-13 16:58:47 [INFO ] Executing SQL as [[email protected]] select distinct name from user_errors where name = :1
    09-09-13 16:58:47 [INFO ] Using bind value DBMS_SRC_STREAMS_COLLECTOR
    09-09-13 16:58:47 [INFO ] Return value = null
    09-09-13 16:58:47 [ERROR] could not get AV source user connection using jdbc:oracle:oci:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Lugaopc)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)))
    09-09-13 16:58:47 [ERROR] ORA-01017: invalid username/password; logon denied
    java.sql.SQLException: ORA-01017: invalid username/password; logon denied
        at oracle.jdbc.driver.T2CConnection.checkError(T2CConnection.java:765)
        at oracle.jdbc.driver.T2CConnection.logon(T2CConnection.java:414)
        at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:546)
        at oracle.jdbc.driver.T2CConnection.<init>(T2CConnection.java:162)
        at oracle.jdbc.driver.T2CDriverExtension.getConnection(T2CDriverExtension.java:53)
        at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
        at java.sql.DriverManager.getConnection(DriverManager.java:525)
        at java.sql.DriverManager.getConnection(DriverManager.java:140)
        at oracle.av.avca.jdbc.JdbcConnection.<init>(JdbcConnection.java:87)
        at oracle.av.orcldb.DAO.initConnection(DAO.java:79)
        at oracle.av.orcldb.DAO.<init>(DAO.java:64)
        at oracle.av.orcldb.commands.AddCollector.setupCollector(AddCollector.java:746)
        at oracle.av.orcldb.commands.AddCollector.execute(AddCollector.java:230)
        at oracle.av.orcldb.Command.process(Command.java:89)
        at oracle.av.orcldb.Main.process(Main.java:118)
        at oracle.av.orcldb.Main.main(Main.java:132)
    I have searched the forum to my level best without clear solution
    Regards
    Sadock

    Hi gurus
    I don’t believe if this is missing solution from oracle community. I have decided to installed the collction agent and source database in linux system, so now both auditt vault server and collction agent are running in Linux system (but separately)
    I am wondering, avorcldb add_collector -srcname ORCL -agentname avagent01 -colltype DBAUD and  avorcldb add_collector -srcname ORCL -agentname avagent01 -colltype OSAUD -orclhome /u01/app/oracle/product/11.2.0/dbhome_1 are working fine and  I am able to start these collectors
    The  avorcldb verify -src Lugaosrv:1521:ORCL.LUGAOSRV -colltype ALL command also return good results
    [[email protected] ~]$ avorcldb verify -src Lugaosrv:1521:ORCL.LUGAOSRV -colltype ALL
    Enter Source user name: srcuser_ora01
    Enter Source password:          
    source ORCL.LUGAOSRV verified for OS File Audit Collector collector
    source ORCL.LUGAOSRV verified for Aud$/FGA_LOG$ Audit Collector collector
    source ORCL.LUGAOSRV verified for REDO Log Audit Collector collector
    [[email protected] ~]$
    The problem still I am facing is when attempting to add REDO collector. In fact the collector is added successful and i can see it even on EM console.
    [[email protected] ~]$ avorcldb add_collector -srcname ORCL -agentname avagent01 -colltype REDO -av Lugaosrv:1521:ORCL.LUGAOSRV
    source ORCL verified for REDO Log Audit Collector collector
    Adding collector…
    Collector added successfully.
    remember the following information for use in avctl
    Collector name (collname): REDO_Collector
    initializing REDO Collector
    ERROR: could not get AV source user connection using jdbc:oracle:oci:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Lugaosrv)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL.LUGAOSRV)))
    ERROR: ORA-01017: invalid username/password; logon denied
    [[email protected] ~]$
    Any help will be appreciated
    Sadock

  • Trying to produce report but have ERROR ORA-00900: invalid SQL statement

    Hi,
    I am new to Oracle so have been experimenting with a few things to get the hang of it. I have been trying to produce a report, but keep getting the error: ORA-00900: invalid SQL statement.
    This happens at my first line of code where I have COLUMN <column_name> HEADING <Heading_name>
    So I am a bit confused — is there a command that I am supposed to issue that indicates to SQL*Plus that I am trying to create a report?
    Also, if I just delete the COLUMN <column_name> HEADING <Heading_name> rows and just start at BREAK ON <column_name> SKIP 1, it produces the same error.
    I am using Oracle 8.0.6 — does this make a difference?
    Here is my code:
    COLUMN a.p_ctryid HEADING ‘Country’
    COLUMN s.p_animid HEADING ‘Stallion ID’
    COLUMN s.p_uname HEADING ‘Stallion Name’
    COLUMN a.p_animid HEADING ‘Horse ID’
    COLUMN d.p_careertp HEADING ‘Career’
    BREAK ON s.p_animid SKIP 1
    BREAK ON d.p_careertp SKIP 2
    COMPUTE SUM LABEL ‘Total’ OF d.p_careertp ON REPORT
    SELECT DISTINCT a.p_ctryid, s.p_animid, s.p_uname, a.p_animid, d.p_careertp
    FROM p_owby.p_animal a, p_owby.p_animal s, p_owby.p_mating m, p_owby.p_anim_dtl d
    WHERE m.p_mateyr = 2001
    AND a.p_animid = d.p_animid
    AND a.p_animid = m.p_animid
    AND a.p_animid > 0
    AND s.p_animid = a.p_sire
    AND a.p_ctryid IN(‘GB’,’IRE’)
    GROUP BY a.p_ctryid, s.p_animid, s.p_uname, d.p_careertp, a.p_animid
    ORDER BY a.p_ctryid, s.p_animid, d.p_careertp
    Any help would be greatly appreciated!
    Thanks in advance!

    You are trying to do COMPUTE SUM … ON REPORT but there is no BREAK ON REPORT specified. The computed sum will not be shown unless you also break on report. see below demonstration. first select has no sum even though we have specified COMPUTE. The second select shows the sum since now we have done break on report.
    SQL> compute sum of sal on report
    SQL> select * from scott.emp order by empno ;
         EMPNO ENAME      JOB              MGR HIREDATE           SAL       COMM     DEPTNO
          7369 SMITH      CLERK           7902 17-DEC-1980        800                    20
          7499 ALLEN      SALESMAN        7698 20-FEB-1981       1600        300         30
          7521 WARD       SALESMAN        7698 22-FEB-1981       1250        500         30
          7566 JONES      MANAGER         7839 02-APR-1981       2975                    20
          7654 MARTIN     SALESMAN        7698 28-SEP-1981       1250       1400         30
          7698 BLAKE      MANAGER         7839 01-MAY-1981       2850                    30
          7782 CLARK      MANAGER         7839 09-JUN-1981       2450                    10
          7788 SCOTT      ANALYST         7566 19-APR-1987       3000                    20
          7839 KING       PRESIDENT            17-NOV-1981       5000                    10
          7844 TURNER     SALESMAN        7698 08-SEP-1981       1500          0         30
          7876 ADAMS      CLERK           7788 23-MAY-1987       1100                    20
          7900 JAMES      CLERK           7698 03-DEC-1981        950                    30
          7902 FORD       ANALYST         7566 03-DEC-1981       3000                    20
          7934 MILLER     CLERK           7782 23-JAN-1982       1300                    10
    14 rows selected.
    SQL> break on report
    SQL> select * from scott.emp order by empno ;
         EMPNO ENAME      JOB              MGR HIREDATE           SAL       COMM     DEPTNO
          7369 SMITH      CLERK           7902 17-DEC-1980        800                    20
          7499 ALLEN      SALESMAN        7698 20-FEB-1981       1600        300         30
          7521 WARD       SALESMAN        7698 22-FEB-1981       1250        500         30
          7566 JONES      MANAGER         7839 02-APR-1981       2975                    20
          7654 MARTIN     SALESMAN        7698 28-SEP-1981       1250       1400         30
          7698 BLAKE      MANAGER         7839 01-MAY-1981       2850                    30
          7782 CLARK      MANAGER         7839 09-JUN-1981       2450                    10
          7788 SCOTT      ANALYST         7566 19-APR-1987       3000                    20
          7839 KING       PRESIDENT            17-NOV-1981       5000                    10
          7844 TURNER     SALESMAN        7698 08-SEP-1981       1500          0         30
          7876 ADAMS      CLERK           7788 23-MAY-1987       1100                    20
          7900 JAMES      CLERK           7698 03-DEC-1981        950                    30
          7902 FORD       ANALYST         7566 03-DEC-1981       3000                    20
          7934 MILLER     CLERK           7782 23-JAN-1982       1300                    10
    sum                                                         29025
    14 rows selected.
    SQL>

  • Are you getting an ORA-06502 error message when working with Oracle SQL? Learn how to resolve it and what causes it in this article.

    ORA-06502 Cause

    The cause of the “ORA-06502 PL/SQL numeric or value error” can be one of many things:

    1. A value is being assigned to a numeric variable, but the value is larger than what the variable can handle.
    2. A non-numeric value is being assigned to a numeric variable.
    3. A value of NULL is being assigned to a variable which has a NOT NULL constraint.

    Let’s take a look at the solutions for each of these causes.

    The solution for this error will depend on the cause.

    Let’s see an example of each of the three causes mentioned above.

    Solution 1: Value Larger than Variable (Number Precision Too Large)

    In this example, we have some code that is setting a numeric variable to a value which is larger than what can be stored.

    Let’s create this procedure which declares and then sets a variable:

    CREATE OR REPLACE PROCEDURE TestLargeNumber
    AS
      testNumber NUMBER(3);
    BEGIN
      testNumber := 4321;
    END;

    If we compile it, it compiles with no errors.

    Procedure TESTLARGENUMBER compiled

    Now, let’s run the procedure.

    EXEC TestLargeNumber;

    We get an error:

    Error starting at line : 8 in command -
    EXEC TestLargeNumber
    Error report -
    ORA-06502: PL/SQL: numeric or value error: number precision too large
    ORA-06512: at "SYSTEM.TESTLARGENUMBER", line 5
    ORA-06512: at line 1
    06502. 00000 -  "PL/SQL: numeric or value error%s"
    *Cause:    An arithmetic, numeric, string, conversion, or constraint error
               occurred. For example, this error occurs if an attempt is made to
               assign the value NULL to a variable declared NOT NULL, or if an
               attempt is made to assign an integer larger than 99 to a variable
               declared NUMBER(2).
    *Action:   Change the data, how it is manipulated, or how it is declared so
               that values do not violate constraints.

    The error we’ve gotten is “ORA-06502: PL/SQL: numeric or value error: number precision too large”. It also includes an ORA-06512, but that error just mentions the next line the code is run from, as explained in this article on ORA-06512.

    This is because our variable testNumber can only hold 3 digits, because it was declared as a NUMBER(3). But, the value we’re setting it to a few lines later is 4 digit long (4321).

    So, the value is too large for the variable.

    To resolve it, increase the size of your variable, or manipulate your value to fit the size of the variable (if possible).

    In our example , we can change the size of the variable.

    CREATE OR REPLACE PROCEDURE TestLargeNumber
    AS
      testNumber NUMBER(4);
    BEGIN
      testNumber := 4321;
    END;
    Procedure TESTLARGENUMBER compiled

    Now, let’s run the procedure.

    EXEC TestLargeNumber;
    PL/SQL procedure successfully completed.

    The procedure runs successfully. We don’t get any output (because we didn’t code any in), but there are no errors.

    Read more on the Oracle data types here.

    Solution 2: Non-Numeric Value

    Another way to find and resolve this error is by ensuring you’re not setting a numeric variable to a non-numeric value.

    For example, take a look at this function.

    CREATE OR REPLACE PROCEDURE TestNonNumeric
    AS
      testNumber NUMBER(4);
    BEGIN
      testNumber := 'Yes';
    END;
    Procedure TESTNONNUMERIC compiled

    The procedure compiles successfully. Now, let’s fun the function.

    EXEC TestNonNumeric;
    Error starting at line : 8 in command -
    EXEC TestNonNumeric
    Error report -
    ORA-06502: PL/SQL: numeric or value error: character to number conversion error
    ORA-06512: at "SYSTEM.TESTNONNUMERIC", line 5
    ORA-06512: at line 1
    06502. 00000 -  "PL/SQL: numeric or value error%s"
    *Cause:    An arithmetic, numeric, string, conversion, or constraint error
               occurred. For example, this error occurs if an attempt is made to
               assign the value NULL to a variable declared NOT NULL, or if an
               attempt is made to assign an integer larger than 99 to a variable
               declared NUMBER(2).
    *Action:   Change the data, how it is manipulated, or how it is declared so
               that values do not violate constraints.

    The error we get is “ORA-06502: PL/SQL: numeric or value error: character to number conversion error”.

    This happens because our variable testNumber is set to a NUMBER, but a few lines later, we’re setting it to a string value which cannot be converted to a number

    To resolve this error:

    1. Ensure the value coming in is a number and not a string.
    2. Convert your string to a number using TO_NUMBER (the conversion might happen implicitly but this may help).
    3. Convert your string to the ASCII code that represents the string using the ASCII function.
    4. Change the data type of your variable (but check that your code is getting the right value first).

    The solution you use will depend on your requirements.

    Solution 3: NOT NULL Variable

    This error can appear if you try to set a NULL value to a NOT NULL variable.

    Let’s take a look at this code here:

    CREATE OR REPLACE PROCEDURE TestNonNull
    AS
      testNumber NUMBER(4) NOT NULL := 10;
      nullValue NUMBER(4) := NULL;
    BEGIN
      testNumber := nullValue;
    END;

    Procedure TESTNONNULL compiled

    Now, the reason we’re using a variable to store NULL and not just setting testNumber to NULL is because we get a different error in that case. Besides, it’s probably more likely that your NULL value will come from another system or a database table, rather than a hard-coded NULL value.

    Let’s run this function now.

    Error starting at line : 9 in command -
    EXEC TestNonNull
    Error report -
    ORA-06502: PL/SQL: numeric or value error
    ORA-06512: at "SYSTEM.TESTNONNULL", line 6
    ORA-06512: at line 1
    06502. 00000 -  "PL/SQL: numeric or value error%s"
    *Cause:    An arithmetic, numeric, string, conversion, or constraint error
               occurred. For example, this error occurs if an attempt is made to
               assign the value NULL to a variable declared NOT NULL, or if an
               attempt is made to assign an integer larger than 99 to a variable
               declared NUMBER(2).
    *Action:   Change the data, how it is manipulated, or how it is declared so
               that values do not violate constraints.

    We get the ORA-06502 error.

    This error message doesn’t give us much more information. But, we can look at the code on line 6, as indicated by the message. We can see we have a variable that has a NOT NULL constraint, and the variable is NULL.

    To be sure, we can output some text in our demo when it is null.

    CREATE OR REPLACE PROCEDURE TestNonNull
    AS
      testNumber NUMBER(4) NOT NULL := 10;
      nullValue NUMBER(4) := NULL;
    BEGIN
      IF (nullValue IS NULL) THEN
        dbms_output.put_line('Value is null!');
      ELSE
        testNumber := nullValue;
      END IF;
    END;

    Now let’s call the procedure.

    EXEC TestNonNull;
    Value is null!

    The output shows the text message, indicating the value is null.

    ORA-06502 character string buffer too small

    This version of the error can occur if you set a character variable to a value larger than what it can hold.

    When you declare character variables (CHAR, VARCHAR2, for example), you need to specify the maximum size of the value. If a value is assigned to this variable which is larger than that size, then this error will occur.

    For example:

    DECLARE
      charValue VARCHAR2(5);
    BEGIN
      charValue := 'ABCDEF';
    END;

    If I compile this code, I get an error:

    ORA-06502: PL/SQL: numeric or value error: character string buffer too small
    ORA-06512: at line 4

    This happens because the variable is 5 characters long, and I’m setting it to a value which is 6 characters long.

    You could also get this error when using CHAR data types.

    DECLARE
      charValue CHAR(5);
    BEGIN
      charValue := 'A';
      charValue := charValue || 'B';
    END;
    ORA-06502: PL/SQL: numeric or value error: character string buffer too small
    ORA-06512: at line 5

    This error happens because the CHAR data type uses the maximum number of characters. It has stored the value of A and added 4 space characters, up until its maximum value of 5.

    When you try to concatenate a value of B to it, the resulting value is ‘A    B’, which is 6 characters.

    To resolve this, use a VARCHAR2 variable instead of a CHAR, and ensure the maximum size is enough for you.

    ORA-06502: pl/sql: numeric or value error: null index table key value

    Sometimes you might get this error message with the ORA-06502 error:

    ORA-06502: pl/sql: numeric or value error: null index table key value

    This means that either:

    • Your index variable is not getting initialized, or
    • Your index variable is getting set to NULL somewhere in the code.

    Check your code to see that neither of these two situations are happening.

    ORA-06502: pl/sql: numeric or value error: bulk bind: truncated bind

    You might also get this specific error message:

    ORA-06502: pl/sql: numeric or value error: bulk bind: truncated bind

    This is caused by an attempt to SELECT, UPDATE, or INSERT data into a table using a PL/SQL type where a column does not have the same scale as the column in the table.

    For example, you may have declared a variable in PL/SQL to be VARCHAR2(100), but your table is only a VARCHAR2(50) field. You may get this error then.

    You may also get this error because some data types in PL/SQL have different lengths in SQL.

    To resolve this, declare your variables as the same type as the SQL table:

    type t_yourcol is table of yourtable.yourcol%TYPE;

    So, that’s how you resolve the ORA-06502 error.

    Lastly, if you enjoy the information and career advice I’ve been providing, sign up to my newsletter below to stay up-to-date on my articles. You’ll also receive a fantastic bonus. Thanks!

    Понравилась статья? Поделить с друзьями:

    Читайте также:

  • Ora 06502 pl sql numeric or value error character string buffer too small
  • Oracle dbms error text
  • Oracle sql developer ошибка ввода вывода
  • Ora 06502 pl sql numeric or value error bulk bind truncated bind
  • Oracle db error log

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии