用于创建实例化视图的Oracle DDL错误PLS-00103

问题描述 投票:1回答:1

我通过TOAD在Oracle 13.0中的存储过程中具有以下Oracle DDL代码:

--BUILD AND POPULATE MATERIALIZED VIEWS 
BEGIN
 EXECUTE IMMEDIATE 'DROP MATERIALIZED VIEW WORK.Work1_MV';
  EXCEPTION
     WHEN OTHERS
     THEN NULL;
END;

--Create Materialized View (PLS-00103 Error)*
 CREATE MATERIALIZED VIEW WORK.Work1_MV

    NOLOGGING
    BUILD DEFERRED
 AS
    SELECT *
      FROM WORK.WorkA_V
      ;

 BEGIN 
   DBMS_MVIEW.REFRESH ('WORK.Work1_MV', 'C', ATOMIC_REFRESH  => FALSE);
 END;
 COMMIT;

--Create Index on Materialized View (PLS-00103 Error)*

CREATE BITMAP INDEX WORK.Work1_MV_MAP1 ON WORK.Work1_MV
 (ELEMENT_NAME)
 NOLOGGING
 COMPUTE STATISTICS;

--Create 2nd Index on Materialized View (PLS-00103 Error)*

CREATE BITMAP INDEX WORK.Work1_MV_MAP2 ON WORK.Work1 MV
 (MAP_ID)
 NOLOGGING
 COMPUTE STATISTICS;


当上述内容分开运行时,它们似乎起作用。但是,虽然嵌入到存储过程中;它们无法使用与我在上面的代码中注释过的部分有关的PLS-00103错误进行编译。

完整的错误消息如下:

“ [ERROR] PLS-00103(329:5):PLS-00103:在预期以下情况之一时遇到符号“ CREATE”:(如果循环模式为null,则返回goto的结束异常退出,如果没有,则返回select select update)。

如果有人可以共享解决方案以正确地编译这些语句,我将不胜感激。

谢谢。

我通过TOAD在Oracle 13.0中的存储过程中具有以下Oracle DDL代码:-已建立和将材料化视图立即开始执行'DROP MATERIALIZATION VIEW WORK.Work1_MV'; ...

sql oracle stored-procedures ddl
1个回答
0
投票

除非您在代表DDL的字符串变量上使用EXECUTE IMMEDIATE,否则您不能在PL / SQL块中执行DDL。

© www.soinside.com 2019 - 2024. All rights reserved.