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

时间:2017-09-04 05:45:34

标签: 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;
 /

1 个答案:

答案 0 :(得分:2)

您没有使用任何内容填充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;
/