質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

2659閲覧

oracle SQL 年齢判定

sinzuku123321

総合スコア3

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2022/07/27 12:13

編集2022/07/28 03:08

PL/SQL文を使用して、年齢を判定するファンクションを作成しています。
empテーブルの「生年月日」カラムをもとに、employeeの年齢を判定することを目指しています。下記のファンクションを作成することはできましたが、実行時にエラーが起こります。

SQL

1CREATE OR REPLACE FUNCTION AGE 2(v_date in date 3) 4RETURN number 5is 6age number(20) ; 7begin 8SELECT 9TRUNC(( TO_CHAR(SYSDATE, 'YYYYMMDD') - TO_CHAR(TO_DATE(v_date, 'YYYY/MM/DD'), 'YYYYMMDD'))/10000) 10into age 11from emp; 12return age; 13end; 14/ 15

SQL

1select AGE(生年月日) 2from emp;

error

1: ORA-01830: 日付書式の変換で不要なデータが含まれています 2ORA-06512: AGE, 行8 3

=======================
以下、SQLの実行モードの変更により解決しました。

下記のコードを実行しようとすると、下記のエラーメッセージが表示されます。該当するエラーメッセージを調べても原因がわかりませんでしたので、質問いたします。

error

1SQL : ORA-24344: success with compilation error

SQL

1CREATE OR REPLACE FUNCTION AGE RETURN number 2is 3age number(3) as 年齢; 4begin 5SELECT 6TRUNC((TO_CHAR(TO_DATE(sysdate, 'YYYY/MM/DD'), 'YYYYMMDD') - TO_CHAR(TO_DATE(生年月日, 'YYYY/MM/DD'), 'YYYYMMDD'))/10000) 7into 年齢 8from emp; 9return age; 10end; 11

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2022/07/27 15:45

> 該当するエラーメッセージを調べても原因がわかりませんでした 一体、どんな調べ方したんですか?
sinzuku123321

2022/07/28 03:01

こちらのエラーは解決しました。
guest

回答2

0

ベストアンサー

ORA-01830: 日付書式の変換で不要なデータが含まれています

メッセージの通りです。
日付を変換しようとして変換できないデータが存在している事を示唆しています。
日付の変換している所は以下だけですので、ここに問題があります。

SQL

1TRUNC(( TO_CHAR(SYSDATE, 'YYYYMMDD') - TO_CHAR(TO_DATE(v_date, 'YYYY/MM/DD'), 'YYYYMMDD'))/10000)

先ず式として成り立っていないところがあります。
TO_CHAR()してるんですから、文字列から文字列を引くという演算は普通成り立ちません。
但し、日付書式の文字列なので暗黙変換しようとしているのでしょうが、'YYYYMMDD'は単なる8桁の文字で日付書式ではありませんから、エラーになっている訳です。
学習しているのであれば、ご自身で答えを見つけた方が良いですね。

投稿2022/07/28 04:16

sazi

総合スコア25184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sinzuku123321

2022/07/28 13:32

上記、日付算出式に間違いがあることがわかりました。ありがとうございます。
guest

0

ORA-24344 の意味は、ストアドプロシジャ(ファンクション)は作成されたけど、コンパイルエラーがあるよってことです。
PL/SQL の文法を勉強してください。

年齢計算については、以下を参照ください。
「年齢を計算する(暦年齢)」
https://www.shift-the-oracle.com/sql/functions/years_of_age.html

投稿2022/07/27 12:32

KOZ6.0

総合スコア2626

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問