2017-09-04 77 views
0

我目前正在尝试在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

你不是在写MySQL代码,所以请不要使用'[mysql]'标签。 – APC

+0

道歉:(下次不会添加这个,有没有办法从这个帖子中删除标签? –

+1

您可以编辑自己的问题 – APC

回答

1

你不填充任何东西的v_count变量,这样它会返回一个空。

有一个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; 
/
+0

非常感谢你:)只是为了学习的缘故,你是否也可以使用变量来做到这一点? –

+1

当然,您可以将'sql%rowcount'分配给一个变量 – APC