/* Copyright © 1995, 2002, Oracle Corporation. All Rights Reserved. */ /*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/ /* PROGRAM NAME: SQL_MIA_CHAR_SET_PRE.SC */ /*--------------------------------------------------------------------------*/ /* ABSTRACT: This SQL precompiled C program creates a database called */ /* MIA_CHAR_SET, several domains, a single table (called COLOURS), and */ /* an index for that table. The program inserts eight rows of data. Each */ /* column is defined by a different character set for the following */ /* languages: ENGLISH, FRENCH, KANJI, ROMAJI, KATAKANA, HINDI, GREEK, */ /* ARABIC, and RUSSIAN. Finally, the program uses a cursor to fetch rows */ /* of data for display. */ /*--------------------------------------------------------------------------*/ /* PROGRAM PURPOSE: To demonstrate how to create a database containing */ /* multiple character sets, how to declare character sets, and how to */ /* use the DECLARE MODULE statement. */ /*--------------------------------------------------------------------------*/ #include #include #include #include #define SUCCESS 0 #define END_OF_STREAM 100 /* Declarations of function prototypes. */ int check_error(long); typedef char colour_string_t[17]; enum languages { ENGLISH, FRENCH, JAPANESE, ROMAJI, KATAKANA, HINDI, GREEK, ARABIC, RUSSIAN, MAX_LANGUAGE }; enum colours { MAX_COLOUR = 6 }; static char *language_name[] = /* (NOTE: in the same sequence as the enum) */ { "ENGLISH ", "FRENCH ", "JAPANESE ", "ROMAJI ", "KATAKANA ", "HINDI ", "GREEK ", "ARABIC ", "RUSSIAN ", }; main() { static colour_string_t prism[MAX_LANGUAGE][MAX_COLOUR]; int colour_count; int language; int colour; long SQLCODE; /* Specify the characteristics for the SQL module. */ EXEC SQL DECLARE MODULE SQL_MIA_MODULE DIALECT SQL92 -- SQL92 environment sets character -- length to CHARACTERS NAMES ARE DEC_KANJI -- Names character set NATIONAL CHARACTER SET KANJI -- National character set DEFAULT CHARACTER SET DEC_KANJI -- Default character set AUTHORIZATION SQL_SAMPLE -- Default authorization id ALIAS RDB$DBHANDLE -- Default alias ; /* Declare a table cursor for the COLOURS table. */ EXEC SQL DECLARE COLOURS_CURSOR TABLE CURSOR FOR SELECT ENGLISH, FRENCH, JAPANESE, ROMAJI, KATAKANA, HINDI, GREEK, ARABIC, RUSSIAN FROM COLOURS; /* Create the database MIA_CHAR_SET. */ EXEC SQL CREATE DATABASE FILENAME mia_char_set DEFAULT CHARACTER SET DEC_KANJI NATIONAL CHARACTER SET KANJI IDENTIFIER CHARACTER SET DEC_KANJI; check_error(SQLCODE); /* Declare variables for program use. */ /* When you declare character string parameters, you must take into */ /* account the character set of the corresponding SQL column, whether */ /* or not the characters are single- or multi-octet characters, and */ /* whether or not the module specifies the character length in octets */ /* or characters. */ /* Create domains. */ EXEC SQL CREATE DOMAIN MCS_DOM CHAR (8) CHARACTER SET DEC_MCS; check_error(SQLCODE); /* The CREATE DATABASE statement and the module header identify */ /* KANJI as the national character set. Thus, you can declare */ /* the KANJI_DOM domain as data type NCHAR. */ EXEC SQL CREATE DOMAIN KANJI_DOM NCHAR (4); check_error(SQLCODE); /* Because the module header and the CREATE DATABASE statement */ /* define DEC_KANJI as the default character set, you do not */ /* have to identify the character set for the DEC_KANJI_DOM */ /* domain. */ EXEC SQL CREATE DOMAIN DEC_KANJI_DOM CHAR (8); check_error(SQLCODE); EXEC SQL CREATE DOMAIN KATAKANA_DOM CHAR (8) CHARACTER SET KATAKANA; check_error(SQLCODE); EXEC SQL CREATE DOMAIN HINDI_DOM CHAR (8) CHARACTER SET DEVANAGARI; check_error(SQLCODE); EXEC SQL CREATE DOMAIN GREEK_DOM CHAR (8) CHARACTER SET ISOLATINGREEK; check_error(SQLCODE); EXEC SQL CREATE DOMAIN ARABIC_DOM CHAR (8) CHARACTER SET ISOLATINARABIC; check_error(SQLCODE); EXEC SQL CREATE DOMAIN RUSSIAN_DOM CHAR (8) CHARACTER SET ISOLATINCYRILLIC; check_error(SQLCODE); /* Create the table COLOURS. */ EXEC SQL CREATE TABLE COLOURS ( ENGLISH MCS_DOM, FRENCH MCS_DOM, JAPANESE KANJI_DOM, ROMAJI DEC_KANJI_DOM, KATAKANA KATAKANA_DOM, HINDI HINDI_DOM, GREEK GREEK_DOM, ARABIC ARABIC_DOM, RUSSIAN RUSSIAN_DOM); check_error(SQLCODE); EXEC SQL COMMIT; check_error(SQLCODE); /* Create the index. */ EXEC SQL CREATE INDEX COLOUR_INDEX ON COLOURS (JAPANESE SIZE IS 4) TYPE IS SORTED; EXEC SQL COMMIT; check_error(SQLCODE); /* Insert ASCII values of colors into table columns. */ /* Insert the values for the color black */ EXEC SQL INSERT INTO COLOURS VALUES (_DEC_MCS'Black', _DEC_MCS'Noir', _KANJI'¹õ', _DEC_KANJI'kuro', _KATAKANA'¸Û', _DEVANAGARI'µÞÒÞ', _ISOLATINGREEK'Ìáýñïò', _ISOLATINARABIC'ÃÓÄÏ', _ISOLATINCYRILLIC'ÇñàÝëÙ'); /* Insert the values for the color white. */ EXEC SQL INSERT INTO COLOURS VALUES (_DEC_MCS'White', _DEC_MCS'Blanc', _KANJI'Çò', _DEC_KANJI'shiro', _KATAKANA'¼Û', _DEVANAGARI'ØËçÆ', _ISOLATINGREEK'Ëïõêü', _ISOLATINARABIC'ÃÈêÖ', _ISOLATINCYRILLIC'±ÕÛëÙ'); /* Insert the values for the color blue. */ EXEC SQL INSERT INTO COLOURS VALUES (_DEC_MCS'Blue', _DEC_MCS'Bleu', _KANJI'ÀÄ', _DEC_KANJI'ao', _KATAKANA'±µ', _DEVANAGARI'ÈàÒÞ', _ISOLATINGREEK'Ãáëáíüò', _ISOLATINARABIC'ÃÒÑâ', _ISOLATINCYRILLIC'ÁØÝØÙ'); /* Insert the values for the color red. */ EXEC SQL INSERT INTO COLOURS VALUES (_DEC_MCS'Red', _DEC_MCS'Rouge', _KANJI'ÀÖ', _DEC_KANJI'aka', _KATAKANA'±¶', _DEVANAGARI'ÒÞÒ', _ISOLATINGREEK'Êüêêéíï', _ISOLATINARABIC'}ÍåÑ', _ISOLATINCYRILLIC'ºàÐáÝëÙ'); /* Insert the values for the color yellow. */ EXEC SQL INSERT INTO COLOURS VALUES (_DEC_MCS'Yellow', _DEC_MCS'Jaune', _KANJI'²«', _DEC_KANJI'ki', _KATAKANA'·²Û', _DEVANAGARI'ÊàÒÞ', _ISOLATINGREEK'Êßôñéíïò', _ISOLATINARABIC'ÃÕáÑ', _ISOLATINCYRILLIC'¶ñÛâëÙ'); /* Insert the values for the color green. */ EXEC SQL INSERT INTO COLOURS VALUES (_DEC_MCS'Green', _DEC_MCS'Vert', _KANJI'ÎÐ', _DEC_KANJI'midori', _KATAKANA'ÐÄÞ¿', _DEVANAGARI'ÙÐÞ', _ISOLATINGREEK'ÐñÜóéíïò', _ISOLATINARABIC'ÃÎÖÑ', _ISOLATINCYRILLIC'·ÕÛñëÙ'); EXEC SQL COMMIT; check_error(SQLCODE); /* Open the COLOURS_CURSOR table cursor, fetch all rows into an array, */ /* and display column data. */ EXEC SQL OPEN COLOURS_CURSOR; if (SQLCODE != END_OF_STREAM) { char eng[17]; char fre[17]; char jap[17]; char rom[17]; char kat[17]; char hin[17]; char gre[17]; char ara[17]; char rus[17]; colour_count = 0; for (colour = 0; colour < (int)MAX_COLOUR; colour++) { EXEC SQL FETCH COLOURS_CURSOR INTO :eng, :fre, :jap, :rom, :kat, :hin, :gre, :ara, :rus; strcpy(prism[ENGLISH][colour], eng); strcpy(prism[FRENCH][colour], fre); strcpy(prism[JAPANESE][colour], jap); strcpy(prism[ROMAJI][colour], rom); strcpy(prism[KATAKANA][colour], kat); strcpy(prism[HINDI][colour], hin); strcpy(prism[GREEK][colour], gre); strcpy(prism[ARABIC][colour], ara); strcpy(prism[RUSSIAN][colour], rus); if (SQLCODE == END_OF_STREAM) break; colour_count++; } /* end of for loop */ } /* end of if clause */ /* Close the cursor. */ EXEC SQL CLOSE COLOURS_CURSOR; check_error(SQLCODE); /* Report the results. */ /* Print the table title. */ printf("\n"); printf("\n"); printf("%20s COLOURS TABLE DATA \n"," "); printf("%20s MIA_CHAR_SET DATABASE \n"," "); printf("%20s-----------------------\n"," "); printf("\n"); /* Print the languages in English along the left margin and table values */ /* for each. */ for (language = 0; language < (int)MAX_LANGUAGE; language++) { printf("%s ", language_name[language]); for (colour = 0; colour < colour_count; colour++) { printf("%-.8s ", prism[language][colour]); } /* end of inner for loop */ printf("\n"); printf("\n"); } /* end of outer for loop */ } /* main end */ /* Error-handling section. */ check_error(long SQLCODE) { if (SQLCODE != SUCCESS) { sql_signal(); EXEC SQL ROLLBACK; exit(0); } }