가장 확실한 설명은 당신이 문자열로 수학을하려고하는 것입니다 ...
The attempted conversion of a character string to a number failed because the character string was not a valid numeric literal. Only numeric fields or character fields containing numeric data may be used in arithmetic functions or expressions. Only numeric fields may be added to or subtracted from dates.
http://ora-01722.ora-code.com/
업데이트 # 1 :
귀하의 설명이 나를 걱정 :
I am trying to use a subquery that returns a comma delimited string in a IN clause.
y 우리 하위 쿼리는 이 아니야은 쉼표로 구분 된 문자열을 반환해야합니다 (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
과 문자열 '1,2'
을 비교할 수 없기 때문입니다. 별명 GROUP_PATH
을 참조하기 위해, 당신은 당신이 절하여 주문에 참조하기 전에 별명이 정의 된 중첩 된 하위 쿼리를 사용할 필요가해야, 최소한
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
세 테이블 모두에 대해 테이블 정의 (특히 ID 열 유형)를 표시 할 수 있습니까? ': other_id'가 어떻게 정의 되었습니까?숫자 열만 입력하면 varchar에 참여할 수 있습니다. 숫자 만 있거나 숫자 만 일치하면 vPar는 관련성이없는 숫자가 아닌 값으로 넘어갑니다. –
초기 쿼리가 잘못되었음을 알게되었습니다. 나는 그것을 새롭게했다. – Kel
'other'의'person_ids'는 쉼표로 구분 된 목록입니까? 그렇다면 IN 절에서 작동하지 않을 것입니다. 문자열을 컬렉션으로 구문 분석하고 쿼리에서 컬렉션을 사용해야합니다. 그러나 관계형 데이터베이스에 쉼표로 구분 된 키 목록을 저장해서는 안되므로 데이터 모델을 수정하려고합니다. –