PL / SQL运行简单SQL命令

时间:2015-09-21 10:51:07

标签: sql oracle plsql

使用基本SQL,我正在填充另一个数据库中的表。这使用基本Delete语句使用DBLink删除带有Insert子句的旧数据和FROM语句。我正试图将其转移到一个包中并提出这个:

包装:

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  TRANSFERTABLE@DATALINK;

COMMIT;

NULL;
END POPULATETABLE;
END LOADDATA;

要运行命令,我会运行:

exec LOADDATA.POPULATETABLE();

我的问题是程序是否应该有输入/输出参数或声明的变量?它已经编译并正常工作,但我不确定我是否遵循PL / SQL方法。

1 个答案:

答案 0 :(得分: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  TRANSFERTABLE@DATALINK;
-- <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;