不知道为什么不支持这种,使用以下方式解决:


SET SERVEROUTPUT ON
DECLARE
  v_sql VARCHAR2(1000);
  v_err_msg VARCHAR2(2000);
BEGIN
  FOR table_rec IN (SELECT table_name FROM all_tables WHERE owner = 'INTERFACE') LOOP
    BEGIN
      v_sql := 'GRANT SELECT ON INTERFACE."' || table_rec.table_name || '" TO c##wolf';
      EXECUTE IMMEDIATE v_sql;
      DBMS_OUTPUT.PUT_LINE('已成功授权表: ' || table_rec.table_name);
    EXCEPTION
      WHEN OTHERS THEN
        v_err_msg := SQLERRM;
        DBMS_OUTPUT.PUT_LINE('授权失败 - 表: ' || table_rec.table_name || ', 错误: ' || v_err_msg);
    END;
  END LOOP;
END;
/

可能的原因还是表名有小写。