使用基本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方法。
答案 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;