Я пытаюсь взять две разделенные запятой строки и разделить их на две отдельные таблицы, чтобы использовать их позже для сравнения. Ниже приведено как можно ближе к этому вопросу. Обе строки помещаются в одну и ту же таблицу, что, честно говоря, будет работать в случае, в котором я нуждаюсь, но это очень неуклюжее решение.Отдельные таблицы из разделенных запятыми строк
Я попытался изменить имя таблицы с 'TEST' на что-то еще во втором цикле, но у меня всегда была ошибка компиляции. Кто-нибудь знает более элегантное решение?
DECLARE
L_INPUT_LOG VARCHAR2(25) := 'Error,Audit';
L_INPUT_MOD VARCHAR(4000) := 'MODULE1,MODULE2';
L_COUNT BINARY_INTEGER;
LOG_TYPE_ARRAY DBMS_UTILITY.LNAME_ARRAY;
APP_MODULE_ARRAY DBMS_UTILITY.LNAME_ARRAY;
BEGIN
DBMS_UTILITY.COMMA_TO_TABLE(LIST => REGEXP_REPLACE(L_INPUT_LOG, '(^|,)', '\1x'), TABLEN => L_COUNT, TAB => LOG_TYPE_ARRAY);
DBMS_UTILITY.COMMA_TO_TABLE(LIST => REGEXP_REPLACE(L_INPUT_MOD, '(^|,)', '\1x'), TABLEN => L_COUNT, TAB => APP_MODULE_ARRAY);
FOR I IN 1 .. L_COUNT
LOOP
INSERT INTO TEST VALUES
(SUBSTR(LOG_TYPE_ARRAY(I), 2));
COMMIT;
END LOOP;
FOR I IN 1 .. L_COUNT
LOOP
INSERT INTO TEST VALUES
(SUBSTR(APP_MODULE_ARRAY(I), 2));
COMMIT;
END LOOP;
END;
UPDATE: Ниже ошибка, что я получаю, когда я пытаюсь изменить таблицу TEST во втором цикле. В ответ на просьбу от MaxU
Error starting at line : 1 in command -
DECLARE
L_INPUT_LOG VARCHAR2(25) := 'Error,Audit';
L_INPUT_MOD VARCHAR(4000) := 'MODULE1,MODULE2';
L_COUNT BINARY_INTEGER;
LOG_TYPE_ARRAY DBMS_UTILITY.LNAME_ARRAY;
APP_MODULE_ARRAY DBMS_UTILITY.LNAME_ARRAY;
BEGIN
DBMS_UTILITY.COMMA_TO_TABLE(LIST => REGEXP_REPLACE(L_INPUT_LOG, '(^|,)', '\1x'), TABLEN => L_COUNT, TAB => LOG_TYPE_ARRAY);
DBMS_UTILITY.COMMA_TO_TABLE(LIST => REGEXP_REPLACE(L_INPUT_MOD, '(^|,)', '\1x'), TABLEN => L_COUNT, TAB => APP_MODULE_ARRAY);
FOR I IN 1 .. L_COUNT
LOOP
INSERT INTO TEST VALUES
(SUBSTR(LOG_TYPE_ARRAY(I), 2));
COMMIT;
END LOOP;
FOR I IN 1 .. L_COUNT
LOOP
INSERT INTO GRIM VALUES
(SUBSTR(APP_MODULE_ARRAY(I), 2));
COMMIT;
END LOOP;
END;
Error report -
ORA-06550: line 18, column 18:
PL/SQL: ORA-00942: table or view does not exist
ORA-06550: line 18, column 6:
PL/SQL: SQL Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
Если это работает, и вы получаете ошибку, изменяя только имя таблицы, возможно, такая таблица не существует или у вас нет прав на вставку – Aleksej
Права в порядке, я вхожу в систему как администратор для этой конкретной БД (Development). Кажется странным, что единственным именем таблицы, которое я могу использовать, является «TEST» – michaelk46
. Какая ошибка? вы делаете это в SP или функции? – MaxU