当前位置:  开发笔记 > 数据库 > 正文

oracle过程返回整数

如何解决《oracle过程返回整数》经验,为你挑选了2个好方法。

在oracle中,我想创建一个删除sproc,它根据删除的结果返回一个整数.

这就是我到目前为止所拥有的.

create or replace
PROCEDURE Testing
( 
iKey IN VARCHAR2
)
 AS 

BEGIN
  delete from MyTable WHERE 
  TheKey = iKey;

END Testing;

我已经尝试过放置RETURNS INTEGER,但是sproc不会编译.



1> Justin Cave..:

过程不返回值.函数返回一个值,但你不应该在函数中做DML(否则你不能在SQL语句中引用函数,你混淆权限授予,因为通常DBA希望能够授予只读用户访问权限所有功能,以便用户一致地进行计算等).

您可以向过程添加OUT参数以返回状态.如果"success"表示更新了一行或多行,则可以使用SQL%ROWCOUNT来获取先前SQL语句修改的行数,并使用它来填充返回参数,即

CREATE OR REPLACE PROCEDURE test_proc (
  p_iKey    IN VARCHAR2,
  p_retVal OUT INTEGER
)
AS
BEGIN
  DELETE FROM myTable
   WHERE theKey = p_iKey;

  IF( SQL%ROWCOUNT >= 1 )
  THEN
    p_retVal := 1;
  ELSE
    p_retVal := 0;
  END IF;
END test_proc;

当然,从一般代码清晰度的角度来看,我对可能试图返回状态代码的OUT参数表示怀疑.通过假设成功并在发生错误时抛出异常,通常可以更好地服务.



2> user34850..:

您可以使用存储过程返回结果.

CREATE OR REPLACE PROCEDURE testing (iKey IN VARCHAR2, oRes OUT NUMBER)
AS
BEGIN
   DELETE FROM MyTable
         WHERE TheKey = iKey;

   oRes := SQL%ROWCOUNT;
END;

要调用该过程,请使用以下内容:

DECLARE
   pRes   NUMBER;
BEGIN
   testing ('myspecialkey', pRes);
   DBMS_OUTPUT.put_line (pRes);
END;

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有