如何在包内执行过程

时间:2016-05-30 10:48:27

标签: sql oracle plsql

我需要手动调用 PROC_ENTRY_TIME 程序,以便将新数据加载到 TABLE_ENTRY_TIME 中。我该怎么做?

CREATE OR REPLACE PACKAGE BODY PK_ENTRY_TIME IS
PROCEDURE PROC_ENTRY_TIME
AS
BEGIN
    execute immediate 'truncate table TABLE_ENTRY_TIME';
    insert into TABLE_ENTRY_TIME 
        SELECT  TABLE_CASE.ID_NUMBER , max( TABLE_ACT_ENTRY.ENTRY_TIME )
        FROM  SA.TABLE_CASE TABLE_CASE 
            INNER JOIN  SA.TABLE_ACT_ENTRY   TABLE_ACT_ENTRY
            ON  TABLE_CASE.OBJID = TABLE_ACT_ENTRY.ACT_ENTRY2CASE
     commit;
END  PROC_ENTRY_TIME;

2 个答案:

答案 0 :(得分:0)

@Sithara,插入后你有一个缺少的分号,我编辑了代码,试了一下。稍后按照@a_horse_with_no_name建议的那样,即

exec pk_entry_time.proc_entry_time

注意:不确定你是如何调试的,但是把它放在任何编辑器中会给你一些关于这个问题的线索。

答案 1 :(得分:0)

  

“它给出了无效的sql语句错误。不起作用!”

好吧,您发布的代码无效,因此无法编译。你有一个缺少的分号,你需要一个GROUP BY子句来表示聚合条件。如果你这样修理它会怎么样?

CREATE OR REPLACE PACKAGE BODY PK_ENTRY_TIME IS

    PROCEDURE PROC_ENTRY_TIME
    AS
    BEGIN
        execute immediate 'truncate table TABLE_ENTRY_TIME';
        insert into TABLE_ENTRY_TIME 
            SELECT  TABLE_CASE.ID_NUMBER , max( TABLE_ACT_ENTRY.ENTRY_TIME )
            FROM  SA.TABLE_CASE TABLE_CASE 
                INNER JOIN  SA.TABLE_ACT_ENTRY   TABLE_ACT_ENTRY
                ON  TABLE_CASE.OBJID = TABLE_ACT_ENTRY.ACT_ENTRY2CASE
                group by table_case.id_number;
         commit;
    END  PROC_ENTRY_TIME;
END  PK_ENTRY_TIME;

至于运行它,取决于您使用的是哪个客户端。以下是如何运行匿名PL / SQL块:

begin
    pk_entry_time.proc_entry_time;
end;
/