전문가: 길고 짧은 개체 이름 검색
2023년 8월 14일 밥 코지
여러 릴리스 전에 IBM i는 파일 및 라이브러리에 대해 "긴 SQL 이름"을 받았습니다. 이러한 새로운 긴 이름(최대 128자)은 SQL 매니아들에게 호평을 받았지만 주류 IBM i 개발자들은 대부분 무시했습니다. IBM i의 각 버전이 등장하면서 이름이 10자보다 긴 하나 이상의 객체를 경험하는 상점이 점점 더 많아졌습니다.
최근에 BOAT_TRAFFIC이라는 파일을 만들었습니다. 이 이름은 확실히 10자를 초과합니다. 파일을 생성하기 위해 SQL DDL(CREATE 또는 REPLACE TABLE 문)을 사용했습니다. SQL DDL을 사용하는 것은 긴 이름을 가진 객체를 생성하는 유일한 실제 방법입니다. IBM i 시스템 명령 인터페이스(즉, CL 명령)는 긴 이름을 지원하도록 향상되지 않았습니다. 이는 CL 또는 명령 제한이 아닙니다. CL 명령은 항상 128바이트 이름을 지원할 수 있었습니다. 사실 1980년에 처음 사용자 작성 CL 명령을 작성했을 때 실수로 객체 이름 매개변수에 길이를 32로 지정했는데 제대로 작동했습니다. 긴 개체 및 라이브러리 이름을 지원하기 위해 핵심 CL을 업데이트하는 것은 "절대 일어나지 않을 것"인 것 같습니다.
다음은 BOAT_TRAFFIC 파일(테이블을 의미함)을 생성하는 데 사용한 SQL DLL의 단축 버전입니다.
이 파일을 개발자 라이브러리나 백업 라이브러리에 복사하려면 일반적으로 상황에 따라 CRTDUPOBJ 또는 CPYF를 사용합니다. 현재 데이터로 개발자 라이브러리의 데이터를 새로 고치고 싶기 때문에 CPYF를 사용하고 싶다고 가정해 보겠습니다. 아래 이미지와 같은 명령 입력 화면이 표시됩니다.
실제로 SQL을 사용하여 복사 작업을 수행할 수 있습니다. 먼저 대상 파일의 데이터를 지운 다음 SQL INSERT 문을 사용하여 새 데이터를 복사해야 합니다. 아마도 다음과 같을 것입니다:
(A) TRUNCATE 또는 유사한 명령문을 사용하여 대상 파일을 지우고 (B) IDENTITY 열을 수용하면서 레코드를 복사해야 하기 때문에 이런 종류가 작동한다고 말합니다. 이를 위해 다음과 같이 INSERT 문에 OVERRIDING XXX VALUE를 추가합니다.
일반적으로 IDENTITY 열이 있는 파일에 행이 추가되면 데이터베이스는 자동으로 IDENTITY 열을 증가시킵니다. 이를 방지하려면 OVERRIDING USER VALUE 또는 OVERRDING SYSTEM VALUE 절을 사용할 수 있습니다.
OVERRIDING USER VALUE는 INSERT의 하위 쿼리(예: SELECT 문)에 IDENTITY 열 값이 포함되어 있지만 시스템에서 해당 값을 무시하고 새로 추가된 각 행에 대해 새 값을 생성하기를 원한다는 의미입니다.
OVERRIDING SYSTEM VALUE는 INSERT의 하위 쿼리(즉, SELECT 문)에 IDENTITY 열 값이 포함되어 있고 시스템이 해당 값을 대상 파일에 복사하여 유지하기를 원함을 의미합니다.
분명히 이 예에서는 OVERRIDING SYSTEM VALUE를 원합니다.
데이터베이스 파일 외에도 SQL에는 다른 개체가 있습니다. SEQUENCE, ALIAS, FUNCTION, PROCEDURE 등. 이들 모두는 최대 128바이트 길이의 SQL 이름을 지원합니다. 예를 들어, SQL ALIAS를 생성하고 긴 이름을 지정했다고 가정해 보겠습니다. ALIAS 오브젝트는 일반적으로 회원 처리를 위해 IBM i 상점에서 자주 사용됩니다. SQL은 멤버를 인식하지 못하기 때문에 IBM은 파일의 특정 멤버에 액세스하는 데 사용할 수 있도록 ALIAS를 강화했습니다.
이 예에서는 CUSTOMS 라이브러리에 BOAT_TARIFF_BAHAMAS라는 ALIAS를 생성했습니다. TARIFF 파일의 BAHAMAS 구성원을 쿼리하기 위해 SELECT 문에서 이 ALIAS를 사용할 수 있습니다. 다른 모든 SQL 유형과 마찬가지로 ALIAS는 SQL 카탈로그의 IBM i 시스템 오브젝트 이름에 긴 이름을 저장합니다.
데이터베이스 파일은 파일의 객체 설명에 긴 SQL 이름을 저장하고 QDBRTVFD API를 통해 해당 이름에 대한 액세스를 제공합니다. 긴 SQL 이름에 대해 IBM i 오브젝트 이름을 리턴하는 QDBRTVSN(Retrieve Short Name)이라는 또 다른 API도 있습니다. 그러나 이 역시 데이터베이스 파일과 최근에는 라이브러리 이름에만 적용됩니다.
긴 SQL 이름을 가진 다른 모든 개체 유형은 SQL 카탈로그에서 상호 참조됩니다. IBM은 카탈로그 이름과 함께 상당히 일관된 명명 규칙을 사용하므로 쿼리해야 하는 카탈로그를 어느 정도 쉽게 기억할 수 있습니다. 다음은 모든 SQL 객체와 암시적으로 SQL 객체인 많은 IBM i 객체(예: 실제 및 논리 파일)에 대한 속성을 포함하는 카탈로그 파일 이름 목록입니다.