如何返回函数中删除的行数(删除所有语句)?

G. *_*iou 2 sql oracle plsql

我目前正在尝试在 pl/sql 中创建一个函数,该函数从 Customer 表中删除所有 Customer 行,然后返回删除的总行数的值。然后一个程序旨在运行此操作,但是目前我在 DOPL 中得到的结果(成功时)是“删除所有已删除的客户行行”,我如何更改它以便程序中的 DOPL 返回删除的行数函数中的值,例如“已删除 5 行”

这是我当前的代码(提前感谢):

CREATE OR REPLACE FUNCTION DELETE_ALL_CUSTOMERS_FROM_DB RETURN NUMBER 
AS vCount NUMBER;
BEGIN
     DELETE FROM Customer;
     RETURN vCount;
EXCEPTION
     WHEN OTHERS THEN
         RAISE_APPLICATION_ERROR(-20000, SQLERRM);
END;
 /

CREATE OR REPLACE PROCEDURE DELETE_ALL_CUSTOMERS_VIASQLDEV AS
BEGIN
    DBMS_OUTPUT.PUT_LINE('--------------------------------------------');
    DBMS_OUTPUT.PUT_LINE('Deleting all Customer rows');
    DBMS_OUTPUT.PUT_LINE(DELETE_ALL_CUSTOMERS_FROM_DB || ' rows deleted');
COMMIT;
EXCEPTION
WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
 /
Run Code Online (Sandbox Code Playgroud)

APC*_*APC 7

您没有v_count用任何内容填充该变量,因此它返回 null。

Oracle 有一个内置函数,SQL%ROWCOUNT它给出了受前面 DML 语句影响的行数。因此,您只需将删除功能更改为:

CREATE OR REPLACE FUNCTION DELETE_ALL_CUSTOMERS_FROM_DB
 RETURN NUMBER 
AS 
BEGIN
     DELETE FROM Customer;
     RETURN sql%rowcount;
EXCEPTION
     WHEN OTHERS THEN
         RAISE_APPLICATION_ERROR(-20000, SQLERRM);
END;
/ 
Run Code Online (Sandbox Code Playgroud)