SQL> UPDATE tab1 SET col1 = NULL WHERE CHARACTER_LENGTH(col1) = 0; |
表の変更が不可能であるか、VARCHARファンクションが含まれる別の言語でコンパイルされたビューを使用する必要がある場合、この表またはビューを参照するORACLE言語で新規ビューを作成し、長さがゼロのVARCHAR文字列を使用しないようにします。次の例は、表またはOracle以外の言語ビューのVARCHAR列から長さがゼロの文字列を選択しないようにする方法を示しています。
SQL> SET DIALECT 'ORACLE LEVEL1'; SQL> CREATE VIEW view1 (col1, col2) cont> AS SELECT SUBSTRING(col1 FROM 1 FOR 2000), col2 FROM tab1; |
ファンクションを使用せずにデータが選択される場合、Oracle Rdbオプティマイザの方が効率的です。このため、前述の例の使用が最も適しているのは、長さがゼロの文字列が表に挿入されている疑いがあり、これらを使用しないようにする必要がある場合のみです。
SQL> ATTACH 'FILENAME mf_personnel'; SQL> SET DIALECT 'ORACLE LEVEL1'; SQL> SELECT last_name FROM EMPLOYEES WHERE ROWNUM < 10; LAST_NAME Toliver Smith Dietrich Kilpatrick Nash Gray Wood D'Amico Peters 9 rows selected |
正の整数以上のROWNUM値の条件テストは常にFALSEであるため、行は返されません。次に例を示します。
SQL> SELECT last_name FROM EMPLOYEES WHERE ROWNUM > 10; 0 rows selected SQL> SELECT last_name FROM EMPLOYEES WHERE ROWNUM = 10; 0 rows selected |
ROWNUMキーワードに適用される追加制限は、「使用方法」を参照してください。
MIAを指定する場合、キャラクタ・セットは次のように設定されます。
これには、SQL92に関するすべての動作説明に次の変更が加えられたものが含まれます。
デフォルトはSQLV40です。
言語オプションの設定値は、表6-15を参照してください。
- SET DIALECT文の後に次の文が処理されると、SET DIALECT文の設定がオーバーライドされます。
- SET CHARACTER LENGTH
- SET QUOTING RULES
- SET KEYWORD RULES
- SET VIEW UPDATE RULES
- SET DEFAULT DATE FORMAT
- SET DEFAULT CHARACTER SET
- SET NATIONAL CHARACTER SET
- SET IDENTIFIER CHARACTER SET
- SET LITERAL CHARACTER SET
- SET NAMES
これらの文によって変更されるのは、現在の接続の設定のみです。- MIAを指定してから言語を別の値に変更しても、MIAでは、デフォルト・キャラクタ・セット、各国語キャラクタ・セット、識別子キャラクタ・セットおよびリテラル・キャラクタ・セットは変更されずにそのまま残ります。この場合、これらの各キャラクタ・セットは手動で変更する必要があります。セッションのキャラクタ・セットの変更の詳細は、「SET DEFAULT CHARACTER SET文」、「SET IDENTIFIER CHARACTER SET文」、「SET LITERAL CHARACTER SET文」および「SET NATIONAL CHARACTER SET文」を参照してください。
- SHOW CONNECTIONS文を使用して、接続の特性を表示します。
- 文字データ型の変換時にソース文字列がターゲット文字列より長い場合、MIA、SQL89およびSQLV40の各言語では、結果は左詰めされて右側が切り捨てられ、エラーはレポートされません。
他のすべての言語では、データ格納時にエラーが返されます。ただし、切り捨てられる文字が空白文字のみである場合、エラーは返されません。データの取得中に切捨てが発生すると、警告が返されます。この場合、切り捨てられた文字列が空白かどうかにかかわらず、警告が返されます。- 言語をSQL89に設定する場合、SQLインタフェースを使用してデータベースのデータを挿入または更新するときに(RDOインタフェースを使用して定義された)欠落値の変換を処理できます。値がRDOを使用して欠落値に設定されている場合、SQLを使用した挿入または更新の結果値はNULLです。
- ROWNUMを列名として使用した場合、列名の変更を考慮してください。考慮しない場合、列の参照時に、列名を一重引用符で囲むか、列名の前に表名を付ける必要があります。
- ROWNUMキーワードに適用される他の制限は、次のとおりです。
- ORACLE言語でのみ使用できます。他のすべての言語では、LIMIT TO句を使用する必要があります。
- 選択式条件の比較でのみ使用できます。
- SELECT文または選択式でのみ使用できます。
- LIMIT TO句では使用できません。
- WHERE句の条件では複数回使用できません。
- 列とは比較できません。
- 複合文では使用できません。
- ORブール演算子のいずれの側でも使用できません。
- ファンクション・コールでは選択または使用できません。
例1: SQL92への特性の設定
SQL> ATTACH 'ALIAS MIA1 FILENAME MIA_CHAR_SET DISPLAY CHARACTER SET SHIFT_JIS'; SQL> CONNECT TO 'ALIAS MIA1 FILENAME MIA_CHAR_SET' AS 'TEST'; SQL> SHOW CONNECTIONS TEST; Connection: TEST Default alias is RDB$DBHANDLE Default catalog name is RDB$CATALOG Default schema name is SMITH Dialect: SQLV40 Default character unit: OCTETS Keyword Rules: SQLV40 View Rules: SQLV40 Default DATE type: DATE VMS Quoting Rules: SQLV40 Optimization Level: DEFAULT Hold Cursors default: WITH HOLD PRESERVE NONE Quiet commit mode: OFF Compound transactions mode: EXTERNAL Default character set is DEC_MCS National character set is DEC_MCS Identifier character set is SHIFT_JIS Literal character set is SHIFT_JIS Display character set is SHIFT_JIS Alias MIA1: Identifier character set is DEC_KANJI Default character set is KATAKANA National character set is KANJI SQL> -- SQL> -- Change the environment from SQLV40 to MIA. Notice that the session SQL> -- character sets change. SQL> -- SQL> SET DIALECT 'MIA'; SQL> SHOW CONNECTIONS TEST; Connection: TEST Default alias is RDB$DBHANDLE Default catalog name is RDB$CATALOG Default schema name is SMITH Dialect: MIA Default character unit: CHARACTERS Keyword Rules: MIA View Rules: ANSI/ISO Default DATE type: DATE ANSI Quoting Rules: ANSI/ISO Optimization Level: DEFAULT Hold Cursors default: WITH HOLD PRESERVE NONE Quiet commit mode: OFF Compound transactions mode: EXTERNAL Default character set is KATAKANA National character set is KANJI Identifier character set is DEC_KANJI Literal character set is KATAKANA Display character set is SHIFT_JIS Alias MIA1: Identifier character set is DEC_KANJI Default character set is KATAKANA National character set is KANJI SQL> -- SQL> -- Change the environment from MIA to SQL99. Notice that the SQL> -- session characters DO NOT change from the MIA settings. SQL> -- SQL> SET DIALECT 'SQL99'; SQL> SHOW CONNECTIONS TEST; Connection: TEST Default alias is RDB$DBHANDLE Default catalog name is RDB$CATALOG Default schema name is SMITH Dialect: SQL99 Default character unit: CHARACTERS Keyword Rules: SQL99 View Rules: ANSI/ISO Default DATE type: DATE ANSI Quoting Rules: ANSI/ISO Optimization Level: DEFAULT Hold Cursors default: WITH HOLD PRESERVE NONE Quiet commit mode: ON Compound transactions mode: EXTERNAL Default character set is KATAKANA National character set is KANJI Identifier character set is DEC_KANJI Literal character set is KATAKANA Display character set is SHIFT_JIS Alias MIA1: Identifier character set is DEC_KANJI Default character set is KATAKANA National character set is KANJI
例2: 対話型SQLにおける言語の保存および格納
この例は、対話型SQLで宣言した変数を使用して、代替言語が必要なスクリプトの実行時に言語を(GET ENVIRONMENTを使用して)保存および格納する方法を示しています。この例では、SHOW CONNECTION文を使用して言語をそのまま表示しています。
SQL> set dialect 'sql99'; SQL> -- save current dialect SQL> declare :dialect char(40); SQL> get environment (session) :dialect = DIALECT; SQL> print :dialect; DIALECT SQL99 SQL> set dialect 'oracle level2'; SQL> show connection rdb$default_connection; Connection: RDB$DEFAULT_CONNECTION Default alias is RDB$DBHANDLE Default catalog name is RDB$CATALOG Default schema name is SMITH Dialect: SQL99 (ORACLE LEVEL2) Default character unit: CHARACTERS Keyword Rules: SQL99 View Rules: ANSI/ISO Default DATE type: DATE VMS Quoting Rules: ANSI/ISO Optimization Level: DEFAULT Hold Cursors default: WITH HOLD PRESERVE NONE Quiet commit mode: ON Compound transactions mode: EXTERNAL Default character set is DEC_MCS National character set is DEC_MCS Identifier character set is DEC_MCS Literal character set is DEC_MCS Display character set is UNSPECIFIED SQL> SQL> -- restore previous dialect SQL> set dialect :dialect; SQL> show connection rdb$default_connection; Connection: RDB$DEFAULT_CONNECTION Default alias is RDB$DBHANDLE Default catalog name is RDB$CATALOG Default schema name is SMITH Dialect: SQL99 Default character unit: CHARACTERS Keyword Rules: SQL99 View Rules: ANSI/ISO Default DATE type: DATE ANSI Quoting Rules: ANSI/ISO Optimization Level: DEFAULT Hold Cursors default: WITH HOLD PRESERVE NONE Quiet commit mode: ON Compound transactions mode: EXTERNAL Default character set is DEC_MCS National character set is DEC_MCS Identifier character set is DEC_MCS Literal character set is DEC_MCS Display character set is UNSPECIFIED SQL>
ヘッダー情報の出力を制御します。SHOW DISPLAY文を使用して現在の設定を表示します。
SET DISPLAY文は、対話型SQLでのみ使用できます。
COMMENT
NOCOMMENT
他のSHOWコマンド(SHOW TABLEなど)によるコメント・テキストの表示を無効または有効にします。DEFAULT NULL STRING
'NULL'テキストの使用に戻します。EDIT STRING
NO EDIT STRING
列の編集文字列の使用を有効にして、SELECT文の値を書式設定します。列の編集文字列の使用を無効にするには、NO EDIT STRINGを使用します。NULL STRING
対話型SQLによるNULL値の表示方法を変更します。QUERY HEADER
NO QUERY HEADER
SELECT文、CALL文、FETCH文およびPRINT文によって生成される出力されたヘッダーを有効にします。このヘッダーを無効にするには、NO QUERY HEADERを使用します。ROW COUNTER
NO ROW COUNTER
SELECT文、DELETE文、INSERT文およびUPDATE文によってレポートされる総カウントを有効にします。後続のカウント・メッセージを無効にするには、NO ROW COUNTERを使用します。
- 表示列の幅は、最大の列名の長さ、QUERY HEADERの長さ、NULL文字列の長さおよび書式設定されたデータのサイズを使用して計算されます。
- SET DISPLAY DEFAULT NULL STRING文は、SET DISPLAY NULL STRING 'NULL'に相当します。
- SET DISPLAY NULL STRINGでは、文字列リテラル、または宣言されたローカル変数が受け入れられます。
- GET ENVIRONMENT文には、現在定義されているテキストを保存するために使用可能なNULL_STRINGキーワードが含まれます。
- デフォルトでは、編集文字列が使用され、問合せヘッダーが表示され、行のカウント・メッセージがレポートされます。複数のオプションをカンマで区切って指定できます。ただし、次の例に示すように、1つの文にオプションとその否定形式の両方は指定できません。
SQL> SET DISPLAY QUERY HEADER, NO QUERY HEADER %SQL-F-MULTSPECATR, Multiple specified attribute. "QUERY HEADER" was specified more than once
- SQL*Plusとの互換性を確保するために用意されている次のSET文は、SET DISPLAY句に相当します。
- SET HEADING ONは、SQL SET DISPLAY QUERY HEADER文のシノニムです。SELECT、PRINTおよびFETCHなどのSQL出力文では、列、変数またはその問合せヘッダーの名前が表示されます。
- SET HEADING OFFは、SQL SET NO DISPLAY QUERY HEADER文のシノニムです。SELECT、PRINTおよびFETCHなどのSQL出力文では、問合せヘッダーの名前は表示されません。
- SET FEEDBACK ONは、SQL SET DISPLAY NO ROW COUNTER文のシノニムです。SELECT、DELETE、UPDATEおよびINSERTなどのSQLデータ操作文では、関連する行数が表示されます。
- SET FEEDBACK OFFは、SQL SET DISPLAY ROW COUNTER文のシノニムです。SQLデータ操作文では、関連する行数は表示されません。
- SET NULLは、SET DISPLAY NULL STRING ' '文のシノニムです。また、SET NULL 'literal'は、SET DISPLAY NULL 'literal'に相当します。
例1: SET DISPLAY文の使用
次の例は、SET DISPLAY文の効果を示しています。この例では、SHOW DISPLAYコマンドを使用して現在の設定をレポートしています。
SQL> ATTACH 'FILENAME mf_personnel'; SQL> SQL> CREATE DOMAIN money INTEGER(2) EDIT STRING '$$$,$$9.99'; SQL> CREATE TABLE temp_emp (id INTEGER, sal money); SQL> SQL> SELECT * FROM work_status; STATUS_CODE STATUS_NAME STATUS_TYPE 0 INACTIVE RECORD EXPIRED 1 ACTIVE FULL TIME 2 ACTIVE PART TIME 3 rows selected SQL> SQL> SET DISPLAY NO ROW COUNTER; SQL> SHOW DISPLAY Output of the query header is enabled Output of the row counter is disabled Output using edit strings is enabled Page length is set to 24 lines Line length is set to 132 bytes Display NULL values using "NULL" SQL> SELECT * FROM work_status; STATUS_CODE STATUS_NAME STATUS_TYPE 0 INACTIVE RECORD EXPIRED 1 ACTIVE FULL TIME 2 ACTIVE PART TIME SQL> INSERT INTO temp_emp (id) VALUES (0); SQL> INSERT INTO temp_emp (id, sal) cont> SELECT employee_id, MAX(salary_amount) cont> FROM salary_history GROUP BY employee_id; SQL> UPDATE temp_emp SET id = NULL WHERE id <= 0; SQL> DELETE FROM temp_emp WHERE id IS NULL; SQL> SQL> SET DISPLAY ROW COUNTER; SQL> SHOW DISPLAY Output of the query header is enabled Output of the row counter is enabled Output using edit strings is enabled Page length is set to 24 lines Line length is set to 132 bytes Display NULL values using "NULL" SQL> SQL> SELECT * FROM work_status; STATUS_CODE STATUS_NAME STATUS_TYPE 0 INACTIVE RECORD EXPIRED 1 ACTIVE FULL TIME 2 ACTIVE PART TIME 3 rows selected SQL> SQL> SET DISPLAY NO QUERY HEADER; SQL> SHOW DISPLAY Output of the query header is disabled Output of the row counter is enabled Output using edit strings is enabled Page length is set to 24 lines Line length is set to 132 bytes Display NULL values using "NULL" SQL> SQL> DECLARE :res INTEGER; SQL> SQL> -- This omits the query header for the SELECT statement SQL> SELECT * FROM work_status; 0 INACTIVE RECORD EXPIRED 1 ACTIVE FULL TIME 2 ACTIVE PART TIME 3 rows selected SQL> SQL> -- This omits the query header for the PRINT statement SQL> PRINT :res; 0 SQL> PRINT 'This is a print line'; This is a print line SQL> SQL> CREATE MODULE call_sample cont> LANGUAGE SQL cont> PROCEDURE add_one (IN :a INTEGER, OUT :b INTEGER); cont> SET :b = :a + 1; cont> END MODULE; SQL> -- This omits the query header for the OUT/INOUT parameters for CALL SQL> CALL add_one (100, :res); 101 SQL> SQL> DECLARE c CURSOR FOR SELECT * FROM work_status; SQL> OPEN c; SQL> -- This omits the query headers for the variables fetched SQL> FETCH c; 0 INACTIVE RECORD EXPIRED SQL> SET DISPLAY QUERY HEADER; SQL> SHOW DISPLAY Output of the query header is enabled Output of the row counter is enabled Output using edit strings is enabled Page length is set to 24 lines Line length is set to 132 bytes Display NULL values using "NULL" SQL> -- This outputs the query headers for the variables fetched SQL> FETCH c; STATUS_CODE STATUS_NAME STATUS_TYPE 1 ACTIVE FULL TIME SQL> CLOSE c; SQL> SQL> TRUNCATE TABLE temp_emp; SQL> INSERT INTO temp_emp (id, sal) cont> SELECT employee_id, AVG(salary_amount) cont> FROM salary_history cont> WHERE salary_end IS NULL cont> GROUP BY employee_id; 100 rows inserted SQL> SQL> SELECT * FROM temp_emp ORDER BY id LIMIT TO 3 ROWS; ID SAL 164 $51,712.00 165 $11,676.00 166 $18,497.00 3 rows selected SQL> SQL> SET DISPLAY NO EDIT STRING; SQL> SHOW DISPLAY Output of the query header is enabled Output of the row counter is enabled Output using edit strings is disabled Page length is set to 24 lines Line length is set to 132 bytes Display NULL values using "NULL" SQL> SQL> SELECT * FROM temp_emp ORDER BY id LIMIT TO 3 ROWS; 164 51712.00 165 11676.00 166 18497.00 3 rows selected SQL> SQL> SET DISPLAY EDIT STRING; SQL> SHOW DISPLAY Output of the query header is enabled Output of the row counter is enabled Output using edit strings is enabled Page length is set to 24 lines Line length is set to 132 bytes Display NULL values using "NULL" SQL> SQL> SELECT * FROM temp_emp ORDER BY id LIMIT TO 3 ROWS; ID SAL 164 $51,712.00 165 $11,676.00 166 $18,497.00 3 rows selected
例2: 出力を読みやすくするためのテキストへのNULL値の置換
SQL> select job_start, job_end, cont> (select department_name cont> from departments d cont> where d.department_code = jh.department_code) cont> from job_history jh cont> where employee_id = '00164'; JOB_START JOB_END 21-Sep-1981 NULL Board Manufacturing North 5-Jul-1980 20-Sep-1981 Cabinet & Frame Manufacturing 2 rows selected SQL> set display null string '(still employeed)' SQL> select job_start, job_end, cont> (select department_name cont> from departments d cont> where d.department_code = jh.department_code) cont> from job_history jh cont> where employee_id = '00164'; JOB_START JOB_END 21-Sep-1981 (still employeed) Board Manufacturing North 5-Jul-1980 20-Sep-1981 Cabinet & Frame Manufacturing 2 rows selected
例3: SHOWの出力を読みやすくするためのコメント表示の無効化
SQL> show domain id_dom ID_DOM CHAR(5) Comment: standard definition of employee id SQL> set display no comment; SQL> show domain id_dom ID_DOM CHAR(5) SQL>
例4: GET ENVIRONMENTの使用による現在のNULL文字列の保存、および問合せの実行後のリストア
SQL> declare :ns varchar(100); SQL> get environment (session) :ns = NULL_STRING; SQL> set null; SQL> select job_start, job_end, cont> (select department_name cont> from departments d cont> where d.department_code = jh.department_code) cont> from job_history jh cont> where employee_id = '00164'; JOB_START JOB_END 21-Sep-1981 Board Manufacturing North 5-Jul-1980 20-Sep-1981 Cabinet & Frame Manufacturing 2 rows selected SQL> set display null string :ns; SQL> select job_start, job_end, cont> (select department_name cont> from departments d cont> where d.department_code = jh.department_code) cont> from job_history jh cont> where employee_id = '00164'; JOB_START JOB_END 21-Sep-1981 NULL Board Manufacturing North 5-Jul-1980 20-Sep-1981 Cabinet & Frame Manufacturing 2 rows selected