Oracle Error Codes Ora-01403
easiest fix would be is to handle the error in the PL/SQL block, When a SQL statement is written within a PL/SQL block, enclose the SQL with a BEGIN and END statement. Handle the exception and raise a user-friendly message or handle the rest of the processing. Eg: CREATE OR REPLACE PROCEDURE test_proc (p_empno IN NUMBER) IS l_empname VARCHAR2(50); BEGIN SELECT empname INTO l_empname FROM emp WHERE empno = p_empno; IF l_empname = 'Sarah Jones' THEN INSERT INTO empresult values ('105', 'Found Sarah Jones'); END IF; END; / The above procedure has not handled the error that would be raised if the select statement did not find the specified empno. See the following for the error raised: SQL> exec test_proc (1) begin test_proc (1); end; * ERROR at line 1: ORA-01403: no data found ORA-06512: at "TAROT.TEST_PROC", line 4 ORA-06512: at line 1 If you want the procedure to execute properly without errors on the screen, then you would have to handle the error. The Exception needs to be controlled by adding an exception handler to the code. The above code has been modified to handle an exception NO_DATA_FOUND. This is the name of the exception that the error relates to. CREATE OR REPLACE PROCEDURE test_proc (p_empno IN NUMBER) IS l_empname VARCHAR2(50); BEGIN SELECT empname INTO l_empname FROM emp WHERE empno = p_empno; IF l_empname = 'Sarah Jones' THEN INSERT INTO empresult values ('105', 'Found Sarah Jones'); END IF; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO empresult values(p_empno, 'Did not find Sarah Jones'); END; / If you execute the above procedure now, this is what you would see: SQL> exec test_proc (1) PL/SQL procedure successfully completed. SQL> select * 2 from empresult; EMPNO EMPNAME --------- -------------------------------------------------- 1 Did not find Sarah Jones As the exception was handled, a row was inserted into the empresult table with the error message you specified. When the exception is raised, the control jumps from the select statement to the exception handler routine. Any code after the Select will not get executed if an exception has been raised. But if you do have some code that needs to be executed after the select has been executed, irrespective of whether the select was successful or not, then you would need to nest the begin and end statements. CREATE OR REPLACE PROCEDURE t
SQL TuningSecurityOracle UNIXOracle LinuxMonitoringRemote supportRemote plansRemote servicesApplication Server ApplicationsOracle FormsOracle PortalApp UpgradesSQL ServerOracle ConceptsSoftware SupportRemote Support Development Implementation Consulting StaffConsulting PricesHelp Wanted! Oracle PostersOracle Books Oracle Scripts Ion Excel-DB Don Burleson Blog
ORA-01403: no data found tips Oracle Error Tips by Burleson Consulting Oracle docs note this about ORA-01403: ORA-01403 no data found Cause: In a host language program, all records have been fetched. The return code from the fetch was +4, indicating that all records http://www.orafaq.com/wiki/ORA-01403 have been returned from the SQL query. Action: Terminate processing for the SELECT statement Many people experience ORA-01403 in association with the SELECT INTO clause. SELECT INTO clauses are standard SQL queries which pull a row or set of columns from a database, and put the retrieved data into variables which have been predefined. If the SELECT INTO statement doesn't return at http://www.dba-oracle.com/sf_ora_01403_no_data_found.htm least on e row, ORA-01403 is thrown. Here is an example: SQL> declare 2 v_authName author.author_last_name%type; 3 begin 4 select 5 author_last_name into v_authName 6 from 7 author 8 where 9 author_state = 'FL'; 10 dbms_output.put_line('Name: '||v_authName); 11 end; 12 / declare * ERROR at line 1: ORA-01403: no data found ORA-06512: at line 4 Because the query is looking to retrieve authors in Florida and there are none, the ORA-01403 error is thrown. To avoid ORA-01403, the PL/SQL has to contain exceptions , otherwise the query will offer to values to the defined variable. If the exceptions are not defined properly, you will encounter ORA-01403, and your situation may worsen each time you attempt to access the particular variable. Creating an exception in which only one row can be retrieved would allow the code to appropriately handle the exception without receiving the ORA-01403 error. To create this SELECT INTO query that will avoid the ORA-01403 error, and handle the appropriate exceptions, here is an example: SQL> create or replace function auth_Name 2 ( v_auth_state IN author.author_state%type) 3 return varchar2 4 as 5 v_ahere for a quick overview of the site Help Center Detailed answers to any questions you might have Meta Discuss the workings and policies of this site About Us Learn more about Stack Overflow http://stackoverflow.com/questions/3940522/why-is-no-data-found-ora-01403-an-exception-in-oracle the company Business Learn more about hiring developers or posting ads with us Stack http://psoug.org/oraerror/ORA-01403.htm Overflow Questions Jobs Documentation Tags Users Badges Ask Question x Dismiss Join the Stack Overflow Community Stack Overflow is a community of 6.2 million programmers, just like you, helping each other. Join them; it only takes a minute: Sign up Why is no_data_found ORA-01403 an exception in Oracle? up vote 12 down vote favorite 2 If the oracle error SELECT INTO statement doesn't return at least one row, ORA-01403 is thrown. For every other DBMS I know this is normal on a SELECT. Only Oracle treats a SELECT INTO like this. CREATE OR REPLACE PROCEDURE no_data_proc IS dummy dual.dummy%TYPE; BEGIN BEGIN SELECT dummy INTO dummy FROM dual WHERE dummy = 'Y'; EXCEPTION WHEN no_data_found THEN dbms_output.put_line('Why is this needed?'); END; END no_data_proc; Why? In my opinion you don't need this exception oracle error codes really. It is too much overhead. Sometimes it is handy but you have to write a whole BEGIN, EXCEPTION, WHEN, END Block. Are there any essential reasons I don't see? oracle exception exception-handling plsql ora-01403 share|improve this question edited Feb 12 '11 at 1:33 OMG Ponies 199k37361417 asked Oct 15 '10 at 8:12 Stephan Schielke 1,11051735 4 Don't forget to catch TOO_MANY_ROWS when the select returns more than one row. –Rene Oct 15 '10 at 13:19 add a comment| 6 Answers 6 active oldest votes up vote 15 down vote accepted The exception block is not needed, you might use it or not, depending on the context. Here you are actively ignoring the exception (the procedure will return successfully) but most of the time if you're doing a SELECT INTO you want it to fail if it doesn't return a row, consider: PROCEDURE update_employee_salary (p_empno) IS l_salary NUMBER; BEGIN SELECT sal INTO l_salary FROM emp WHERE empno = p_empno FOR UPDATE; /* do something with emp data */ END; Here I want my function to fail if it is called with an empno that doesn't exist in the EMP table. I might catch the exception to raise a meaningful error message (with raise_application_error) but most of the time I'm happy with the ORA-0140
Library mySQL Code Library PHP Code Library JavaScript Code Library Oracle Terms & Definitions Oracle Error Codes PSOUG Community Blogs Oracle Jobs Board PSOUG Forum Oracle User Group Directory Free Oracle Magazines Online Learning Center PSOUG Presentations Advanced Code Search News and Events Sponsors Page Submit Code Contact Us Oracle Error: ORA-01403 Error Description: No data found Error Cause: In a host language program, all records have been fetched. The return code from the fetch was +4, indicating that all records have been returned from the SQL query. In other words, this error occurs when a SQL statement, written within a PL/SQL block, does not fetch any data. This may be because you executed a SELECT INTO statement and no rows were returned, or you referenced an uninitialized row in a table, or because you read past the end of file with the UTL_FILE package. Action: Terminate processing for the SELECT statement. This error is often associated with the SELECT INTO clause. To avoid ORA-01403, the PL/SQL has to contain exceptions or the query will offer no values to the defined variable. If the exceptions are not defined properly, you will encounter ORA-01403. There haven't been any comments added for this error yet. You may add one if you like. Add a comment Name: Email: URL: Chars left:1000 (1000 max) (No HTML, but newlines will be preserved) Home : Code Library : Sponsors : Privacy : Terms of Use : Contact Us 71 users online © 2009 psoug.org PSOUG LOGIN Username: Password: Forgot your password?