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循环,执行...