• 카테고리

    질문 & 답변
  • 세부 분야

    보안

  • 해결 여부

    해결됨

연결 연산자를 지워버리는 경우에 대한 질문이 있습니다.

20.11.30 18:42 작성 조회수 131

1

te'||(case when 1=1 then 'e' else 'a' end)||'st 라는 파라미터로 테스트를 해본다고 하셧는데,  이건 ORACLE 에서만 가능한건가요? 

연결연산자만 다른 같은 구문을 MYSQL에서 
select 'te' (case when 1=1 then 'e' else 'a' end) 'st' 
이런식으로 쿼리를 보내봤더니 에러가 뜨더라구요. 왜 오라클에서는 되고 mysql에서는 안되는지 궁급합니다.

답변 1

답변을 작성해보세요.

3

안녕하세요.

MySQL의 경우는 연결 연산자가 따로 존재하지 않습니다.

연결 연산자 설명 시 공백을 예시로 했지만 사실 공백은 연결 연산자가 아닙니다.

구문을 구분하는 구분자 같은 역할을 하는 문자죠.

그런데 만약 select 'te' 'st' 이렇게 문장이 사용될 경우,

즉, 문자열과 문자열 사이에 공백이 존재할 경우 mysql은 이를 붙여주는 역할을 할 뿐 연산자는 아니란 것입니다.

그래서

select 'te' (case when 1=1 then 'e' else 'a' end) 'st' 

위의 쿼리의 경우는 

단순 [문자] [공백] [문자] 가 아니고 (case when~~) 구문이 들어갔기 때문에 공백의 본래 기능을 하게 됩니다.

정리하면,

mysql은 단순히 문자열 사이에 공백, 탭, 개행 등 의미없는 문자가 사용될 경우 연결 연산자 같은 기능은 하지만

다른게 올 경우 그런 기능을 하지 않는다 입니다.

때문에 mysql의 경우는 concat 함수 밖에 사용을 하지 못합니다.