在oracle中,我想创建一个删除sproc,它根据删除的结果返回一个整数.
这就是我到目前为止所拥有的.
create or replace
PROCEDURE Testing
(
iKey IN VARCHAR2
)
AS
BEGIN
delete from MyTable WHERE
TheKey = iKey;
END Testing;
Run Code Online (Sandbox Code Playgroud)
我已经尝试过放置RETURNS INTEGER,但是sproc不会编译.
Jus*_*ave 16
过程不返回值.函数返回一个值,但你不应该在函数中做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;
Run Code Online (Sandbox Code Playgroud)
当然,从一般代码清晰度的角度来看,我对可能试图返回状态代码的OUT参数表示怀疑.通过假设成功并在发生错误时抛出异常,通常可以更好地服务.
您可以使用存储过程返回结果.
CREATE OR REPLACE PROCEDURE testing (iKey IN VARCHAR2, oRes OUT NUMBER)
AS
BEGIN
DELETE FROM MyTable
WHERE TheKey = iKey;
oRes := SQL%ROWCOUNT;
END;
Run Code Online (Sandbox Code Playgroud)
要调用该过程,请使用以下内容:
DECLARE
pRes NUMBER;
BEGIN
testing ('myspecialkey', pRes);
DBMS_OUTPUT.put_line (pRes);
END;
Run Code Online (Sandbox Code Playgroud)
使用函数和隐式 SQL 游标来确定删除的行数
create or replace
FUNCTION Testing
(
iKey IN VARCHAR2
) RETURN INTEGER
AS
BEGIN
delete from MyTable WHERE
TheKey = iKey;
RETURN SQL%ROWCOUNT;
END Testing;
Run Code Online (Sandbox Code Playgroud)
那应该有效
| 归档时间: |
|
| 查看次数: |
48068 次 |
| 最近记录: |