最も明白な説明は、文字列で数学を実行しようとしているということです...
文字列が有効な数値リテラルではないため、文字列を数値に変換しようとして失敗しました。算術関数または式で使用できるのは、数値フィールドまたは数値データを含む文字フィールドのみです。日付に加算または日付から減算できるのは、数値フィールドのみです。
http://ora-01722.ora-code.com/
更新 #1:
あなたの説明は私を心配しています:
IN 句でカンマ区切りの文字列を返すサブクエリを使用しようとしています。
サブクエリは、コンマ区切りの文字列を返すべきではありませんg.group_id
( が文字列であり、コンマ区切りの文字列が必要な場合を除く)。必要な数の行で個々の項目を取得する必要があります (とにかく 1,000 未満)。
更新 #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
numberと string を比較できないためです'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