Error : ORA-06510: PL/SQL: unhandled user-defined exception
Hi,
Please help on this Error.
Here is my code for Trigger
Code for Trigger
CREATE OR REPLACE TRIGGER TRG_EXCEP AFTER INSERT ON TEST FOR EACH ROW
DECLARE
vInt NUMBER := 0;
vErr EXCEPTION;
BEGIN
vInt := :OLD.TEST_ID;
IF vInt > 10 THEN
INSERT INTO TEST1 VALUES (:NEW.TEST_ID,:NEW.TEST_NAME);
ELSE
RAISE vErr;
END IF;
EXCEPTION
WHEN vErr THEN
INSERT INTO TEST1 VALUES (0,:NEW.TEST_NAME);
END;
While inserting in to the table TEST iam getting the following error
Error on line 0
INSERT INTO TEST VALUES (147541,'Mm',SYSDATE)
ORA-00001: unique constraint (DB_TEST.SYS_C005327) violated
ORA-06512: at "DB_TEST.TRG_EXCEP", line 13
ORA-06510: PL/SQL: unhandled user-defined exception
Someone help me please ...............
Thanks,
Murali.V
Hi,
I made the mistake here
INSERT INTO TEST1(id,name) VALUES (0,:NEW.TEST_NAME);
where i defined the id as primary key.
But the another problem for me now is while compiling the trigger after i modified,
i get this error
11:37:05 Error: TRIGGER DB_TEST.TRG_EXCEP
On line: 7
PLS-00553: character set name is not recognized
Please help.
Thanks,
Murali.V
Similar Messages
-
Validation returns : no data found + unhandled user-defined exception
Hi, I'm working with Application Express 4.1.1.00.23.
I have an application for timesheet management.
On one page, I've got a report (not interactive) in which you can enter the hours you've worked. First you add a free line, choose the task and then enter the hours you've spent.
You can only have one empty line at a time. If you try to add a line when you already have an empty line, a validation will display an error. It worked fine in version 3.2. Now we upgraded to 4.1 and get a weird error :
1) The validation msg appears fine
2) The report appears fine
3) There is a msg at the end of the report saying :
report error:
ORA-01403: no data found
ORA-06510: PL/SQL: unhandled user-defined exception
Could somebody point out the source of this problem ?
Thank you!
Here is the debug :
0.31117 0.00204 parse query as: FEUILLES_DE_TEMPS 4
0.31319 0.07865 ...Execute Statement: select NULL "CHECK$01", NULL "nom_projet2", NULL "NO_TACHE_ENTRE", NULL "NO_TACHE", NULL "NO_SEMAINE_EMPLOYE", NULL "NOM_TACHE", NULL "Tâches", NULL "SEQUENCE", NULL "Heures dim", NULL "DIM", NULL "Heures lun", NULL "LUN", NULL "Heures mar", NULL "MAR", NULL "Heures mer", NULL "MER", NULL "Heures jeu", NULL "JEU", NULL "Heures ven", NULL "VEN", NULL "Heures sam", .........
0.39191 0.00158 print column headings 4
0.39342 0.02546 rows loop: 500 row(s) 4
0.41889 0.00087 report error: ORA-01403: no data found ORA-06510: PL/SQL: unhandled user-defined exception
.....Hi, thanks for your answer. Here is the validation we are executing. I'm pretty sure its fine since count(*) always return a value (plus we see V2 in the debug...) :
declare
l_count number;
begin
apex_debug_message.enable_debug_messages(7);
apex_debug_message.log_message('-----------------------------------V1----------------------------------');
-- get remaining empty tasks count
SELECT count(*) into l_count
FROM VIEW_TACHE_SYSTEME
WHERE NO_TACHE NOT IN (SELECT DISTINCT NO_TACHE FROM TACHE_JOUR WHERE NO_SEMAINE_EMPLOYE = :P36_NO_SEMAINE_EMPLOYE);
apex_debug_message.log_message('-----------------------------------V2----------------------------------');
apex_debug_message.log_message(l_count);
if l_count = 0 then
return 'Veuillez utiliser la tâche vide avant d''ajouter une ligne.';
else
return null;
end if;
end;
Here is the debug :
0.14643 0.00318 ...Validation "ADD_ROW_VALIDATION" - Type: FUNC_BODY_RETURNING_ERR_TEXT 4
0.14961 0.00318 ...Execute Statement: declare function x return varchar2 is begin declare l_count number; begin apex_debug_message.enable_debug_messages(7); apex_debug_message.log_message('-----------------------------------V1----------------------------------'); -- get remaining empty tasks count SELECT count(*) into l_count FROM VIEW_TACHE_SYSTEME WHERE NO_TACHE NOT IN (SELECT DISTINCT NO_TACHE FROM TACHE_JOUR WHERE NO_SEMAINE_EMPLOYE = :P36_NO_SEMAINE_EMPLOYE); apex_debug_message.log_message('-----------------------------------V2----------------------------------'); apex_debug_message.log_message(l_count); if l_count = 0 then return 'Veuillez utiliser la tâche vide avant d''ajouter une ligne.'; else return null; end if; end; return null; end; begin wwv_flow.g_computation_result_vc := x; end; 4
0.15280 0.01299 -----------------------------------V1---------------------------------- 6
0.16578 0.00310 -----------------------------------V2---------------------------------- 6
0.16888 0.00235 0 6
0.17123 0.00225 ......Result = Veuillez utiliser la tâche vide avant d'ajouter une ligne. 4
0.17347 0.00276 ......Did NOT pass 4
0.17624 0.00314 Add error onto error stack 4
0.17938 0.00343 ...Error data: 4
0.18280 0.00327 ......message: Veuillez utiliser la tâche vide avant d'ajouter une ligne. 4
0.18607 0.00446 ......display_location: INLINE_IN_NOTIFICATION 4
0.19053 0.00323 ......is_internal_error: false 4
0.19375 0.00323 ......error_backtrace: - PL/SQL Call Stack - object line object handle number name c000000382130f30 717 package body APEX_040100.WWV_FLOW_ERROR c000000382130f30 833 package body APEX_040100.WWV_FLOW_ERROR c00000039da9b5c8 154 package body APEX_040100.WWV_FLOW_VALIDATION c00000039da9b5c8 363 package body APEX_040100.WWV_FLOW_VALIDATION c00000039da9b5c8 784 package body APEX_040100.WWV_FLOW_VALIDATION c00000039da9b5c8 905 package body APEX_040100.WWV_FLOW_VALIDATION c00000039d1142c8 10005 package body APEX_040100.WWV_FLOW c000000381287050 31 anonymous block -
Unhandled user-defined exception in dbms_session?
hi guys,
I've had some code that's been working for a while but just now has started giving me the following:
SQL> select *
2 from v$version;
BANNER
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi
PL/SQL Release 10.2.0.5.0 - Production
CORE 10.2.0.5.0 Production
TNS for Linux: Version 10.2.0.5.0 - Production
NLSRTL Version 10.2.0.5.0 - Production
5 rows selected.
Elapsed: 00:00:00.00
SQL> begin
2
3
4 dbms_session.set_nls('cursor_sharing','FORCE');
5
6
7 end;
8 /
begin
ERROR at line 1:
ORA-06510: PL/SQL: unhandled user-defined exception
ORA-06512: at "SYS.DBMS_SESSION", line 158
ORA-06512: at line 4I've closed my sessions and restarted, it doesn't matter whether this is running via a stored proc or as an anonymous block like the above - what should I be looking for to find the cause of this?
I don't think I've been changing anything except using the dbms_session.set_identifier procedure, but certainly not in the sessions that I've been setting this nls parameter...sybrand_b wrote:
You can not use set_nls to change this parameter, you need 'execute immediate 'alter system... etc'
And it is a bad hack to work around not using bind variables.
Sybrand Bakker
Senior Oracle DBAalso a work around for when your system's parameter is set to 'SIMILAR' but you're trying to use certain XML functionality:
SQL> alter session set cursor_sharing = SIMILAR;
Session altered.
Elapsed: 00:00:00.00
SQL> with t as (select xmltype('<validation>
2 <error id="1">
3 <sys_message>test</sys_message>
4 <cust_message>testing</cust_message>
5 <cust_code>blahblah</cust_code>
6 </error>
7 </validation>') pi_xml from dual)
8 SELECT xtab.sys_message
9 ,xtab.cust_message
10 ,xtab.cust_code
11 FROM xmltable('/validation/error'
12 passing (SELECT pi_xml
13 FROM T)
14 COLUMNS
15 ID NUMBER path '/error/@id'
16 ,sys_message VARCHAR2(1000) path '/error/sys_message'
17 ,cust_message VARCHAR2(1000) path '/error/cust_message'
18 ,cust_code VARCHAR2(1000) path '/error/cust_code') xtab;
</validation>') pi_xml from dual)
ERROR at line 7:
ORA-01780: string literal required
Elapsed: 00:00:00.00
SQL> alter session set cursor_sharing = 'FORCE';
Session altered.
SQL> with t as (select xmltype('<validation>
2 <error id="1">
3 <sys_message>test</sys_message>
4 <cust_message>testing</cust_message>
5 <cust_code>blahblah</cust_code>
6 </error>
7 </validation>') pi_xml from dual)
8 SELECT xtab.sys_message
9 ,xtab.cust_message
10 ,xtab.cust_code
11 FROM xmltable('/validation/error'
12 passing (SELECT pi_xml
13 FROM T)
14 COLUMNS
15 ID NUMBER path '/error/@id'
16 ,sys_message VARCHAR2(1000) path '/error/sys_message'
17 ,cust_message VARCHAR2(1000) path '/error/cust_message'
18 ,cust_code VARCHAR2(1000) path '/error/cust_code') xtab;
SYS_MESSAGE
CUST_MESSAGE
CUST_CODE
test
testing
blahblah
1 row selected.edit:
incidentally, the exact same result can be retrieved with with cursor_sharing = similar if you do it this way...:
SQL> alter session set cursor_sharing = SIMILAR;
Session altered.
Elapsed: 00:00:00.00
SQL> with t as (select xmltype('<validation>
2 <error id="1">
3 <sys_message>test</sys_message>
4 <cust_message>testing</cust_message>
5 <cust_code>blahblah</cust_code>
6 </error>
7 </validation>') pi_xml from dual)
8 SELECT extractvalue(pi_xml,'/validation/error[@id=1]/sys_message') sys_message
9 ,extractvalue(pi_xml,'/validation/error[@id=1]/cust_message') cust_message
10 ,extractvalue(pi_xml,'/validation/error[@id=1]/cust_code') cust_code
11 FROM (SELECT pi_xml
12 from t);
SYS_MESSAGE
CUST_MESSAGE
CUST_CODE
test
testing
blahblah
1 row selected.Edited by: WhiteHat on May 11, 2011 5:11 PM -
Ora-06510 ora-06512 unhandled user-defined exceptions
hi,
i try to execute command
exec wwv_context.sync but i get following errors
16:35:45 Error executing statement: ORA-06550: row 2, column 1:
16:35:45 PLS-00201:identifier 'WWV_CONTEXT.SYNC' must be declared
16:35:45 ORA-06550: row 2, column 1
please help.What's the status for this object?
select status from dba_objects where object_name ='<your_object>'; -
Help in user defined exception handler
Hi
Can some one help in solving this error .
when i run my procedure i get this error which is given below .
ORA-06510 PL/SQL unhandeled user defined exception at line 7
Procedure FMG_EXTRACT_MOTORBIKE_NEWBUS (P_NSSC_YN VARCHAR2) IS
l_start date;
l_end date;
cursor motorbike_rec is
select
c.id,
k.id pak_id,
p.ref,
i.description,
i.current_status,
i.premium,
i.sum_insured,
mv.registration_no,
mv.cc_rating,
nl.ncl_level,
nl.percentage_discount,
dp.full_name main_driver,
dpd.birth_date,
e.user_name entered_by,
ep.full_name emp_name,
fmg_get_imposed_terms(i.id,'. ',';') imposed_terms
from
fmg_clients c,
fmg_client_paks k,
fmg_policies p,
fmg_Policy_items i,
fmg_mv_usages u,
fmg_people dp,
fmg_people_details dpd,
fmg_employees e,
fmg_people ep,
fmg_motor_vehicles mv,
fmg_ncb_levels nl
where i.date_created>=l_start
and i.date_created<l_end
and i.pol_id=p.id
and p.ctp_id=k.id
and k.cli_id=c.id
and i.id=u.poi_id(+)
and u.per_id=dp.id(+)
and dp.id=dpd.per_id(+)
and i.id=mv.poi_id(+)
and i.ncl_id=nl.id(+)
and ( (i.pit_pro_code in ('TFF','FMC','FMT','FMF','FBK','PMC','TPO','MCL'))
or (i.pit_pro_code = 'CMV' and i.pit_code = 'MCL')
or (i.pit_pro_code = 'PMS' and i.pit_code = 'MCL')
or (i.pit_pro_code = 'PMT' and i.pit_code in ('MCT','MCF'))
and i.user_created=e.user_name
and ( (e.business_unit='BCC' and P_NSSC_YN='Y') OR (nvl(e.business_unit,'X')<>'BCC' and P_NSSC_YN='N') )
and e.per_id=ep.id;
l_file UTL_FILE.FILE_TYPE;
l_file_name varchar2(100);
l_data VARCHAR2(4000);
BEGIN
if P_NSSC_YN='Y' then
l_start := trunc(sysdate)-1;
l_end := trunc(sysdate);
l_file_name := 'MotorCycle_Daily_'||to_char(l_start)||'.csv';
l_file := utl_file.fopen( fmg_re_filepath('SSC'), l_file_name, 'W' );
else
l_start := to_date('01-' || to_char(sysdate-28,'MM-YYYY'));
l_end := last_day(to_date('01-' || to_char(sysdate-28,'MM-YYYY')));
l_file_name := 'MotorCycle_Monthly_'||to_char(l_start)||'_'||to_char(l_end)||'.csv';
l_file := utl_file.fopen( fmg_re_filepath('GAU'), l_file_name, 'W' );
end if;
l_data := '"Client ID","Pak ID","Policy Ref","Item Desc","RegoNo","CC","Item Status","Premium","Sum Insured",' ||
'"NCB Level","NCB%","Main Driver","Birth Date","Imposed terms","EnteredBy","Employee Name"';
utl_file.put_line(l_file, l_data );
for i in motorbike_rec loop
l_data :=
to_char(i.id) || ',' ||
to_char(i.pak_id) || ',' ||
i.ref || ',' ||
'"' || i.description || '",' ||
'"' || i.registration_no || '",' ||
to_char(i.cc_Rating) || ',' ||
i.current_status || ',' ||
to_char(i.premium) || ',' ||
to_char(i.sum_insured) || ',' ||
to_char(i.ncl_level) || ',' ||
to_char(i.percentage_discount) || ',' ||
'"' || i.main_driver || '",' ||
to_char(i.birth_date) || ',' ||
'"' || i.imposed_terms || '",' ||
i.entered_by || ',' ||
'"' || i.emp_name || '"' ;
utl_file.put_line(l_file,l_data);
end loop;
utl_file.fclose( l_file );
exception
when others then
if utl_file.is_open(l_file) then
utl_file.fclose( l_file );
end if;
raise;
END;What does fmg_re_filepath('SSC') return? Are their sufficient rights with Oracle user on the location that is returned by this function?
Which OS are you using? -
Trapping user defined exceptions in forms
hi guys..
i have a database trigger that goes like that:
CREATE OR REPLACE TRIGGER loan_trig
before insert on loans
for each row
declare
lcount number(10);
duplicate_loan exception;
begin
select count(1) into lcount from loans
where branch_code=:new.branch_code
and client_code=:new.client_code;
if lcount>0 then
raise duplicate_loan;
end if;
end;
now how do i trap this user defined exception on the form ?
declaring the exception in the form & handling it in the exeption handler section doesn't seem to work and i get the following error:
"when button pressed trigger raised unhandled exception
ora-06510"
ora-06510:unhandled user-defined exception
what am i doing wrong?
if i have to handle the exception in the trigger body how do i do that?
thankx in advance..Hello,
raise duplicate_loan; won't avoid the trigger to insert and commit. If you really want to avoid the insertion, use the raise_applicatrion_error() instead.
For instance : Raise_Application_Error( -20001, 'Insertion cannot be validated' );Then in your Forms module, you can catch it like this:
Begin
Insert Into ...
when others then
LC$Erreur := Substr( SQLERRM,1 , 500 );
LN$err_code := ABS(SQLCODE);
If LN$err_code = 20001 Then ...
End;
...Francois -
I have a form which uses a customer form/report, drop downs etc..
the debug shows it running this statement
...Execute Statement: begin begin SELECT distinct initcap(RTRIM (LTRIM (e.surname, ' *0123456789-/:.?,'), ' *0123456789-/:.?,') || ', ' || RTRIM (LTRIM (e.first_name, ' *0123456789-/:.?,'), ' *0123456789-/:.?,' )) empname, e.ID bulk collect into wwv_flow_utilities.g_display,wwv_flow_utilities.g_value FROM dms.dms_employees@dmsprd e, dms.dms_employee_contracts@dmsprd ec WHERE e.ID = ec.emp_id and e.surname like '%%' AND :p75_date BETWEEN ec.start_date AND NVL (ec.end_date, :p75_date) AND e.brh_id = 3654 ORDER BY 1; end; end;
Then says
"report error: ORA-06502: PL/SQL: numeric or value error: character string buffer too small"
Any Ideas?
Thanks
DeanDenes Kubicek wrote:
A select list is limited in size. I am not sure what the limit is but that is definitelly the case.The maximum size for the HTML generated for a select list is 32K.
86 options sounds on the low side to be hitting that limit, but there are other concerns to this as well. Scrolling through hundreds/thousands of options in a select list is a pain for users, and huge select lists produce bloated pages that impact load times and network bandwidth. That list of around 200 countries you find on many sites is about the sensible maximum length for a select list.
You should use popups.Indeed. -
Error : ORA-06508: PL/SQL: could not find program unit being called
Hi
I got surprise issue while testing my Oracle code . Let me explain first the environment detail . Our appliaction built on
Java/J2EE(Weblogic) and backend is Oracle 11g re2 . While calling from java it call thru different user which have been provide
synonym and exectue option for corresponding procdure ,
I created on package EXTRACT_CUSTOMER_INFO_PK which will exract data to text file using UTL_FILE ( direcory , UTL_FILE grant is provided to DB user).
Now this package has been called from rp_execute_procedure_pr -- Here I is the code
CREATE OR REPLACE PROCEDURE RP_EXECUTE_PROCEDURE_PR
i_atlas_job_schedule_fk IN atlas_job_schedule.atlas_job_schedule_pk%TYPE,
i_job_id IN atlas_job.job_id%TYPE,
i_parm_value IN atlas_job_schedule.parm_value%TYPE,
o_status_code OUT NUMBER,
o_status_mesg OUT VARCHAR2
IS
-------Other old code which is not relevent for this issue ----
--------Other old code which is not relevent for this issue ----
----Below code I added ----
ELSIF l_job_id = 'CUST_EXTRACT' THEN
EXTRACT_CUSTOMER_INFO_PK.customer_report ( i_parm_value ,
o_status_code,
o_status_mesg ) ;
-- o_status_code := -99999999;
--o_status_mesg := 'PARTHA PARTHA PARTHAcess terminated!';
ELSE
o_status_code := -20300;
o_status_mesg := 'Job Id : ' || l_job_id || ' NOT found. Process terminated!';
END IF;
update_log_auto
ajs_rec.atlas_job_schedule_pk ,
'Processing End Time (GMT): '
EXCEPTION
WHEN eProcError THEN
o_status_code := SQLCODE;
o_status_mesg := SUBSTR(vMsg ||'-'||SQLERRM, 1, 200);
WHEN OTHERS THEN
o_status_code := -20300;
o_status_mesg := SUBSTR(SQLERRM, 1, 200);
update_log_auto
ajs_rec.atlas_job_schedule_pk ,
'Error : '||SQLERRM||' '
update_log_auto
ajs_rec.atlas_job_schedule_pk,
'Processing End Time (GMT): '
END RP_EXECUTE_PROCEDURE_PR;
Now It compiled sucesfully . And while I did SIT then RP_EXECUTE_PROCEDURE_PR run fine and extracted txt file . But while I called it from Java procedure It gives us error like
Error : ORA-06508: PL/SQL: could not find program unit being called 02-AUG-2012 13:16:51.
As I told RP_EXECUTE_PROCEDURE_PR old proc and used by other proc , So I first suspect issue is newly added code or may be some grant or synonym ( Although it should not be )
so I created public synony amd gave execute grant to my pkg to public .
But it repeat same error .
I did lot of R&D on my pkg but nothing happen . Finally I remane my new pkg RP_EXTRACT_CUSTOMER_INFO_PK and it works fine
I need to know what is the RCA for it . I donot think any dependecy issue as renaming pkg is working fine .
NB my DB user is iATLAS and Javauser is SUDEEP
Thanks in Advance
Debashis MallickFirst of all If i run the main procedure in like below in my Schema it is working fine
begin
-- Call the procedure
rp_execute_procedure_pr(i_atlas_job_schedule_fk => :i_atlas_job_schedule_fk,
i_job_id => :i_job_id,
i_parm_value => :i_parm_value,
o_status_code => :o_status_code,
o_status_mesg => :o_status_mesg);
end;
So thre is no question of parameter .... or Invalid state etc . If it is parameter or Invalid state issue it will give other error.
Here problem is not syntax issue .
let me give u more detail regards this issue
1.. All objects corresponding to procedure all Valid
2.. If I test on the proc on my schema like above code . It works fine
3.rp_execute_procedure_pr is a old procudere which called for differner report generartion based on parameter passing . Also as extract_customer_info_pk called with in rp_execute_procedure_pr So there is no question of synonym or privilage issue for new procedure.
4. Suprising thing is if I rename and recreate package like extract_customer_info_pk _1 or rp_extract_customer_info_pk . Which are exactly same as extract_customer_info_pk and replace those new one with extract_customer_info_pk then it work fine in my java application
I think I make it clear the issue
Edited by: debashisora on Aug 3, 2012 5:31 AM
Edited by: debashisora on Aug 3, 2012 5:40 AM -
Hi,
I am trying toceate an interface which collects data from database make some transformation and populated seeded tables in the same database.
My Approach is :
a) Create a record type variable ( concists of multiple segments)
b) Create a pl/sql table type of the records type in a)
c) Created a cursor of same structure as pl/sql table type ( collects data)
d) BULK CoLLECT data from cursor into pl/sql table
e) Print the data
But during Bulk Collect i get the below error :
Unexpected error in xxc_hr2hr_populate_elements.main at FLOW TRACE-1.120. Error: ORA-06502: PL/SQL: numeric or value error: NULL index table key value
ORA-20003: Unexpected error in xxc_hr2hr_populate_elements.get_data at FLOW TRACE-1.1.100. Error: ORA-06502: PL/SQL: numeric or value error: Bulk Bind: Truncated BindAshish_Apps wrote:
Hi,
I am trying toceate an interface which collects data from database make some transformation and populated seeded tables in the same database.
My Approach is :
a) Create a record type variable ( concists of multiple segments)
b) Create a pl/sql table type of the records type in a)
c) Created a cursor of same structure as pl/sql table type ( collects data)
d) BULK CoLLECT data from cursor into pl/sql table
e) Print the data
But during Bulk Collect i get the below error :
Unexpected error in xxc_hr2hr_populate_elements.main at FLOW TRACE-1.120. Error: ORA-06502: PL/SQL: numeric or value error: NULL index table key value
ORA-20003: Unexpected error in xxc_hr2hr_populate_elements.get_data at FLOW TRACE-1.1.100. Error: ORA-06502: PL/SQL: numeric or value error: Bulk Bind: Truncated BindVerify the rows you are fetching are having the same data types as your Record like Dates should go to date , decimal should not be fetched in type defined as number etc. -
PL/SQL Using SQL%NOTFOUND to raise a user defined exception in a function
I have written the following function for finding the number of items in stock in the item table.
CREATE OR REPLACE function getAmount (ItemID IN NUMBER)
RETURN NUMBER
AS
invalid_id EXCEPTION;
returnedQty number;
BEGIN
Select qty
Into returnedQty
From item
Where itemNo = ItemID;
RETURN (returnedQty);
IF SQL%NOTFOUND THEN
RAISE invalid_id;
END IF;
COMMIT;
Exception
WHEN invalid_id THEN
DBMS_OUTPUT.PUT_LINE('Invalid ID entered');
END getAmount;
The function compiles successfully, although there is a problem that Oracle is not handling my user-defined exception invalid_id
If I use the following for a valid itemID:
DECLARE
return_value number;
BEGIN
return_value := getAmount(1);
DBMS_OUTPUT.PUT_LINE (return_value);
END;
then the function returns the quantity of items in stock correctly.
However, if I enter an incorrect itemID, say 20
DECLARE
return_value number;
BEGIN
return_value := getAmount(20);
DBMS_OUTPUT.PUT_LINE (return_value);
END;
The invalid_id exception is not raised, and the Oracle errors says: no_data_found and the function has not returned a value. If I add a no_data_found exception, this works perfectly, but for this assignment I must write my own user-defined error.
Any help would be very much appreciated!
Thank you.What you're trying to do, is to use an implicit cursor. Implicit cursors will raise no_data_found and too_many_rows in case of an error. Explicit cursors will not.
Also, you have a small coding error ... a little rewrite and your code will do as you want to:
CREATE OR REPLACE function getAmount (ItemID IN NUMBER)
RETURN NUMBER
AS
invalid_id EXCEPTION;
returnedQty number;
cursor citem is
Select qty
From item
Where itemNo = ItemID;
fnd boolean;
BEGIN
open citem;
fetch citem Into returnedQty;
fnd := citem%found;
close citem;
if fnd then
RETURN (returnedQty);
else
RAISE invalid_id;
END IF;
/* Do not catch your own exception or the calling code will not receive it.
Exception
WHEN invalid_id THEN
DBMS_OUTPUT.PUT_LINE('Invalid ID entered');
END getAmount;
Your problem is, you're not using a package. This means, that the calling code has no way of catching this user-defined exeption. The correct way is to define a package, define the userdefined exception in the package and refer to it in your code:
create or replace package amt
is
invalid_id EXCEPTION;
function getAmount (ItemID IN NUMBER)
RETURN NUMBER;
end;
create or replace package body amt
is
function getAmount (ItemID IN NUMBER)
RETURN NUMBER
AS
returnedQty number;
cursor citem is
Select qty
From item
Where itemNo = ItemID;
fnd boolean;
BEGIN
open citem;
fetch citem Into returnedQty;
fnd := citem%found;
close citem;
if fnd then
RETURN (returnedQty);
else
RAISE invalid_id;
END IF;
end;
end; -- end package
To do a simple test, you'll do:
declare
a number;
begin
a := amt.getAmount(123);
dbms_output.put_line('The result is '||a);
exception
when amt.invalid_id then
dbms_output.put_line('ID not found');
end;
Other ways is to raise the exception in your no_data_found block.
But I'm REALLY puzzled if there's really someone out there who prefers a user-defined exception instead of the clearly defined NO_DATA_FOUND exception.
I can't be sure of course, but are you sure what they mean is they don't want ANY exception? That's a pretty common requirement.
In general - explicit cursors are a bit faster because Oracle does not have to do a second fetch to determine TOO_MANY_ROWS. And it's not too much additional writing. Explicit cursors will never raise exceptions - unless you use dynamic sql and your SQL is invalid.
Good luck -
In which of the following sections of a PL/SQL block is a user-defined exception raised?
Hi,
A (somewhat elementary) question:
In which of the following sections of a PL/SQL block is a user-defined exception raised?
a) Exception section
b) Declarative section
c) Error handling section
d) Executable section
I'd be interested to hear people's answers.
Thanks.As Etbin already noted, there are only 3 sections and user-defined exception can be raised in any of them. User-defined exception raised in declarative section example:
declare
year_zero exception;
pragma exception_init(year_zero,-01841);
begin
declare
v_dt date := to_date(1721420,'j');
begin
null;
end;
exception
when year_zero
then
dbms_output.put_line('Year 0!');
end;
Year 0!
PL/SQL procedure successfully completed.
SQL>
User-defined exception raised in executable section example:
declare
year_zero exception;
pragma exception_init(year_zero,-01841);
v_dt date;
begin
v_dt := to_date(1721420,'j');
exception
when year_zero
then
dbms_output.put_line('Year 0!');
end;
Year 0!
PL/SQL procedure successfully completed.
SQL>
User-defined exception raised in exception handling section example:
declare
year_zero exception;
pragma exception_init(year_zero,-01841);
v_dt date;
begin
declare
v_num number;
begin
v_num := 1 / 0;
exception
when others
then
v_dt := to_date(1721420,'j');
end;
exception
when year_zero
then
dbms_output.put_line('Year 0!');
end;
Year 0!
PL/SQL procedure successfully completed.
SQL>
SY. -
'User defined exception error in package OE_SCHEDULE_UTIL' in Sales Order
Dear Contributors,
I am getting the following error while trying to enter line items in the Sales order form. Please provide your valuable suggestion on how to fix this...
User defined exception error in package OE_SCHEDULE_UTIL Procedure Insert_Into_Mtl_Sales_Orders1004661 wrote:
Dear Contributors,
I am getting the following error while trying to enter line items in the Sales order form. Please provide your valuable suggestion on how to fix this...
User defined exception error in package OE_SCHEDULE_UTIL Procedure Insert_Into_Mtl_Sales_Orders
Please see (ORA-01006 bind variable does not exist FND_FLEX_SERVER during OM Activity [ID 1067359.1]).
Thanks,
Hussein -
The oracle application express environment is created by installing the HTTP Server on the windows server and the application express 3.2.1 components on the 11.1.0.7 oracle database on UNIX. The installation is successfully and have not seen any issues during the installation. After completing all the steps, when tried to login and click the application builder or workspace components, I see the error message
report error:ORA-06502: PL/SQL: numeric or value error: character to number.
This error message is seen on most of the pages when trying to accessed and not able to understand the reasons behind it. Its a brand new environment setup and not even presented to developers to test it.
Below error message is always seen when trying to access most of the components like application builder, schema comparison and some other tabs. Please advice
report error:
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
Edited by: user589320 on Jun 9, 2011 5:17 PMI think its better you use APEX 4.x version ratherthan using old version.
You will get more features and some bug fixes and also it's easy for you to get some help when you need.
* If this answer is helpfull or correct then please mark it and grant the points. -
We face the above error in HTMLDB (APEX) application Ver 3.1.0. This occurs when we try to display more number of rows/records in drop-down list (LOV in tabular forms). We are able to display 200 records in LOV. When the list of records exceeds 230, we face the below error
report error:ORA-06502: PL/SQL: numeric or value error: character string buffer too small
the values listed in LOV are from tables (one of the columns in table)
Could anyone give us a solution?Hi
As you are using a tabular form, you could actually do the following:
1 - In the tabular form column's attributes, set the following:
Display as: Select List (query based on LOV)
Display extra values: Yes
List of values definition: SELECT null d, null r FROM DUAL
2 - Add a new page item and set it to generate your select list
3 - Create an HTML region with no template and use the following for its source:
<script type="text/javascript">
function loadList(c, l)
var s = document.getElementsByName(c);
var lItem = document.getElementById(l);
var lLength = lItem.options.length;
var k;
var j;
var x = lItem.innerHTML;
var v;
var o;
var z;
for (k = 0; k < s.length; k++)
z = s[k];
v = z.value;
z.options.length = 0;
for (j = 0; j < lLength; j++)
o = new Option()
o.value = lItem[j].value;
o.text = lItem[j].text;
z.options[j] = o;
z.value = v;
if (z.selectedIndex == -1)
z.selectedIndex = 0;
loadList("f05", "P1_MGR");
</script>
(Change "f05" and "P1_MGR" as appropriate to your column and your new page item respectively)
Now, when you load the page, the select list contains a null entry plus the entry already on the database. The javascript kicks in automatically, loops through every entry in the "f05" column, copies the existing value, replaces the select list with the new page item version and sets its value to the copied value.
Your new page item could be in a DIV tag that has a style of "display:none" to hide it from view.
Andy -
Hi everybody,
I have two Distinct Databases on two distinct servers. (Oracle Ent. Release 10.2.0.3.0 on AIX 5.3). After I install the latest patch last week, One of the APEX installation has some problems on Home>Application Builder Page. The error message is very random and
report error:
ORA-06502: PL/SQL: numeric or value error: NULL index table key value.
When i change the view (details to icons), everything goes to normal. This error message is reflected some of the pages (report region) of some of my applications randomly. When it appears in a report region, i deselect the order method of the region, the result is normal.
But the other APEX application on the other instance has no problem. It is a bug? or Should i re-install the APEX instance?
Thank you for your interest?
Gökhan ÇATALKAYANo, but we have a reproducible test case now so we're working on it. See ORA-06502: PL/SQL: numeric or value error: NULL index table key value
Scott
Maybe you are looking for
-
Inet4AddressImpl.lookupAllHostAddr(String) hangs/blocks
I'm experiencing a hang when attempting to establish a socket connection. Debugging indicates the VM is blocked here: Inet4AddressImpl.lookupAllHostAddr(String) line: not available [native method] I'm experiencing this problem during an ANT build. In
-
Ken Burns? Other use of stills?
Can't see from any of the screen shots or on Apple iMovie sites any mention of Ken Burns effect. Is it still there? Does iMovie '08 still fully support all the ways to use stills in iMovie making?
-
Sync photos from iTunes 0 photos yet my iPhone has 2546 photos
I have an iphone 5 all software is up to date. My problem is that when I use iTunes to sync my phone I have zero (0) photos selected from iphoto to be synced yet I have over 2500 photos on my phone. 1. My question is do I have to manually delete th
-
TWAIN driver for Photoshop CS6
Hello, I'm looking for the TWAIN driver for Photoshop CS6 This link Adobe - Photoshop : For Windows : Photoshop CS5 Optional Plugins doesn't contains the TWAIN driver. So, where can I get the TWAIN driver? Thank for your help! Hans-Joerg
-
Opened an Apple binary property list file with Texteditor
Hello, i made the mistake opening an Apple binary property list file with Texteditor made a change and save it, now the file is corrupted. I should have used bbedit or textwrangler in stead but thats to late now. Is there a way to convert the file ba