2013-03-04 4 views
2

IBM DB2 데이터 서버 드라이버 (ODBC) (v10.1) 및 ibm_db (v10.1)를 사용하여 django (v1.3.1)에서 IDS (v11.50) https://code.google.com/p/ibm-db/). 나는이 db2cli에 동일한 SQL 문을 실행하려고Django, Informix, ibm_db 및 DB2 데이터 서버 드라이버

[IBM][CLI Driver][IDS/UNIX64] A syntax error has occurred. 

하고,이 같은 오류 반환 :

>select distinct "adm_audit"."action" from "adm_audit" 
    select distinct "adm_audit"."action" from "adm_audit" 
    SQLError: rc = 0 (SQL_SUCCESS) 
    SQLGetDiagRec: SQLState  : 42000 
       fNativeError : -201 
       szErrorMsg : [IBM][CLI Driver][IDS/UNIX64] A syntax error has occurred. 
       cbErrorMsg : 58 
select distinct "adm_audit"."action" from "adm_audit"에 드라이버 전송에 장고에서 'adm_audit 구별 adm_audit.action을 선택'하고 오류를 생성 같은 간단한 쿼리 따옴표가 제거되면

, 문이 성공적으로 완료 :

> select distinct adm_audit.action from adm_audit 
    select distinct adm_audit.action from adm_audit 
    FetchAll: Columns: 1 
     action 
     ...results... 
    FetchAll: 13 rows fetched. 

아누 제안? 감사합니다.

문제가 해결되었습니다.

ibm_db_django에서

1) DELIMIDENT 변수

2)의 변화 -> operation.py 약 176 줄 문자열

"name = upper(name)"

"name = lower(name)"

(수입` 문자열 클래스에서 'lower')

+0

당신이'dbaccess' 같은 인포믹스 도구에서 같은 쿼리를 실행할 수 있습니까에 대한 지원 inspectdb합니까? –

+0

같은 결과입니다. '201 : 구별 오류가 발생했습니다 .'''distinct를 선택하십시오. "adm_audit". "action"from "adm_audit"'.Symems, 이것은 ibm_db 문제입니다. – TheROX

+0

기본적으로 Informix는 문자열 주위에'''과'''따옴표를 모두 인식합니다 (물론 양쪽 끝에서 동일해야합니다). 따옴표로 묶은 문자열을 구분 된 식별자로 인식하려면, DELIMIDENT 환경 변수 또는 API의 연결 문자열에 해당하는 설정으로 변경하십시오. 세션이 진행되면 설정을 변경할 수 없습니다. –

답변

1

큰 따옴표 사용을 제어 할 수있는 환경 변수 DELIMIDENT이 있습니다. 구분 된 SQL 식별자 주위에서만 사용하려면 y으로 설정하십시오.

상세 정보 : http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.sqls.doc/sqls1077.htm

나는 ODBC와 JDBC와 함께 테스트가 SELECT * FROM "aaa"에 대해 동일하게 작동합니다 :

  • 세트 DELIMIDENT없이를 기본 DELIMIDENT=n과 : 오류
  • DELIMIDENT=y 세트 : 쿼리가 작동합니다.
+0

대단히 감사합니다. 그러나 이것은 단지 절반의 문제입니다. Informix v11 이전 버전.70xC2는 대소 문자를 구분하지 않는 데이터베이스를 지원하지 않으므로 큰 따옴표로 묶인 테이블 이름 문자열에 대한 오류를 표시합니다. – TheROX

관련 문제