問題ID: 8043

  • フォーラムは新サイトへ移行しました。
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 .4 | 投稿日時 2016-9-26 12:58
qtaro3  半人前 居住地: 神奈川県  投稿数: 8
『正常に実行されるがデータは1件も表示されない。』
が正解ではないでしょうか?
※'30-APR-10'は'RR-MM-DD'と'DD-MM-RR'の両方で有効だと思います。
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016-9-26 14:43 | 最終変更
arashi1977  長老 居住地: 広島  投稿数: 1715
設問には以下の条件設定があります。
引用:
ただし、データベースの実行環境は日本語環境とし、日付書式は"RR-MM-DD"とします。
また、解説でも日付書式について以下のように言及されています。
引用:
設問では、日本語環境で日付書式が"RR-MM-DD"であるのに対し、"DD-MON-RR"の形式で日付リテラルが指定されていますので、暗黙的なデータ変換が行われません。
私の環境作成がおかしい可能性は否定できませんが、設問にある通り日本語環境で実行すると以下のように解説にあるとおりのエラーになります。
# sqlplus pingt/oracle

SQL*Plus: Release 11.2.0.2.0 Production on 月 9月 26 14:39:16 2016

Copyright (c) 1982, 2011, Oracle.  All rights reserved.



Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
に接続されました。
SQL> SELECT employee_id, employee_name, hiredate FROM employees WHERE hiredate >= '30-APR-10';
SELECT employee_id, employee_name, hiredate FROM employees WHERE hiredate >= '30-APR-10'
                                                                             *
行1でエラーが発生しました。:
ORA-01858: 数値を指定する箇所に数値以外の文字が指定されています
念のためNLS_LANGを変更して英語環境でsqlplusを起動して実行すると、エラーにならず結果が出力されますね。
# NLS_LANG=AMERICAN_AMERICA sqlplus pingt/oracle

SQL*Plus: Release 11.2.0.2.0 Production on Mon Sep 26 14:41:15 2016

Copyright (c) 1982, 2011, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

SQL> SELECT employee_id, employee_name, hiredate FROM employees WHERE hiredate >= '30-APR-10';

EMPLOYEE_ID EMPLOYEE_NAME   HIREDATE
----------- --------------- ---------
       1013 ????	    01-APR-11
       1017 ????	    01-APR-12
       1018 ??? 	    01-APR-12
       1019 ????	    01-APR-12
       1020 ????	    01-APR-12
       1021 ??? 	    01-APR-12
       1022 ??? 	    01-APR-12

7 rows selected.
qtaro3 さんの実行環境ではどうでしたか?
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2016-9-27 7:26
qtaro3  半人前 居住地: 神奈川県  投稿数: 8
ご回答ありがとうございます。

SQL Developer で実行しました。

1021 高田明 1004 1001 12-04-01 200000 1
1022 坂本真 1004 1001 12-04-01 200000 1
1023 坂本真 1004 1021 13-04-22 200000 2


ALTER SESSION SET NLS_DATE_LANGUAGE='ENGLISH';
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MM-RR';
SELECT employee_id, employee_name, hiredate FROM employees WHERE hiredate >= '30-APR-10';

Sessionが変更されました。


Sessionが変更されました。

EMPLOYEE_ID EMPLOYEE_N HIREDATE
----------- ---------- --------
1021 高田明 01-04-12
1022 坂本真 01-04-12
1023 坂本真 22-04-13
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016-9-28 19:29
arashi1977  長老 居住地: 広島  投稿数: 1715
念のため確認なのですが
引用:
ALTER SESSION SET NLS_DATE_LANGUAGE='ENGLISH';
これはどういう意図で実行したものですか?
設問のどこと関連するALTER文なのでしょうか?
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2016-9-29 0:08
qtaro3  半人前 居住地: 神奈川県  投稿数: 8
ALTER SESSION SET NLS_DATE_LANGUAGE='ENGLISH';
を実行しない時は、エラーが発生します。
ORA-01858: 数値を指定する箇所に数値以外の文字が指定されています
01858. 00000 - "a non-numeric character was found where a numeric was expected"
*Cause: The input data to be converted using a date format model was
incorrect. The input data did not contain a number where a number was
required by the format model.
*Action: Fix the input data or the date format model to make sure the
elements match in number and type. Then retry the operation.
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016-9-29 9:44
arashi1977  長老 居住地: 広島  投稿数: 1715
引用:
ALTER SESSION SET NLS_DATE_LANGUAGE='ENGLISH';
を実行しない時は、エラーが発生します。
私の環境やご質問の問題と同じ結果になるとのことで、安心しました
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016-10-1 19:18
qtaro3  半人前 居住地: 神奈川県  投稿数: 8
arashi1977さん
ありがとうございました。

  >フォーラム検索へ


Copyright (c) 2020 Ping-t All rights reserved.
ログイン
ユーザ名 or E-Mailアドレス:

パスワード:







Contact

LPI-Japan Logo

LPI Logo