一部のアプリケーションでは、Unicode データを ANSI に変換しないで Microsoft SQL Server データソースに取り込んだり保存したりすることがあります。以前のバージョンの OpenESQL では、データを自動変換しないとデータにアクセスできませんでした。現在のバージョンの OpenESQL と COBOL 開発システムでは新しいタイプのホスト変数を使用することで、Unicode データを ANSI に変換しなくても直接操作できるようになりました。Microsoft SQL Server では、次の 3 つの Unicode カラム型がサポートされます。
データを自動的変換しないで、これらのカラムにアクセスするには、次の定義を使用してホスト変数を定義します。
PIC N(xx) USAGE NATIONAL
xx には、カラムのサイズを指定します。この形式は、現在固定長データと可変長データの両方についてサポートされています。可変長データを NULL で終了して、データの挿入や更新時にカラムのデータの末尾を示すことができます。データソースからデータが取り込まれると、ホスト変数の末尾に空白文字が付加されます。
たとえば、次のプログラムでは Microsoft SQL Server 2000 製品に付属している Northwind サンプル データベースから従業員情報を取り込みます。
$SET UNICODE(NATIVE) $SET SQL WORKING-STORAGE SECTION. EXEC SQL INCLUDE SQLCA END-EXEC * after an sql error this has the full message text 01 MFSQLMESSAGETEXT PIC X(250). 01 IDX PIC X(04) COMP-5. EXEC SQL BEGIN DECLARE SECTION END-EXEC * Put your host variables here if you need to port * to other COBOL compilers EXEC SQL INCLUDE Employees END-EXEC EXEC SQL END DECLARE SECTION END-EXEC PROCEDURE DIVISION. EXEC SQL WHENEVER SQLERROR perform OpenESQL-Error END-EXEC EXEC SQL CONNECT TO 'LocalServer' END-EXEC * Put your program logic/SQL statements here EXEC SQL DECLARE CSR135 CURSOR FOR SELECT A.FirstName ,A.LastName ,A.EmployeeID ,A.HireDate FROM Employees A END-EXEC EXEC SQL OPEN CSR135 END-EXEC PERFORM UNTIL SQLSTATE >= "02000" EXEC SQL FETCH CSR135 INTO :Employees-FirstName ,:Employees-LastName ,:Employees-EmployeeID ,:Employees-HireDate:Employees-HireDate-NULL END-EXEC *> Process data from FETCH IF SQLSTATE < "02000" * for array fetches, field sqlerrd(3) contains the * number of rows returned * PERFORM VARYING IDX FROM 1 BY 1 * UNTIL IDX > SQLERRD(3) * you will need to add code here to process the array * END-PERFORM END-IF END-PERFORM EXEC SQL CLOSE CSR135 END-EXEC EXEC SQL DISCONNECT CURRENT END-EXEC EXIT PROGRAM. STOP RUN. * Default sql error routine - modify to stop program * if needed OpenESQL-Error Section. display "SQL Error = " sqlstate " " sqlcode display MFSQLMESSAGETEXT * stop run exit.
次の例は、ANSI でデータを取り込んだ場合と同じコードですが、次のように INCLUDE Employees コピーブックの定義が異なります。
* ----------------------------------------------------------- * COBOL DECLARATION FOR TABLE Employees * ----------------------------------------------------------- 01 DCLEmployees. 03 Employees-EmployeeID PIC S9(09) COMP-5. 03 Employees-LastName PIC N(20) USAGE NATIONAL. 03 Employees-FirstName PIC N(10) USAGE NATIONAL. 03 Employees-Title PIC N(30) USAGE NATIONAL. 03 Employees-TitleOfCourtesy PIC N(25) USAGE NATIONAL. 03 Employees-BirthDate PIC X(23). 03 Employees-HireDate PIC X(23). 03 Employees-Address PIC N(60) USAGE NATIONAL. 03 Employees-City PIC N(15) USAGE NATIONAL. 03 Employees-Region PIC N(15) USAGE NATIONAL. 03 Employees-PostalCode PIC N(10) USAGE NATIONAL. 03 Employees-Country PIC N(15) USAGE NATIONAL. 03 Employees-HomePhone PIC N(24) USAGE NATIONAL. 03 Employees-Extension PIC N(4) USAGE NATIONAL. 03 Employees-Photo PIC X(64000). 03 Employees-Notes PIC N(32000) USAGE NATIONAL. 03 Employees-ReportsTo PIC S9(09) COMP-5. 03 Employees-PhotoPath PIC N(255) USAGE NATIONAL.
OpenESQL アシスタントも Unicode データをサポートするように拡張されています。詳細は、 「OpenESQL アシスタント」を参照してください。