2015-09-21 114 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