oracle 用于打印所有实体化视图的PL SQL过程出错

h5qlskok  于 2023-03-17  发布在  Oracle
关注(0)|答案(1)|浏览(111)

我想创建一个简单的过程,列出系统中的所有物化视图,并以表格格式打印这些视图的状态。
当我执行下面的程序时,它给我错误:
PLS-00103:在预期以下内容之一时遇到符号“CREATE”:(开始大小写声明结束异常退出用于后藤if循环mod空杂注引发返回选择更新同时使用〈〈继续关闭当前删除获取锁插入打开回滚保存点设置sql执行提交用于所有合并管道清除
代码:
创建或替换过程mview_status(
状态输出VARCHAR 2,
视图名称输出VARCHAR 2

开始

-- Create a temporary table to hold the results          

CREATE TABLE mview_bkp

(

    view_name VARCHAR(255),

    status VARCHAR(30)

);     -- Insert data into the temporary table by querying the all_mviews view

INSERT INTO mview_bkp

SELECT

    mview_name,

    compile_state

FROM sys.all_mviews;     -- Print the results in a table format

SELECT

    view_name,

    IF compile_state = 'VALID' THEN status := 'Valid';

    ELSE status := 'Invalid';

    END IF;

FROM mview_bkp;     -- Drop the temporary table

DROP TABLE mview_bkp; END;

关于如何解决上述错误有任何帮助吗?TIA

c3frrgcw

c3frrgcw1#

这至少是一种有效的语法,但输出可能并不美观(我假设名称不超过30个字符的MV--如果启用了扩展标识符,这可能不是一个有效的假设)如果您希望通过SQL*Plus或其他IDE交互式地运行,假设您启用了dbms_output,这可能就足够了,但是如果您试图将信息返回给客户端应用程序,则不适合。

BEGIN
  FOR mv IN (SELECT mview_name,
                    compile_state
               FROM sys.all_mviews)
  LOOP
    dbms_output.put_line( rpad(mv.mview_name,30,' ') || ' ' || 
                          (case mv.compile_state
                                when 'VALID' then 'Valid'
                                else 'Invalid' 
                            end) );
  END LOOP;
END;

相关问题