代码试图这样做的是:

问题描述 投票:0回答:1
步骤1:如果存在则丢弃,否则跳过。我不想看到任何警告错误,指出如果在没有表的情况下运行此过程,则该表不存在。此过程本身确实可以按预期工作。

create or replace PROCEDURE ORDER_STATUS_1_DROP_TABLE IS table_does_not_exist EXCEPTION; PRAGMA EXCEPTION_INIT(table_does_not_exist, -942); BEGIN EXECUTE IMMEDIATE 'DROP TABLE <Table Name>'; EXCEPTION WHEN table_does_not_exist then dbms_output.put_line( 'table dose not exist'); END ORDER_STATUS_1_DROP_TABLE;

过程2:删除表后,此过程将使用正确的来重新创建它。我不想看到“此表已存在”的任何错误,这就是为什么部分存在过程1的原因。它本身按预期工作。

create or replace PROCEDURE ORDER_STATUS_2_CREATE_TABLE IS v_sql LONG; BEGIN v_sql:= 'create table <Table Name> (<parameters>)'; EXECUTE IMMEDIATE v_sql; END ORDER_STATUS_2_CREATE_TABLE;

过程3:这仅使用户可以选择访问在上一个过程中创建的表。此过程按预期工作。

create or replace PROCEDURE GRANT_NEWANALYTICS IS 
  BEGIN
    EXECUTE IMMEDIATE
      'GRANT SELECT ON <Table Name> TO <UserID>';
  END;

步骤4:这是一个复杂的查询。它是一个插入全选项(根据字段和条件等,表左连接到其他一些表)。运行过程1-3之后,该过程本身并没有运行问题,而是本身。

create or replace PROCEDURE ORDER_STATUS_3_SCRIPT IS 

  BEGIN
    DELETE FROM <Table Name>;
    INSERT INTO <Table Name>
    SELECT * FROM(<Multiple Table Joins>);
  END ORDER_STATUS_3_SCRIPT;

当我运行这样的过程时:

  BEGIN
   ORDER_STATUS_1_DROP_TABLE;    -- If the table exist, drop it
   ORDER_STATUS_2_CREATE_TABLE;  -- Create the table
   GRANT_NEWANALYTICS;           -- Grant users select access
   ORDER_STATUS_3_SCRIPT;        -- Run script to insert data into table
  END;

我收到以下错误报告:

Error report -
ORA-04068: existing state of packages has been discarded
ORA-04065: not executed, altered or dropped stored procedure "<user>.ORDER_STATUS_3_SCRIPT"
ORA-06508: PL/SQL: could not find program unit being called: "<user>.ORDER_STATUS_3_SCRIPT"
ORA-06512: at line 5
04068. 00000 -  "existing state of packages%s%s%s has been discarded"
*Cause:    One of errors 4060 - 4067 when attempt to execute a stored procedure.
*Action:   Try again after proper re-initialization of any application's state.

现在,如果我分别运行这些文件,它将起作用。所以,如果我先运行这个:

 BEGIN
  ORDER_STATUS_1_DROP_TABLE;    -- If the table exist, drop it
  ORDER_STATUS_2_CREATE_TABLE;  -- Create the table
  GRANT_NEWANALYTICS;           -- Grant users select access
END;
<OUTPUT> PL/SQL procedure successfully completed.

然后是这个:

BEGIN
ORDER_STATUS_3_SCRIPT;        -- Run script to insert data into table
END;
<OUTPUT> <Query runs>

我没有问题。我想一口气运行这些程序集,并且可以在这种想法上使用一些帮助。谁有想法?

我正在与Oracle SQL Developer合作,我正在尝试使以下代码正常工作,但无法弄清楚。我尝试了多种不同的方法,包括实现for循环,执行...
stored-procedures plsql oracle-sqldeveloper
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.