0
 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 查询是否在给定条件下成功执行?

4

3 回答 3

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 as 执行

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;
于 2012-11-05T07:20:09.857 回答
0

在这个例子中,我可以停止使用另一个输出变量来返回,对吗?并检查我的前端中的条件,例如“out_name”是否以某种方式返回 null 错误句柄,如果它返回值,它将以其他方式处理,哪一个是有效的?????使用另一个 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;                                                                                                    
于 2012-11-05T08:14:05.350 回答
0

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

BEGIN
 SELECT EmpName into out_name from emptable where Empno = in_empno
 EXCEPTION
     WHEN NO_DATA_FOUND THEN
         out_name := NULL;
END;
于 2012-11-05T06:25:04.377 回答