currentSchema(EGL 시스템 변수)
useCurrentSchema 빌드 디스크립터 옵션을 YES로 설정하면 EGL은 생성하는 SQL 코드의 특정 테이블 이름에 sqlLib.currentSchema 시스템 변수를 추가합니다. 이 방식으로 EGL 레코드 특성과 #sql 지시문에서 규정되지 않은 테이블 이름을 사용하고 런타임 시 규정을 제공할 수 있습니다.
- Java™ 환경을 위해 생성 중이거나 EGL 디버거에서 실행 중이어야 합니다. 이 주제의 뒷부분에서 "디버그 시 사용"을 참조하십시오.
- EGL I/O 문은 EGL SQLRecord를 지정해야 합니다. 레코드의 tableNames 또는 tableNameVariables 특성은 규정에 필요한 테이블 이름을 식별합니다.
- EGL은 EGL prepare 문이 작성한 SQL문에 sqlLib.currentSchema 변수를 넣지 않습니다.
EGL은 준비 중인 문자열 표현식에서 테이블 이름을 표시할 위치를 판별할 수 없습니다. 그러나 다음 예제와 같이
사용자가 직접 해당 변수를 포함시킬 수 있습니다.
prepare p from "DELETE FROM " :: sqlLib.currentSchema :: "MYTBL"; - useCurrentSchema 빌드 디스크립터 옵션을 YES로 설정해야 합니다.
EGL은 vgj.jdbc.schema Java 런타임 특성에서 sqlLib.currentSchema의 초기값을 가져옵니다. vgj.jdbc.schema 특성은 sqlSchema 빌드 디스크립터 옵션에서 차례로 값을 가져옵니다(genProperties 빌드 디스크립터 옵션이 PROGRAM 또는 GLOBAL로 설정된 경우).
변수 문자열에 구분 기호 문자를 포함시키십시오. 이 주제의 뒷부분에 있는 예제를 참조하십시오.
디버그에 사용
호스트 시스템은 일반적으로 사용자가 규정되지 않은 테이블 이름을 사용하고 시스템에 따라 다른 방식으로 스키마를 설정하도록 허용합니다. iSystem에서는 라이브러리 목록에서 이름 지정된 테이블을 포함하는 라이브러리(스키마)를 검색하여 테이블을 찾을 수 있습니다. z/OS®에서 스키마는 일반적으로 적절한 스키마 이름이 있는 BIND 문에 QUALIFIER 옵션을 포함시켜서 바인드 시에 결정됩니다. EGL에서 useCurrentSchema 빌드 디스크립터 옵션을 YES로 설정하고 sqlSchema 빌드 디스크립터 옵션을 디버깅에 사용하는 테스트 스키마의 이름으로 설정하여 이를 시뮬레이션할 수 있습니다. 즉, EGL 디버거에서 테스트한 것과 동일한 SQL문에서 COBOL 코드를 생성할 수 있습니다.
두 번째 이점은 개발자가 테스트를 위해 독립적으로 사용하는 스키마(또는 전체 데이터베이스)에 대해 자신의 코드를 테스트하는 것입니다. sqlLib.currentSchema 변수를 사용하여 모든 테스트가 완료될 때까지 실제 데이터에 액세스하지 않을 수 있습니다. 그런 다음 SQL을 변경할 필요 없이 sqlSchema 빌드 디스크립터 옵션의 값을 변경하고 코드를 재생성할 수 있습니다.
예제
다음 예제에서는 환경에 따라 다른 형식의 스키마가 필요합니다.
if(sysVar.systemType is ZOSCICS)
// here the variable is a schema
sqlLib.currentSchema = "TESTSCHEMA.";
else
if(sysVar.systemType is ISERIESJ)
// here it's a user library
sqlLib.currentSchema = "TESTSCHEMA/";
endend