При получении ошибки в правой круглой скобке отсутствует ошибка при выполнении блока PL / SQL - PullRequest
0 голосов
/ 02 января 2019

При записи блока PL / SQL я получаю сообщение об ошибке, показанное ниже. Пожалуйста, дайте мне знать причину этой ошибки?

DECLARE
    TYPE TABLE_NAME IS VARRAY(17) OF VARCHAR(255);
    TABLENAME TABLE_NAME;
    TOTAL INTEGER;
BEGIN
  TABLENAME := TABLE_NAME ('FA_AS_ASSIGNMENTS','FA_PE_PHONES' );
  TOTAL     := TABLENAME.COUNT;
  FOR i IN 1 .. TOTAL
  LOOP
    INSERT
    INTO CUSTOM_ODILOAD_TABLE_COUNT
      (
        TABLE_NAME,
        ROW_COUNT
      )
      VALUES
      (
        TABLENAME(i),
        (SELECT COUNT(*) FROM TABLENAME(i)
        )
      );

  END LOOP;
END;

Ошибка:

ORA-06550: строка 19, столбец 40: PL / SQL: ORA-00907: отсутствует правая скобка
ORA-06550: строка 10, столбец 5: PL / SQL: инструкция SQL игнорируется 06550. 00000 -
"строка% s, столбец% s: \ n% s"
* Причина: обычно ошибка компиляции PL / SQL.
* Действие: анонимный блок завершен

1 Ответ

0 голосов
/ 02 января 2019

У вас не может быть динамического имени таблицы для статического запроса (то есть имя таблицы не может быть параметризовано):

DECLARE
TYPE TABLE_NAME IS VARRAY(17) OF VARCHAR(255);
TABLENAME TABLE_NAME;
TOTAL INTEGER;
cnt INTEGER;
BEGIN
  TABLENAME := TABLE_NAME ('FA_AS_ASSIGNMENTS','FA_PE_PHONES' );
  TOTAL     := TABLENAME.COUNT;
  FOR i IN 1 .. TOTAL
  LOOP
     EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || TABLENAME(i) INTO cnt;

    INSERT INTO CUSTOM_ODILOAD_TABLE_COUNT (TABLE_NAME, ROW_COUNT)
      VALUES ( TABLENAME(i), cnt);
  END LOOP;
END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...