在oracle中,我想创建一个删除sproc,它根据删除的结果返回一个整数.
这就是我到目前为止所拥有的.
create or replace PROCEDURE Testing ( iKey IN VARCHAR2 ) AS BEGIN delete from MyTable WHERE TheKey = iKey; END Testing;
我已经尝试过放置RETURNS INTEGER,但是sproc不会编译.
过程不返回值.函数返回一个值,但你不应该在函数中做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参数表示怀疑.通过假设成功并在发生错误时抛出异常,通常可以更好地服务.
您可以使用存储过程返回结果.
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;