首页 > 解决方案 > ORA-06550:第 5 行,第 16 列:PLS-00103:在预期以下情况之一时遇到符号“SELECT”:

问题描述

BEGIN 
  dbms_stats.set_table_prefs 
    ( ownname => 'SALES_MART', 
      tabname =>  SELECT DISTINCT (table_name) 
                  FROM all_part_tables 
                  WHERE OWNER = 'SALES_MART', 
      pname   => 'INCREMENTAL', 
      pvalue  =>'TRUE' 
    ); 
END;

ORA-06550:第 5 行,第 16 列:PLS-00103:在预期以下情况之一时遇到符号“SELECT”:

( - + case mod new not null continue avg count current exists max min prior sql stddev sum variance execute forall merge time timestamp interval date pipe

& - + ; / at for mod 余数 rem 和 or 组有相交减号 order start union where connect || 多集

标签: oracleplsql

解决方案


DBMS_STATS.SET_TABLE_PREFS过程接受表名作为参数。您不能通过 select 语句。

我假设您要对所有者所在的所有表执行此过程SALES_MART,因此在这种情况下,您可以使用游标并在循环中调用此过程:

BEGIN

  FOR part_tables_rec in (
    SELECT DISTINCT table_name
    FROM all_part_tables
    WHERE OWNER = 'SALES_MART'
  ) LOOP

    dbms_stats.set_table_prefs ( 
      ownname =>'SALES_MART', 
      tabname => part_tables_rec.table_name,
      pname   => 'INCREMENTAL',
      pvalue  => 'TRUE' );
  END LOOP;
END;

推荐阅读