2015-01-16 1 views
2

을 반환하지 않습니다DB2의 SYSCOLUMNS는 모든 열

SELECT * 을 SYSCOLUMNS

에서 나는 다시 단지 몇 백 행을 얻을. 이것은 AS400의 DB2 7.1입니다. 총 수천 개의 테이블이있는 수십 개의 스키마가 있습니다. 이 쿼리는 몇백 줄이 아니라 수천 줄을 반환 할 것으로 기대합니다. 내가 돌아 오는 행은 테스트 스키마와 다른 개발자의 행에 불과합니다.

필자는 DB2 (Oracle에서 20 년 이상)를 처음 사용 했으므로 당황했습니다. IBM 의사는 SYSCOLUMNS의 PUBLIC에 SELECT가 부여되어 있으므로 모든 것을 가져야한다고 말합니다. "SYSCOLUMNS"토큰, 뷰 또는 로컬 테이블 (사물을 설명하는)이 무엇을 가리키고 있는지 알 수 없습니다. 필자의 환경에서는 데이터베이스에 대한 모든 쿼리에 SCHEMA_NAME.TABLE_NAME이 필요하므로 SYSCOLUMNS (스키마 이름 없음)는 이미 예외입니다. 사전에

덕분에,

+0

하는 SELECT 시도를 * SYSIBM.SYSCOLUMNS –

+0

@Gilbert FROM : 행이 반환되지 내 시스템에. 틀림없이 V5R4 상자를 채광하십시오 ... – dmc

+0

SYSIBM은 OS/370 DB2의 스키마입니다. –

답변

6

대답은 당신이 사용중인 명명 모드에 따라 달라집니다

dB.

  • * SQL 모드 : 당신은 SCHEMA.TABLE
  • * SYS 모드로 테이블을 자격 : 당신은 장면 뒤에, 라이브러리에 스키마지도와 테이블에 맵에 (SCHEMA/TABLE

로 테이블을 자격 파일)

* SQL 모드에서 스키마를 지정하지 않으면 CURRENT SCHEMA 값이 사용됩니다. 기본적으로 당신의 CURRENT SCHEMA 사용자 프로필,하지만 당신과 같이 변경할 수 있습니다 :

SET CURRENT SCHEMA = SOMELIB 

*의 SYS 모드에서는 스키마를 지정하지 않은 경우, 라이브러리 목록은에 테이블 이름을 확인하는 데 사용됩니다 특정 파일.

어쨌든, 나는 당신이 * SQL 명명 모드에 있고 당신의 현재 스키마가 테스트 스키마로 설정되어 있다고 추측 할 것이다. 규정되지 않은 SYSCOLUMNS를 조회하면 현재 스키마에있는 컬럼이 제공됩니다.

나는 시스템의 모든 컬럼에 범위를 확대해야 다음, 시도 할 것이다 :

SELECT * FROM QSYS2.SYSCOLUMNS 
+0

사실 SQL CREATE SCHEMA로 생성 된 스키마에는 전체 카탈로그 뷰 집합이 있습니다. 시스템 + 탈 로그가 필요하면 QSYS2 (또는 SYSIBM 종속) – Charles

+0

으로 + 탈 로그를 명시 적으로 규정해야합니다 @Charles : 무엇에 따라? 언제 QSYS2를 사용해야하며 언제 SYSIBM을 사용해야합니까? –

+0

@dmc 빙고. 귀하의 설명에 따라, 나는 * SQL 모드입니다. SELECT * FROM QSYS2.SYSCOLUMNS는 170k 행을 반환합니다. (SYSIBM.SYSCOLUMNS에서 선택하면 SYSIBM에서 SYSCOLUMNS를 찾을 수 없다는 오류가 발생합니다. 문제가 없습니다.) 감사합니다. –