問題ID: 8043
- フォーラムは新サイトへ移行しました。
- このフォーラムではゲスト投稿が禁止されています
問題ID: 8043
msg# 1
qtaro3
居住地: 神奈川県
投稿数: 8
『正常に実行されるがデータは1件も表示されない。』
が正解ではないでしょうか?
※'30-APR-10'は'RR-MM-DD'と'DD-MM-RR'の両方で有効だと思います。
が正解ではないでしょうか?
※'30-APR-10'は'RR-MM-DD'と'DD-MM-RR'の両方で有効だと思います。
Re: 問題ID: 8043
msg# 1.1
arashi1977
居住地: 広島
投稿数: 1715
設問には以下の条件設定があります。
引用:また、解説でも日付書式について以下のように言及されています。
引用:私の環境作成がおかしい可能性は否定できませんが、設問にある通り日本語環境で実行すると以下のように解説にあるとおりのエラーになります。
念のためNLS_LANGを変更して英語環境でsqlplusを起動して実行すると、エラーにならず結果が出力されますね。
qtaro3 さんの実行環境ではどうでしたか?
引用:
ただし、データベースの実行環境は日本語環境とし、日付書式は"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=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.
Re: 問題ID: 8043
msg# 1.2
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
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
Re: 問題ID: 8043
msg# 1.2.1
arashi1977
居住地: 広島
投稿数: 1715
念のため確認なのですが
引用:これはどういう意図で実行したものですか?
設問のどこと関連するALTER文なのでしょうか?
引用:
ALTER SESSION SET NLS_DATE_LANGUAGE='ENGLISH';
設問のどこと関連するALTER文なのでしょうか?
Re: 問題ID: 8043
msg# 1.3
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.
を実行しない時は、エラーが発生します。
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.
Re: 問題ID: 8043
msg# 1.3.1
arashi1977
居住地: 広島
投稿数: 1715
引用:私の環境やご質問の問題と同じ結果になるとのことで、安心しました
ALTER SESSION SET NLS_DATE_LANGUAGE='ENGLISH';
を実行しない時は、エラーが発生します。
Re: 問題ID: 8043
msg# 1.4
qtaro3
居住地: 神奈川県
投稿数: 8
arashi1977さん
ありがとうございました。
ありがとうございました。