• 締切済み

PL/SQLにて勤務時間の計算

PL/SQLを用いて、勤務時間の計算を行うプログラムを作成中です。(DBがoracle11g) 単純に退勤時刻から出勤時刻を引いて求めたいのですが、 実行時にエラーとなってしまいうまくいきません。 (当方勉強始めたばかりで、エラーが出ても何がだめなのか分かっていない状況です。) 以下に実際コーディング中のソースを載せますので、どなたか教えていただけませんでしょうか? よろしくお願い致します。 ↓以下ソースです。(end_date、start_dateがパラメータでそれぞれchar(04)で定義しています。) --------------------------------------------------- --*変数定義 wk_time char(04) := '0000'; wk_time_h char(02) := '00'; wk_time_m char(02) := '00'; sys_date char(08) := '00000000'; BEGIN wk_time := to_date(end_date,'hh24mi') - to_date(start_date,'hh24mi'); wk_time_h := substr(wk_time,1,2); wk_time_m := substr(wk_time,3,2); if substr(wk_time,3,2) >= '30' then wk_time_m := '30'; else wk_time_m := '00'; end if; ---------------------------------------------------------- 実行すると、 ORA-06502: PL/SQL: 数値または値のエラー: 文字列バッファが小さすぎます。が発生しました と表示されました。

みんなの回答

  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.3

こんにちわ。 > 実行時にエラーとなってしまいうまくいきません。 DATE 型は内部で7Byte の数値型データです。 ※ 小数点から上で日からの経過日数, 小数点以下は   本日00:00 からの経過秒です。   なので、date1 + 7 (翌週) やdate1 - 1/12 (2時間前) といった   演算ができます。   なので、DATE 型データ同士の減算を行うと結果は数値 (Number型)   となります。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

>hh24miにしているので、例えば9時なら >0900になると思っているので、char(04)にしました。 "to_date(end_date,'hh24mi')"というのは end_dateの文字列は"hh24mi"(時2桁分2桁の24時間表記)として、 それをdate型に変換するという意味です。 date型なので当然char(04)型ではありません。 SQL文を実行してみるなど確認方法はあるでしょうに・・・

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

>wk_time := to_date(end_date,'hh24mi') - to_date(start_date,'hh24mi'); date型からdate型を引いた値の型は、char(04)になるんですか?

moonlight2455
質問者

補足

つまり、char(04)では足らないということでしょうか? よく分かっていなくてすいません。 hh24miにしているので、例えば9時なら 0900になると思っているので、char(04)にしました。

関連するQ&A