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

Oracle 如何确定此SELECT查询是否成功执行?,oracle,stored-procedures,plsql,oracle10g,oracle11g,Oracle,Stored Procedures,Plsql,Oracle10g,Oracle11g,在上述过程中,如何检查SELECT查询在给定条件下是否成功执行?您可以使用异常块确定是否返回了行或是否发生了其他异常。试试这个 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; 如果希望看到out_name参数的输出,请尝试以下操作

在上述过程中,如何检查SELECT查询在给定条件下是否成功执行?

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

 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;

如果希望看到out_name参数的输出,请尝试以下操作

BEGIN
 SELECT EmpName into out_name from emptable where Empno = in_empno
 EXCEPTION
     WHEN NO_DATA_FOUND THEN
         out_name := NULL;
END;
此过程可以通过sql plus作为

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;
更新1

如果您希望在sql查询成功执行时返回一个值,如果出现错误,则返回另一个值,然后执行以下操作

var ret varchar2(512);

exec pname(2345,:ret);

print ret;
并根据需要从sql plus调用该过程

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;

在这个例子中,我可以不再使用一个out变量作为return,对吗?我会检查前端的条件,比如如果'out_name'以某种方式返回null ill handle,如果它返回值,将以另一种方式进行处理,哪种方式是有效的?????使用一个以上的out变量作为Retvalue,或者这样做

var ret varchar2(512);
var ret2 number;

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

print ret;
print ret2;

当您说成功时,您希望返回数据吗?是的,应该会返回一些记录condition@user1您想知道您的sql查询是否成功执行,或者out\u name的值是多少?在参数名称前面加上“in\u”和“out\u”对我来说似乎很笨拙。如果您关心查询中的名称空间问题,那么在pl/sql变量名称前面加上过程名称(在表列名前面加上表或其别名),这是一个更健壮的解决方案。换句话说,使用EMPNO作为参数名,并在查询中指定“where emptable.EMPNO=pname.EMPNO”。将来的用户1最终会感谢您的。@venkat谢谢您,我能用SQL%ROWCOUNT找到受影响的行吗?如果是,怎么做?@user1关于您的查询,找出受影响的行是没有意义的,如果未找到数据或查询返回多个值,oracle将引发异常。SQL%ROWCOUNT将在更新、删除和插入中使用,而不是在选择中使用。嗨,Pravin Satav检查此链接,我们可以在“选择”中使用SQL%ROWCOUNT,我想知道如何使用它。如果有人有示例,请帮助我。问题是为什么%row count%?您可以使用
select count(*)从Empno=in_Empno
中的可空位置转入rowCount。但我认为应该返回1或0。Row count应该用来知道删除、插入或更新的行数。@codingbiz im using count(*)但在我发布的链接中,他们说v也可以使用行计数,我不明白它是如何用于“选择”的。我的问题出现了。谢谢,如果是“异常”循环,当我执行exec pname(2345,:ret)时,它将返回什么;会有什么回报print@user1如果出现异常,它将引发异常并显示错误消息,否则它将打印
empName
。哪一个是您的前端应用程序?我不知道VC++,但从Java,如果存在任何异常,您可以使用SQL错误代码捕获这些异常,并基于此执行任何操作如果您可以使用out_name进行管理,那么就不需要另一个out参数。
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;