2017-09-04 54 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