关于PLSQL

时间:2017-06-09 10:17:57

标签: oracle plsql

下面的plsql有什么问题?我在sql developer中运行此代码。

BEGIN
 FOR x IN (SELECT * FROM dba_tables WHERE owner = 'ABPPMGR_TE2' AND table_name IN
            (select object_name from dba_objects where object_type = 'MATERIALIZED VIEW' and status = 'VALID')
          )
  LOOP
     dbms_stats.gather_table_stats( x.owner, x.table_name); 
  END LOOP;
END;

它给出错误:

  

ORA-06550:第2行第2列:PLS-00103:遇到符号" "   当期待以下之一时:(开始案例声明退出   goto if loop mod null pragma raise返回选择更新时使用   <<继续关闭当前删除获取锁定插入打开回滚   savepoint set sql execute commit forall merge pipe purge符号"   "被忽略了。

3 个答案:

答案 0 :(得分:1)

我已经厌倦了,它对我也很好。我将尝试包含屏幕截图。

最佳。Successful run screenshot

答案 1 :(得分:1)

我认为你的问题是你的代码中有一个“奇怪的”字符, 当你从论坛或网站上复制一些内容时,它很常见。

当我运行你的代码时,我发现一些类似于空格('')但不是空格的角色,并且收到了你得到的相同的错误, 你可以运行ASCII函数来检查它。

SELECT ASCII(' ') FROM dual; -- strange character that returns ascii code 160
SELECT ASCII(' ') FROM dual; -- normal space returns 32

只需删除代码中的所有奇怪字符即可。

答案 2 :(得分:0)

尝试使用以下查询

查看代码中是否存在任何非Ascii字符
select asciistr('BEGIN
 FOR x  IN
 (SELECT *
 FROM dba_tables
 WHERE owner     = ''ABPPMGR_TE2''
 AND table_name IN
   (SELECT object_name
    FROM dba_objects
   WHERE object_type = ''MATERIALIZED VIEW''
   AND status        = ''VALID''
   )
 )
  LOOP
   dbms_stats.gather_table_stats( x.owner, x.table_name);
 END LOOP;
END') from dual;

未找到任何非Ascii字符。代码对我来说似乎是正确的,因为它在我的系统上没有任何问题。