우리는 최근 타사 제품에서 사용하는 OpenEdge 데이터베이스로 일부 작업을 수행해야했으며 오늘 (많은 머리카락을 당긴 후) 결과적으로 뷰가 결과를 반환하지 않는 이유를 확인했습니다. 이 뷰는 약 100 개의 개별 테이블을 결합한 다음 쿼리됩니다 (이 데이터베이스에 대한 권한이 제한되어 있음). 이 뷰에 의해 반환되는 분야 중 하나는이상한 OpenEdge 쿼리 동작
'John Smith' AS TheName
우리는 우리가 RTRIM하려고했던이 문자열을 포함 쿼리를 실행하는 데 어려움이 있었다
의 라인을 따라, 하드 코딩 된 문자열 리터럴 (뷰 많이 반환 후행 공백)를 제거한 다음 다른 필드와 연결하십시오. 그러나이 필드에서 RTrim을 사용하면 오류 메시지 나 null 등을 반환하는 대신 단순히 행이 반환되지 않습니다. 우리는 WHERE 절이나 JOIN에서 사용하려고 시도하지 않았습니다. 이것은 SELECT ... FROM VIEWNAME의 일부였습니다. 뷰를 검토 한 결과 뷰가 문자열의 길이를 9 문자 (정의에 길이가 지정되지 않았 음)로 잘못 판단한 것으로 보였으므로 RTrim이 제대로 작동하지 않았습니다. 이제 왜 이것이 오류 메시지 또는 SELECT의 NULL 값이 될지 이해할 수 있지만 행이 단순히 전혀 반환되지 않습니다.? 이것은 좋은 SQL 동작처럼 보이지 않으며 다른 RDBMS에서는 발생하지 않습니다.
기타 정보 : 우리는 ODBC 및 WinSQL을 통해 쿼리하여 기존 ASP.NET 응용 프로그램에 포함되도록했습니다. 비록 우리가보기를 만들 권리가 있지만 우리는 이것을 통해서만 백엔드에 접근 할 수 있습니다.
업데이트 : 이상한 후속 조치로서 WHERE 절없이이 뷰를 쿼리하면 레코드가 반환되지 않습니다. 이것은 같은 원인 일 수 있습니다.
조금 읽은 후에도이 동작에 이상하지만 아직 그럴듯한 원인이있는 것 같습니다. 슬프게도 나는 그것을 확실하게 테스트 할 방법이 없다. – MartW
너비를 확인하기 위해 진행 명령이나 진행 DBA에 액세스 할 수 없습니까? 진행 데이터베이스는 본질적으로 매우 기괴하며 다른 전통적인 SQL 데이터베이스처럼 작동하지 않습니다. –