2015-02-06 1 views
0

내부에 항목 목록이있는 테이블이 있는데 이미 시스템 날짜가 만료 된 날짜를 업데이트하려고합니다. 하지만 점점 오류 :SQL 오류 : ORA-01722 : 번호가 잘못되었습니다 (sysdate를 업데이트 할 때)

Error starting at line : 1 in command - 
update AMU_POHEAD_T SET TGL_TIBA=trunc(sysdate) 
WHERE KD_STORE='1400' AND FAKTUR=:Factor and no_lpb is null 
Error report - 
SQL Error: ORA-01722: invalid number 
01722. 00000 - "invalid number" 
*Cause:  
*Action: 

이 내 스크립트입니다

update AMU_POHEAD_T SET TGL_TIBA=trunc(sysdate) 
WHERE KD_STORE='1400' AND FAKTUR=:Factor and no_lpb is null; 

TGL_TIBA은 날짜 컬럼입니다. SQL Developer를 사용합니다. 나는 이미 인터넷 검색을 시도했지만 다른 답변을 제공합니다.

+0

당신이뿐만 아니라 쿼리에서 다른 컬럼의 데이터 유형을 추가 할 수 있습니까? –

+0

KD_STORE는 VARCHAR2 (4 BYTE)이고 FAKTUR은 VARCHAR2 (15 BYTE)이며 no_lpb는 VARCHAR2 (10 BYTE)입니다 ... 여기에 감사합니다 :) –

+0

그리고 입력 요소는 무엇입니까? –

답변

1

factor 바인드 변수가 숫자로 선언되고 숫자가 아닌 문자가있는 faktur 열에 값이있는 경우 유일한 방법은 내가 설명한 테이블 구조에서이 오류가 발생하는 것입니다. 그것은 문자열의 :

create table AMU_POHEAD_T (
    KD_STORE VARCHAR2(4 BYTE), 
    FAKTUR VARCHAR2(15 BYTE), 
    NO_LPB VARCHAR2(10 BYTE), 
    TGL_TIBA DATE 
); 

insert into AMU_POHEAD_T values ('1400', '000000000039746', null, sysdate - 30); 
insert into AMU_POHEAD_T values ('1400', 'A00000000039746', null, sysdate - 30); 

variable factor number; 

exec :factor := '000000000039746'; 

update AMU_POHEAD_T SET TGL_TIBA=trunc(sysdate) 
WHERE KD_STORE='1400' AND FAKTUR=:Factor and no_lpb is null; 

SQL Error: ORA-01722: invalid number 

factor 경우, 열 값은 암시 적으로 비교를 숫자로 변환 될 수 있으며, 던지기와 숫자가 아닌 값을 변환하려고하는 오류 - 예를 들어, 여기서 암시적인 to_number('A00000000039746')입니다. factor 만약

문자열은 그 변환이 발생하지 않습니다이다 :

var factor varchar2(15 byte); 

exec :factor := '000000000039746'; 

update AMU_POHEAD_T SET TGL_TIBA=trunc(sysdate) 
WHERE KD_STORE='1400' AND FAKTUR=:Factor and no_lpb is null; 

1 rows updated. 
+0

@ Alex Poole, 설명해 주셔서 감사 드리며 이해합니다. 내 열 (FAKTUR 열)에 숫자가 아닌 문자가 있기 때문에 오류의 원인이 무엇입니까? I는 내부 FAKTUR 열에서 본 "000000000039,746 1438-R-G14-0016 1438-R-G14-0015 1438-R-G14-0014 000000000000082 000000000000083 '과 같은 데이터를 가지고 있기 때문이다. 내가 이런 종류의 데이터를 내부에 가지고 있어도 실행 가능하게 만드는 방법은? 올바른 스크립트는 무엇입니까? 그런 다음이 스크립트로 ** TOAD **를 사용할 때 문제가없는 ** SQL Developer **와는 달리 잘 작동하는지 묻고 싶습니다. Pls help .. 고마워요 –

+0

** 새로운 테이블 ** test1 **을 ** amu_pohead_t ** 및 datatype과 동일한 값으로 만들고 지침을 따르지 만 여전히 bind를 사용하여 동일한 오류 결과를 따르십시오. –

+0

@raymundsumaylo - SQL Developer의 answeris에있는 나의 예는 'variable'을 사용하여 바인드 값을 지정하고 스크립트로 실행합니다. 당신은 성명서로 달리고 그 값을 물어 보는 중입니까? 그렇다면 어떤 버전을 사용하고 있습니까? 값에서 변수 유형을 추측하는 것처럼 들립니다. –

관련 문제