Содержание
- clob to blob at some instance fails with PL/SQL: numeric or value error: invalid LOB locator specifi
- Answers
- 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:
- A value is being assigned to a numeric variable, but the value is larger than what the variable can handle.
- A non-numeric value is being assigned to a numeric variable.
- 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:
- Ensure the value coming in is a number and not a string.
- Convert your string to a number using TO_NUMBER (the conversion might happen implicitly but this may help).
- Convert your string to the ASCII code that represents the string using the ASCII function.
- 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!