2014-12-22 2 views
1

하나의 레코드에 대해 'ORA-01722 : invalid number'를 반환하는 프로 시저에 쿼리가 있습니다. 필드가 실제로 텍스트이고 한 레코드에 누군가가 '-.11'대신 '.-11'을 입력 했으므로 다른 번호에 추가하려고합니다.Oracle에서 잘못된 번호 처리

잘못된 번호를 알고있는 경우 쿼리를 어떻게 처리합니까? 필드를 NULL 또는 '오류'또는 뭔가를 필드에 표시하고 싶습니다. 오히려이를 건너 뛰거나 (나쁜) 쿼리를 실행하지 못하게하는 것입니다 (악화). 나는 다음과 같은

Tbl_ID Tbl_InValue Tbl_OutValue 
1   .5    3.2 
2   1.1   .-11 
3   -3    .5 

같은 테이블 값이 있다면 내가

같은 출력 뭔가를하고 싶은

SELECT Tbl_ID 
    , Tbl_InValue 
    , Tbl_OutValue 
    , (Tbl_InValue + Tbl_OutValue)/2 Tbl_Avg 
From MyTable 

:

쿼리는 텍스트로 정의 된 모든 필드를 다음과 같이 될 수있다

Tbl_ID Tbl_InValue Tbl_OutValue Tbl_Avg 
1   .5    3.2   1.85 
2   1.1   .-11   ERROR 
3   -3    .5    -1.25 

답변

1

계산을 수행하고 av를 반환하는 함수를 작성할 수 있습니다. archar2 결과 :

create function get_average(in_value in varchar2, out_value in varchar2) return varchar2 is 
begin 
    return to_char((to_number(in_value) + to_number(out_value))/2); 
exception 
    when others then 
    return 'ERROR'; 
end; 
다음

선택 A의 사용 :

select get_average(Tbl_InValue, Tbl_OutValue) from MyTable; 
+1

는 또한 기능에 대한 plsql_optimize_level = 3 문제에 대한 asktom에서이 스레드를주의 : https://asktom.oracle.com/pls/ apex/fp = 100 : 11 : 0 :::: P11_QUESTION_ID : 7466996200346537833 –