Return User Defined Exceptions from SP
Hi,
Is it possible to return user defined business exceptions from a stored procedure to the dotnet app. through ODP. NET( equivalent to the throw keyword in Java)?
I would prefer to handle all of the oracle expections in the try catch block of the C# code.
Thanks,
Peeyush
Is your question how to return a custom exception from PLSQL? You'd use RAISE_APPLICATION_ERROR for that, and yes it would propagate via ODP to the calling application.
Here's a simple dumb example:
create or replace procedure raise_my_error as
begin
raise_application_error(-20001,'something bad happened');
end;
Hope it helps,
Greg
Similar Messages
-
How to handle user defined exception from C#?
Hi:
I have some PL/SQL code that will throw a user defined exception if certain conditions are met. How do I handle user defined exceptions if this procedure/function is being called from C#? C# can handle a normal Oracle SQL error (e.g. ORA-XXXX) because they are defined in the proper class, but how do I get it to know about my user defined exception? Does anyone have any links to examples of doing this?
Thanks.Hi Gaff,
Is there a particular problem you're having doing this? It works as normal for me...
Cheers
Greg
PLSQL
=========
create or replace procedure throwsomething as
begin
raise_application_error(-20001,'kaboom');
end;
ODP
=====
class Program
static void Main(string[] args)
using (OracleConnection con = new OracleConnection())
con.ConnectionString = "user id=scott;password=tiger;data source=orcl";
con.Open();
using (OracleCommand cmd = new OracleCommand())
cmd.CommandText = "begin throwsomething;end;";
cmd.Connection = con;
try
cmd.ExecuteNonQuery();
catch (OracleException oe)
Console.WriteLine("caught " + oe.Message);
OUTPUT
========
caught ORA-20001: kaboom
ORA-06512: at "SCOTT.THROWSOMETHING", line 3
ORA-06512: at line 1 -
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 -
Why User Define Exception range from -20,000 to -20,999
Hi,
Can any one told me why we are using user define exception as ( -) 'Negative' range from -20,000 to -20,999. Why not Positive.
ThanksHi
Oracle error codes are negatives.
Ott Karesz
http://www.trendo-kft.hu -
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 -
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? -
How can we handle user defined exceptions in ejbStore() of entity bean
Accroding to my knowledge in ejbStore we can not handle user defined exceptions. Can anybody help on this????
In my case I am calling a method from ejbsotre() . In that method i wanted to put some checks according to that i wanted to throw exceptions.
In this case how would I handle exceptions.
Can you suggest in this case,please !!! -
I am using Portal 3.0.6 in Sun SunOS 5.8. The site will be running in https mode. As everybody knows, 443 is the default port number for ssl mode. I setup the httpd.conf to 443. No problem. I ran ssodatan to relate Login Server to Portal - I had to specify 443 at the end of URL in ssodatan syntax. Otherwise, I got "Error:You cannot login because there is no configuration information stored in the enabler configuration table. (WWC-41439)" both in Netscape navigator and MS Internet Explorer.
I now am able to log in Portal site. But, the problem happens just after loggin in. With Navigator I don't get any problems. But, IE gives me "Error: Unexpected error encountered in wwsec_app_priv.process_signon (User-Defined Exception) (WWC-41417)". I guess this happens because of how IE works with https. It takes 443 off from URL in https mode. The portal is unable to match the url and what it has in wwsec_enabler_config_info$ which has 443. When I tested with 444 as port number. It worked! Putting a port number in URL will be cumbersome. That's why I am trying with 443.
I tried also with ssodatax to add an additional entry for without 443 as specified in a document "Oracle9ias Portal configuration options" page 30. Ssodatax has a bug so it updates existing entry, too. I had to update it back to its original value. It's fine. But, this time another error comes up. "WWC-00000". I don't see any solution for this.
nullWhen a new user is logging on for the first time, the portal adds them to the AUTHENTICATED_USERS group under the portal's group container. In your case, for some users, this is apparently running into some problem.
To debug this, try turning on additional logging on the OID server and attempt logging in as these users, and see what is reported.
You should enable the following debug flags:
Search Filter Processing
Access Control List Processing
Status Log Connections/Operations/Results -
How to use user defined exception class
Hi all
I just need som help with creating a user defined exception class.
Im writing a small/simple text editor.
My exception class looks like this:
public class myExcp extends Throwable
private String message;
public myExcep(String message)
this.message = message;
public void display()
System.out.println(message);
I would like to use it when a user tries to open a exe-file instead of a txt file.
Here is some code from the editor:
if (e.getSource() == open)
saveOld();
if (fc.showOpenDialog(null)== JFileChooser.APPROVE_OPTION)
readFile(fc.getSelectedFile().getAbsolutePath());
saveas.setEnabled(true);
So, should I use exception here or at the readFile method?
readfile:
private void readFile(String fileName)
try
String tmp = fileName.substring(fileName.length() -4, fileName.length());
if (!tmp.equals(".exe"))
FileReader r = new FileReader(fileName);
textarea.read(r, null);
r.close();
currentFile = fileName;
label.setText(currentFile);
changed = false;
catch (IOException e)
JOptionPane.showMessageDialog (this, "Cannot find the file " + fileName);
Where and how do I use my exception class.
Do I need to create an instance? Where?
Should the exception class extend Exception instead?
Thank you in advance /Extend Exception, not Throwable. It's a checked exception that way.
Follow the Sun coding standards and make that exception class name start with a capital letter.
When you extend Exception, override all four ctors.
What's that display method you added? Isn't getMessage() good enough?
You need to create a new instance just before you throw the exception, of course.
Sounds like a terrible design, by the way. Exceptions shouldn't be used like "go to" for app logic. They should signal unrecoverable conditions. You can easily recover from the situation you've described simply by displaying a pop-up that tells the user to open only text-readable file types. I think that's a better solution.
% -
How to raise the user defined Exceptions in XI ?
Hi All
I am learning XI ...i want know how to set up the user defined Exceptions
in XI?
Where and What are the settings need to be done ?
Same time where can check the LOG file ? to see all the server information ?
Welcome to your answers
Regards
RakeshRakesh,
Check this weblogs which will guide you:
/people/bhavesh.kantilal/blog/2006/07/25/triggering-xi-alerts-from-a-user-defined-function
/people/alessandro.guarneri/blog/2006/01/26/throwing-smart-exceptions-in-xi-graphical-mapping
/people/stefan.grube/blog/2005/12/30/test-user-defined-functions-for-the-xi-graphical-mapping-tool-in-developer-studio
Also check this thread:
Mapping test throughs exception for UDF that does'nt exist anymore
---Satish -
How to catch the user defined exception in application service
Hi All,
How to catch the user defined exception in application service when it is throwed by the external service..
Regards,
Thirumurugan.Hi,
Thanks for your reply,
Actually I am calling validate Login method of External service from the application service. When the login fails, my external service will throw user defined Exception.I want to catch the user defined Exception.
But in the application service , validate Login method can catch only Invocation Exception and Engine Exception.
These two exception are present in the Application service remote interface.
public com.sap.comptest.extsrv.accrjavawsvi__document.output.
Ns1_validateLoginResponse validateLogin(com.sap.comptest.extsrv.accrjavawsvi__document.input.Ns1_validateLogin input) throws com.sap.caf.mp.base.exception.InvocationException, com.sap.caf.mp.base.exception.EngineException;
User defined exception is not present there. When i include the webservice as external service in CAF, it suppossed to generate the java file for the custom exception of validate Login method and this generated file should be included in the application service remote interface..
public com.sap.comptest.extsrv.accrjavawsvi__document.output.
Ns1_validateLoginResponse validateLogin(com.sap.comptest.extsrv.accrjavawsvi__document.input.Ns1_validateLogin input) throws com.sap.caf.mp.base.exception.InvocationException, com.sap.caf.mp.base.exception.EngineException,
(generated file name of user defined Excpetion.
Then only validate login method of application service can catch the user defined Exception which is thrown by the external service.
regards,
Thirumurugan.p -
User defined Exception in Stateless Java Class WS
Hi,
I'm experimenting with publishing some of my application's Java classes as web services under OC4J 10.1.2. I've been quite successfull to do so, but I'm stuck into a problem trying to have my class's methods throw my own type of exception and retrieving it at the client side.
I'm using the proxies downloaded from the web service's automatic HTML page, and I see in the source code version that the proxy class specifically throws a org.apache.soap.SOAPException whenever there's a fault in the response message.
What I've done is simply to create a type derived from Exception with a String (message) and an Integer (code) properties, with just my own constructor that accepts two parameters corresponding to that properties. Then I make the methods in my Java class throw that exception.
I've tried both using both an Interface and a class, and also using just a class as parameters to StatelessWebServiceServlet / Web Service Assembler.
I can't find anywhere in any docs that explains how this can be done in OC4J. I believe that throwing user-defined exceptions is included in J2EE 1.4 and so I think that there should be a way to do it in OC4J if it is compliant. Maybe there's no way, but I couldn't find any reference to that neither.
I'll greatly appreciate any light on this issue.
Thanks in advance
Juan Alvarez Ferrando
Mensaje editado por:
user517323Thank you for your answer.
I'd like to know something more about how far does that limited support go, in case it could be of some use.
On the other hand, and just for the sake of constructive discussion, though I've contemplated the option of encoding error conditions on the result type, I always found that to be an ugly style from a interface design standpoint (not ws specifically but in general system desing terms), and when I saw a standard way to communicate custom error information separated from normal response I thought it to be the right way to go. After all, exceptions are just the way Java implements this design principle that has also found a place in most currently successful software environments (PL/SQL, .Net, ...).
I don't expect to extend the meaning and programmatic use of Java exceptions to my ws clients, but to be able to communicate detailed error condition information as the standards contemplate (faults), which as I understand from your kind answer is out of my reach in 10.1.2.
I have no experience with other ws platforms but I'd like to believe that if wsdl:fault is in the standards, those claming compliance will support it to the extent necessary to make it usable and interoperable as it is the way the standard covers error communication (and so that's why it is included in 10.1.3). I also beleve this would bring better interoperability than our home-made result types including error information, that no other application without our custom specifications can understand.
Also better interoperability would come from that than for example what I now see in 10.1.2, where all exceptions are communicated to the client with a faultcode of soap:Server, which I believe to have the standard meaning that there's a chance for the client to success retrying later without modifying it's request. This translation could be better suited for Java errors (unrecoverable) but not for all kinds of exceptions, and so in this question, custom exception support could also improve interoperability with systems that interpret SOAP fault codes.
Thank you.
Juan Alvarez Ferrando -
Propagating user defined exceptions
A question on marshalling user defined exception in RMI/IIOP. Consider the following simple Java interface and user defined exception:
public interface OrderProcess extends Remote {
String placeOrder(PO order) throws OrderException, RemoteException;
public final class OrderException extends java.lang.Exception implements java.io.Serializable {
public OrderException() { }
public String msg;
public OrderException(String _msg) {
msg = _msg;
If the client uses RMI/IIOP to access a CORBA server( client uses the rmi stubs generated by rmic -iiop, the server uses Dynamic Skeleton Invocation by implementing org.omg.CORBA.DynamicImplementation), how does the server send back the user defined exception OrderException so that it can be unmarshalled properly by the client stub? Here is a section of the rmi stub generated by JDK1.3.0, note it looks for an exception OrderEx and OrderException:
public String placeOrder(PO arg0) throws OrderException, RemoteException {
if (!Util.isLocal(this)) {
try {
org.omg.CORBA_2_3.portable.InputStream in = null;
try {
org.omg.CORBA_2_3.portable.OutputStream out =
(org.omg.CORBA_2_3.portable.OutputStream)
_request("placeOrder", true);
out.write_value(arg0,PO.class);
in = (org.omg.CORBA_2_3.portable.InputStream)_invoke(out);
return (String) in.read_value(String.class);
} catch (ApplicationException ex) {
in = (org.omg.CORBA_2_3.portable.InputStream) ex.getInputStream();
String id = in.read_string();
if (id.equals("IDL:RFQSample/initial/rfqTypes/OrderEx:1.0")) {
throw (OrderException) in.read_value(OrderException.class);
throw new UnexpectedException(id);
} catch (RemarshalException ex) {
return placeOrder(arg0);
} finally {
_releaseReply(in);
} catch (SystemException ex) {
throw Util.mapSystemException(ex);
} else {
ServantObject so = servantpreinvoke("placeOrder",OrderProcess.class);
if (so == null) {
return placeOrder(arg0);
try {
PO arg0Copy = (PO) Util.copyObject(arg0,_orb());
return ((OrderProcess)so.servant).placeOrder(arg0Copy);
} catch (Throwable ex) {
Throwable exCopy = (Throwable)Util.copyObject(ex,_orb());
if (exCopy instanceof OrderException) {
throw (OrderException)exCopy;
throw Util.wrapException(exCopy);
} finally {
servantpostinvoke(so);Not sure exactly if that's what you are asking but the unmarshalling of your OrderException happens in this catch block:
catch (ApplicationException ex)
in = (org.omg.CORBA_2_3.portable.InputStream) ex.getInputStream ();
String id = in.read_string ();
if (id.equals ("IDL:RFQSample/initial/rfqTypes/OrderEx:1.0"))
throw (OrderException) in.read_value (OrderException.class);
throw new UnexpectedException (id);
}the ApplicationException class is the vehicle that transports your exception instance across the wire. You can dig further into the implementation to see how it is done.
Vlad. -
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 -
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
Maybe you are looking for
-
SharePoint Foundation Active Directory Problem
Hey, I have a problem with the Active Directory connection to SharePoint Foundation. My Situation looks like this: I'm working on a kind of project controlling plattform. Each of our customers has its own site. Also each customer has an account in ou
-
How can i get my password if i cant connect to itunes
so i changed my passcode to my i-pod because my brother found out what it was and i know i put taylor gang (without spacing) as my passcode but i have big hands so when i put the passcode i must have pressed a wrong button because and now i cant get
-
Javascript doesn't play() embedded sound
This is a question about the PDF specification regarding how to use the javascript API to play a sound object. Specifically, why in my basic example is the javascript able to see the sound, but can't play() it? I have a test PDF illustrating my probl
-
Why does my iMac crash after installing ios lion?
I bought my iMac 21 in 2010 and it crashes due to the lion softeware. It's not a Kernal Panic crash but after I leave it on for awhile the wireless keyboard and mouse are frozen, I can't even wake it up after hitting the space bar. Is there a setting
-
Partial picking and PGI (with Idoc)
Hello a) We have a scenario where we would like to achieve partial picking and PGI with Idoc: For example In the delivery the delivery qty is 10 from the beginning, but we would like to pick only 7 and perform the PGI anyway. The 3 remaining units sh