Oracle 关于PLSQL

Oracle 关于PLSQL,oracle,plsql,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') )   

下面的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:遇到符号“” 应满足以下条件之一时:(begin case declare exit for) 转到如果循环mod null pragma raise返回选择update while with with
我已经厌倦了它,它对我来说也很好。我会尝试包括截图


最好的。

我已经厌倦了它,它对我来说也很好。我将尝试包括截图


最好。

我认为您的问题在于代码中有一个“奇怪”字符, 当你从论坛或网站上复制一些东西时,这是很常见的

当我运行你的代码时,我发现一些字符类似于空格(“”),但不是空格,收到的错误与你得到的相同, 您可以运行ASCII函数来检查它

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

只要从代码中删除所有奇怪的字符,它可能会工作。

我认为您的问题在于代码中有一个“奇怪”字符, 当你从论坛或网站上复制一些东西时,这是很常见的

当我运行你的代码时,我发现一些字符类似于空格(“”),但不是空格,收到的错误与你得到的相同, 您可以运行ASCII函数来检查它

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

只需从代码中删除所有奇怪的字符,它可能会工作。

只需使用下面的查询查看代码中是否有任何非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字符。代码在我看来是正确的,因为它在我的系统上执行时没有任何问题。

只是尝试使用下面的查询查看代码中是否有任何非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字符。代码在我看来是正确的,因为它在我的系统上执行时没有任何问题。

“问题出在哪里?”我们不知道…问题出在哪里?它是否给出了错误?它是否做了意外的事?…它在sql developer中给出了以下错误:ORA-06550:第2行,第2列:PLS-00103:遇到了符号“”当预期出现以下情况之一时:(begin case declare exit for goto if loop mod null pragma raise return select update,但可能带有一些不可见的字符。您是否从Word或其他非纯文本编辑器中复制并粘贴了该代码?在SQL Developer中,的
x
之间可能会有一点红色蠕动,表示这很奇怪;实际上在那一行的开头有,在那一块中还有五个。用普通空格替换这些空格,或者只是复制和粘贴这个问题的代码(如上所示,不是编辑模式下的原始标记文本),就可以解决问题。“问题出在哪里?”我们不知道…问题出在哪里?它是否给出了错误?它是否做了意外的事情?…它在sql developer中给出了以下错误:ORA-06550:第2行,第2列:PLS-00103:在预期以下情况之一时遇到了符号“”:(begin case declare exit for goto if loop mod null pragma raise return select update,但可能带有一些不可见的字符。您是否从Word或其他非纯文本编辑器中复制并粘贴了该代码?在SQL Developer中,
x
之间可能会有一点红色蠕动,表示这很奇怪;实际上在那一行的开头有,在那一块中还有五个。用普通空格替换这些空格,或者只是复制和粘贴这个问题的代码(如上所示,不是编辑模式下的原始标记文本),就可以解决这个问题。