Plsql 未找到异常处理的\u数据\u
当上述查询未获取任何行时,此过程将抛出“未找到数据”异常。我需要做一些其他的更新/插入过程,而不是抛出这个异常。如何做到这一点 只需在例外部分执行,检查以下内容:Plsql 未找到异常处理的\u数据\u,plsql,oracle10g,oracle-sqldeveloper,Plsql,Oracle10g,Oracle Sqldeveloper,当上述查询未获取任何行时,此过程将抛出“未找到数据”异常。我需要做一些其他的更新/插入过程,而不是抛出这个异常。如何做到这一点 只需在例外部分执行,检查以下内容: PROCEDURE getEmployeeDetails(EmpID IN NUMBER, EmpSalary OUT NUMBER) Is BEGIN SELECT Salary into EmpSalary FROM Emplo
PROCEDURE getEmployeeDetails(EmpID IN NUMBER,
EmpSalary OUT NUMBER) Is
BEGIN
SELECT Salary
into EmpSalary
FROM Employee_accounts_master
WHERE Emp_ID = EmpID
AND SALARY = 'B';
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line(-20001);
测试记录的存在性是显式游标非常有用的一个实例
Begin
BEGIN
SELECT Salary
into EmpSalary
FROM Employee_accounts_master
WHERE Emp_ID = EmpID
AND SALARY = 'B';
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- use the label
goto myinsert;
end;
-- here is your line 67 code starts
<<myinsert>>
-- your insert statement, for eg.
insert into emp (empno) values (1);
end;
或者,您可以使用MERGE语句,但只需在不匹配时编码一个分支,然后插入分支 是否有可能将执行指向包含所有数据的另一行。假设我在第67行有一个插入操作。当找不到数据时,是否可以将执行转移到第67行?为什么它将标签作为标识符并要求我声明它?是否将标签放在第67行之前?这种方法的问题是,如果找到行,代码也会尝试插入。这是不可取的。虽然我比大多数人都更放松,但它仍然被普遍认为是不好的做法,除非绝对必要,否则应该避免。这不是罕见的情况之一。重命名此过程可能是可取的,它的名称get employee details意味着它不会更改数据库。
PROCEDURE getEmployeeDetails(EmpID IN NUMBER,
EmpSalary OUT NUMBER)
IS
cursor c_emp (p_EmpID NUMBER) is
SELECT Salary
FROM Employee_accounts_master
WHERE Emp_ID = p_EmpID
AND SALARY = 'B';
r_Emp c_emp%rowtype;
BEGIN
open c_emp(EmpID);
fetch c_emp into r_emp;
if c_emp%NOTFOUND then
insert into employee (emp_id) values (EmpID);
end if;
close c_emp;
END;