PL/SQL来运行简单的SQL命令

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

使用基本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 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;变量_名称将包含输出消息,可用于在父网页/表单中显示。