2013-08-22 2 views
-2

다음 쿼리를 삽입하려고하는데 구문 오류가 발생합니다. 당신은 아래의 쿼리 좀 도와 주실 래요 :DECODE SQL의 함수

INSERT INTO ABCTABLE (COLUMN1) values ('DECODE(MDSE_CD,NULL,'0000000000000000',LPAD(TO_NUMBER(MDSE_CD,'16',' '))'); 
+0

나는 우리가 그 성명서로 무엇을 성취하려고하는지 정말로 알 필요가 있다고 생각한다. 구문 오류를 수정할 수 있습니다. 그러나 새로운 행 삽입, 테이블의 기존 행 업데이트, COLUMN1에 리터럴 문자열 할당? – spencer7593

답변

1

제대로 내부 따옴표

INSERT INTO ABCTABLE (COLUMN1) 
VALUES ('**DECODE**(MDSE_CD,NULL,''0000000000000000'',**LPAD**(TO_NUMBER(MDSE_CD,''16'','' ''))'); 
+0

고마워,하지만 그것은 NULL 때 나는 000000000000와 함께 열을 채우기 위해 ''0 ''OR " '0000000000000000' '줄 필요합니까 – user2616054

2

당신은 정말 말했다하지 않았으므로, 나는 어둠 속에서 자상을해야 "이 쿼리가 작동을 수정하지 않습니다"이외의 다른 무엇을 필요. 당신이 가지고있는 질의에서, 나는 열의 값을 원하는 것으로 추측하고 있습니다. DECODE(MDSE_CD,NULL,'0000000000000000',LPAD(TO_NUMBER(MDSE_CD,'16',' '))

이 경우, 문자열 리터럴 내에서 작은 따옴표를 이스케이프해야합니다. 따옴표를 두 배로하여이 작업을 수행 :

INSERT INTO ABCTABLE (COLUMN1) 
VALUES ('DECODE(MDSE_CD,NULL,''0000000000000000'',LPAD(TO_NUMBER(MDSE_CD,''16'','' ''))') 
1

문제를 탈출 시도하는 인용 부호의 사용이다. 쿼리를 해독하려고하면 다음과 같이 표시됩니다.

INSERT INTO ABCTABLE 
    (COLUMN1) 
values 
    (
    'DECODE(MDSE_CD,NULL,' 
    0000000000000000 
    ',LPAD(TO_NUMBER(MDSE_CD,' 
    16 
    ',' 
    '))' 
); 

... 분명히 의미가 없습니다.

문자열 내에서 따옴표를 이스케이프 처리하는 방법에 대해 생각해보십시오.

1
서버

는 SQL : SQL Server의 DECOD 기능 CASE로 대체 할 수

에서 SQL 서버에

LPAD 기능을 구성은 직접 대응을하지 않은하지만 당신은 복제 (패드 기능은 교체 관리 문자열을 사용하여 문자열을 수 문자 지정된 횟수의 숫자)

내 SQL은 : MySQL의에서 DECOD 기능 CASE로 대체 할 수

는 구성

MySql의 LPAD 함수가 존재 함

0

문자열 리터럴 'DECODE(MDSE...))'을 저장 하시겠습니까? 값을 파생시키려는 함수를 호출하겠습니까?

작은 따옴표가 포함 된 문자열 리터럴을 저장하려면 추가 작은 따옴표로 문자열 내 각 작은 따옴표를 "이스케이프"해야합니다.

O'Hare Int'l ==> 'O''Hare Int''l' 

DECODE 기능은 오라클 고유의 것입니다. 이 표현식은 MySQL과 SQL Server에서 서로 다른 함수를 사용하여 다시 작성해야합니다.