Наиболее очевидным объяснением является то, что вы пытаетесь выполнить математику со строкой ...
Попытка преобразования строки символов в число завершилась неудачно, поскольку строка символов не была допустимым числомбуквальный.Только числовые поля или символьные поля, содержащие числовые данные, могут использоваться в арифметических функциях или выражениях.Только числовые поля могут быть добавлены или вычтены из дат.
http://ora -01722.ora-code.com /
Обновление #1:
Ваше описание меня беспокоит:
Я пытаюсь использовать подзапрос, который возвращает строку с разделителями-запятыми в предложении IN.
Ваш подзапрос должен не возвращать строку с разделителями-запятыми (если g.group_id
не является строкой и не ожидает строку с разделителями-запятыми).Вы должны извлекать отдельные элементы в нужном количестве строк (в любом случае, меньше 1000).
Обновление № 2:
Просто чтобы прояснить:
SELECT *
FROM (
SELECT 1 AS FOO_ID FROM DUAL UNION SELECT 2 FROM DUAL UNION SELECT 3 FROM DUAL
) FOO;
FOO_ID
----------------------
1
2
3
Вы можете сделать это:
SELECT *
FROM (
SELECT 1 AS FOO_ID FROM DUAL UNION SELECT 2 FROM DUAL UNION SELECT 3 FROM DUAL
) FOO
WHERE FOO_ID IN (1, 2);
FOO_ID
----------------------
1
2
Но не это:
SELECT *
FROM (
SELECT 1 AS FOO_ID FROM DUAL UNION SELECT 2 FROM DUAL UNION SELECT 3 FROM DUAL
) FOO
WHERE FOO_ID IN ('1,2');
SQL Error: ORA-01722: invalid number
Поскольку вы не можете сравнить число 1
со строкой '1,2'
.Подзапросы следуют аналогичным правилам:
SELECT *
FROM (
SELECT 1 AS FOO_ID FROM DUAL UNION SELECT 2 FROM DUAL UNION SELECT 3 FROM DUAL
) FOO
WHERE FOO_ID IN (
SELECT 1 AS FOO_ID FROM DUAL UNION SELECT 2 FROM DUAL
);
FOO_ID
----------------------
1
2
SELECT *
FROM (
SELECT 1 AS FOO_ID FROM DUAL UNION SELECT 2 FROM DUAL UNION SELECT 3 FROM DUAL
) FOO
WHERE FOO_ID IN (
SELECT '1,2' AS FOO_ID FROM DUAL
);
SQL Error: ORA-01722: invalid number