2015-09-21 82 views
1

使用基本的SQL,我從另一個數據庫填充表。這使用基本的Delete語句使用DBLink刪除舊數據和Insert語句,並使用FROM子句。我試圖在此轉移到一個包,並想出了這一點:PL/SQL運行簡單的SQL命令

套餐:

CREATE OR REPLACE 
PACKAGE LOADDATA AS 
    procedure POPULATETABLE; 
END LOADDATA; 

PL/SQL(包主體):

CREATE OR REPLACE 
PACKAGE BODY LOADDATA AS 

procedure POPULATETABLE AS  
BEGIN 

DELETE FROM DATATRANSFER; 

INSERT INTO DATATRANSFER 
    SELECT VALUENUM, DATACONTENT, sysdate AS TRANSFER_DATA 
    FROM [email protected]; 

COMMIT; 

NULL; 
END POPULATETABLE; 
END LOADDATA; 

並運行命令,我會運行:

exec LOADDATA.POPULATETABLE(); 

我的問題是該過程應該有一個輸入/輸出參數或聲明的變量?它已編譯並正確工作,但我不確定我是否遵循PL/SQL方法。

+0

你不必有輸入/輸出參數或除非需要聲明的變量。記錄DELETE FROM。我不確定我是否想要,如果它是可以從遠程源重新加載的表。當然,有時候截斷不是沒有特權的選擇。不知道NULL是什麼;聲明是關於。 –

+0

null是作爲模板提供的。我通過SQL Developer創建的,所以它在那裏,我沒有刪除它。它看起來沒有什麼區別,它應該被刪除嗎? – Dev

+0

有時一個NULL;在沒有編寫代碼的情況下需要聲明,但編譯器需要聲明。但在這個例子中NULL;聲明沒有任何用處。我會刪除它。 –

回答

0

沒有規則提供參數。

此外,您還可以將記錄插入日誌表中,以便存儲開始日期,結束日期,插入的記錄數和已刪除的記錄數,以防需要定期跟蹤批處理執行情況。

另外,如果某個網頁或某個應用程序調用了此包,則可能需要創建一個異常塊並在用戶可讀形式中將錯誤消息作爲輸出參數發送。

編輯:

包裝規格

CREATE OR REPLACE 
PACKAGE LOADDATA AS 
    procedure POPULATETABLE(out_variable OUT VARCHAR2); 
END LOADDATA; 

包體

CREATE OR REPLACE 
PACKAGE BODY LOADDATA AS 
procedure POPULATETABLE(out_variable OUT VARCHAR2) AS  
BEGIN 
DELETE FROM DATATRANSFER 
-- <TODO:INSERT records deleted and date into a log table> 
INSERT INTO DATATRANSFER 
    SELECT VALUENUM, DATACONTENT, sysdate AS TRANSFER_DATA 
    FROM [email protected]; 
-- <TODO:INSERT records inserted and date into a log table> 
COMMIT; 
NULL; 
-- Assign out_variable as success if comletes successfully 
out_variable := 'SUCCESS'; 
EXCEPTION 
-- WHEN OTHERS catches all exceptions Oracle error message is displayed in SQLERRM 
    WHEN OTHERS THEN 
-- Assign out_variable with Error message if errors out 
     out_variable := 'Error :'||SQLERRM; 
END POPULATETABLE; 
END LOADDATA; 
+0

如果添加了異常塊,是否需要輸出變量?我讀過有不同類型的異常,那麼如何編寫它來打印出現的所有/任何錯誤? – Dev

+0

我已經用你的示例代碼更新了我的答案。請檢查它是否可以幫助你。 –

+0

是的,它的確如此。要運行這個,這是否仍然有效:exec LOADDATA.POPULATETABLE();或者我需要指定輸出變量,那將如何寫入? – Dev