PL/SQL来运行简单的SQL命令
使用基本SQL,我从另一个DB填充一个表。这将使用基本的Delete语句删除旧数据,并使用DBLink插入带有FROM子句的语句。我正试图将其转移到一个包中,并得出以下结论: 包装:PL/SQL来运行简单的SQL命令,sql,oracle,plsql,Sql,Oracle,Plsql,使用基本SQL,我从另一个DB填充一个表。这将使用基本的Delete语句删除旧数据,并使用DBLink插入带有FROM子句的语句。我正试图将其转移到一个包中,并得出以下结论: 包装: CREATE OR REPLACE PACKAGE LOADDATA AS procedure POPULATETABLE; END LOADDATA; PL/SQL包体: CREATE OR REPLACE PACKAGE BODY LOADDATA AS procedure POPULATET
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方法。没有提供参数的规则 此外,您还可以将记录插入日志表,该表将存储开始日期、结束日期、插入的记录数和删除的记录数,以防您需要定期跟踪批处理执行情况 此外,如果某个网页或某个应用程序调用此包,则可能需要创建一个异常块,并以用户可读的形式将错误消息作为输出参数发送 编辑: 包装规格
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;
没有提供参数的规则 此外,您还可以将记录插入日志表,该表将存储开始日期、结束日期、插入的记录数和删除的记录数,以防您需要定期跟踪批处理执行情况 此外,如果某个网页或某个应用程序调用此包,则可能需要创建一个异常块,并以用户可读的形式将错误消息作为输出参数发送 编辑: 包装规格
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;
除非需要,否则不必有输入/输出参数或声明任何变量。已记录从中删除。我不确定我是否需要它,如果它是一个可以从远程源重新加载的表。当然,有时候,如果没有特权,截断不是一个选择。不确定空值是什么;语句是关于。空值作为模板提供。我通过SQLDeveloper创建了它,所以它就在那里,我没有删除它。它似乎没有什么不同,是否应该删除它?有时为空;如果尚未编写代码,但编译器需要一条语句,则需要一条语句。但在这个例子中,NULL;这句话毫无意义。我会删除它。从数据传输中删除后,您缺少一个分号。您可以考虑运行截断而不是删除。不需要输入/输出参数或声明任何变量,除非需要。已记录从中删除。我不确定我是否需要它,如果它是一个可以从远程源重新加载的表。当然,有时候,如果没有特权,截断不是一个选择。不确定空值是什么;语句是关于。空值作为模板提供。我通过SQLDeveloper创建了它,所以它就在那里,我没有删除它。它似乎没有什么不同,是否应该删除它?有时为空;如果尚未编写代码,但编译器需要一条语句,则需要一条语句。但在这个例子中,NULL;这句话毫无意义。我会删除它。从数据传输中删除后,您缺少一个分号。您可以考虑运行截断而不是删除。如果添加了异常块,那么是否需要输出变量?我读到有不同类型的异常,那么如何编写它来打印所有/任何发生的错误呢?我已经用您的示例代码更新了我的答案。请检查它是否对你有帮助。是的。要运行此命令,此命令是否仍然有效:exec LOADDATA.POPULATETABLE;或者我需要指定输出变量,如何写入?您需要在call语句中传递一个变量:exec LOADDATA.POPULATETABLEvariable\u name;变量_名称将包含输出消息,可用于在父网页/表单中显示。如果添加异常块,是否需要输出变量?我读到有不同类型的异常,那么如何编写它来打印所有/任何发生的错误呢?我已经用您的示例代码更新了我的答案。请检查它是否对你有帮助。是的。要运行此命令,此命令是否仍然有效:exec LOADDATA.POPULATETABLE;或者我需要指定输出变量,如何写入?您需要在call语句中传递一个变量:exec LOADDATA.POPULATETABLEvariable\u name;变量_名称将包含输出消息,可用于在父网页/表单中显示。