2012-06-06 1 views
0

IMS 세그먼트에 연결하고 where 절 및 select * 쿼리의 기본 키로 SQL 쿼리를 수행 할 수 있습니다. 그러나 다른 열을 사용하여 select를 수행 할 때마다 어휘 오류가 발생합니다. 후 (45), "-": 1 행에서 어휘 오류가 발생 열 (42) :jdbc를 통해 메인 프레임에 액세스하는 중 어휘 에러를 극복하는 방법은 무엇입니까?

Select * from table where column-name='something' 

이 스레드 나에게 "주요"com.ibm.ims.jdbc.TokenMgrError을 제외하고 '예외를 줄 것이다 : "" ''. 첫 번째 이름으로 열 이름이 있으면 첫 번째 이름에 하이픈 위치에 어휘 오류가 발생합니다. Prepared Statement를 통해이 작업을 시도했지만 여전히 작동하지 않습니다.

다음 변경을 수행 한 후에도 예외가 발생합니다. 테이블에서 'column-name'= 'something'을 선택 * 원인 : com.ibm.ims.jdbc.ParseException : 행 1, 열 36에서 "\ '열 이름 \" ""이 발생했습니다. . 하나 기다리고 있었다 : 테이블에서 ... "("..

선택 * 어디 열 + '-'+ 이름 = '뭔가'와 어휘 오류의 예외 '-'

잘못된 이스케이프 시퀀스 (유효 문자는 \ b \ t \ n \ f \ r \ "\ '\)입니다. 이것은 백틱이나 일부 이스케이프 시퀀스를 추가하려고 할 때 표시되는 메시지입니다.

+0

열 이름을 큰 따옴표로 묶으십시오. – Santosh

답변

5

대부분의 SQL 언어에서 - 문자는 (구분되지 않은) 식별자에서 유효한 문자가 아닙니다. 예를 들어, SQL-92 spec는 말한다 :

 <identifier> ::= 
      [ <introducer><character set specification> ] <actual identifier> 

    <actual identifier> ::= 
      <regular identifier> 
      | <delimited identifier> 

    <SQL language identifier> ::= 
      <SQL language identifier start> 
      [ { <underscore> | <SQL language identifier part> }... ] 

    <SQL language identifier start> ::= <simple Latin letter> 

    <SQL language identifier part> ::= 
      <simple Latin letter> 
      | <digit> 

- SQL 언어의 동물 우화집이 편차에 유행 때문에 (TL DR 문자, 숫자 및 밑줄이)

(내가 모든 방언을 말하는 것을 주저 다양한 표준.)


Does this apply to %,_ too, I can see some solutions which are allowing escape sequence with %,_. The solutions mentioned still don't work for hyphen. Reference: myitforum.com/cs2/blogs/jnelson/archive/2008/08/27/121684.aspx

먼저 발견 된 참조는 문자열 리터럴,하지에 identifie에서 탈출 적용 이름. 이 문제에는 적용되지 않습니다. (그리고 당신의 SQL dialect에 적용됩니까?)

둘째, 위의 구문에 따라, 사용중인 SQL 언어가 표준을 따르고 있다면 식별자에 밑줄이 있어야합니다.

셋째, 표준은 "구분 식별자"(큰 따옴표 문자를 구분 기호로 사용)에 대해 말합니다. 이것이 실제 SQL 언어에서 얼마나 광범위하게 지원되는지는 모르겠지만 사용할 수있는 문자와 기타주의 사항에 대한 제한이 있다고하더라도 상상할 수 있습니다.

넷째, SQL 표준이 무엇인지에 관계없이 사용중인 특정 언어에 대한 문서화 된 구문이 무엇인지 살펴야합니다. (나는 단지 일반 SQL 속성을 설명하기 위해 사용했습니다 ... 실제로 사용하고있는 방언에 대한 세부 정보가 없으면 "메인 프레임"SQL은 많은 것들이 될 수 있습니다.)

마지막으로 식별자에 "펑키 문자"를 사용하지 않는 것이 좋습니다. 라틴 문자, 숫자 및 밑줄을 사용하십시오 ... SQL 방언이 허용하지 않는 경우에도 허용되는 부분을 고수하십시오.

그리고 공급 업체의 SQL 설명서를 읽으십시오!

@Rob I've tried both and it did not work.

잘 공급 업체의 SQL 설명서를 잘 읽으십시오. 무엇이 효과가있을 지 알려줄 것입니다. 그리고 당신이 할 수 없다고 말하면 ... 음, 당신은 할 수 없습니다.

+0

을 사용합니다. 이것은 %, _에도 적용됩니까? %, _를 사용하여 이스케이프 시퀀스를 허용하는 몇 가지 솔루션을 볼 수 있습니다. http://myitforum.com/cs2/blogs/jnelson/archive/2008/08/27/121684.aspx – gizgok

2

하이픈으로 참조하는 것이 데이터베이스에 의해 마이너스 기호로 해석되는 것으로 의심됩니다.

빼기 기호를 제거하거나 빼기 부호로 해석되지 않도록 인용하십시오.

+0

내가 그것을 제거 할 수 없다, 당신이 나를 보여줄 수있는 방법, 그것을 인용, 내 점유율을 시도했지만 올바르게하고 있지 않을 수도 있습니다 – gizgok

+0

@ gizgok 열에 따옴표를 추가하십시오 :'select * from table where 'column- name '='something'' 또는 'column-name'= 'something'' 테이블에서 Select *를 선택하십시오. –

+0

@Rob 두 가지 모두 시도했지만 작동하지 않았습니다. – gizgok