如何确定此SELECT查询是否成功执行?

时间:2012-11-05 06:08:24

标签: oracle stored-procedures plsql oracle10g oracle11g

 CREATE PROCEDURE Pname(in_empno IN NUMBER out_name OUT VARCHAR2)
 AS
 BEGIN
 select EmpName into out_name from emptable where Empno = in_empno;
 END Pname;

在上面的过程中,如何使用给定条件检查SELECT查询是否成功执行?

3 个答案:

答案 0 :(得分:0)

您可以使用EXCEPTION块来确定是否返回了行或是否发生了其他异常。试试这个

BEGIN
 SELECT EmpName into out_name from emptable where Empno = in_empno
 EXCEPTION
     WHEN NO_DATA_FOUND THEN
         out_name := NULL;
END;

答案 1 :(得分:0)

如果您想查看out_name参数的输出,请按以下步骤

CREATE OR REPLACE PROCEDURE pname (in_empno IN NUMBER, out_name OUT VARCHAR2)
IS
BEGIN
    SELECT  empName 
      INTO  out_name
      FROM  emptable
     WHERE  empno = in_empno;
EXCEPTION
    WHEN NO_DATA_FOUND
    THEN
        raise_application_error (
            -20000,
            'Unable to execute procedure because of: ' || SQLERRM
        );
END pname;

此过程可以从sql plus执行

var ret varchar2(512);

exec pname(2345,:ret);

print ret;

更新1

如果您希望在sql查询成功执行时返回值,并且如果有错误则返回另一个值,则执行

CREATE OR REPLACE PROCEDURE pname (in_empno   IN        VARCHAR2,
                                              out_name        OUT VARCHAR2,
                                              returnval   IN OUT NUMBER
                                             )
IS
BEGIN
    SELECT  employee_name
      INTO  out_name
      FROM  employees
     WHERE  emp_number = in_empno;

    returnval := 0;
EXCEPTION
    WHEN NO_DATA_FOUND
    THEN
        returnval := 1;

END pname;

并从sql plus调用该过程为

var ret varchar2(512);
var ret2 number;

exec pname(2346,:ret,:ret2);

print ret;
print ret2;

答案 2 :(得分:0)

在这个例子中,我可以停止使用另一个输出变量来返回权利吗?并检查我的前端条件,如果'out_name'在某种程度上返回null ill句柄,如果它返回值,它将以其他方式处理,哪一个是有效的?????再使用一个out变量Retvalue,或者这样做

CREATE OR REPLACE PROCEDURE pname (in_empno   IN   VARCHAR2, out_name OUT VARCHAR2)
IS
BEGIN
SELECT  employee_name
  INTO  out_name
  FROM  employees
 WHERE  emp_number = in_empno;


EXCEPTION
    WHEN NO_DATA_FOUND
    THEN
        out_name := NULL;
  END;