アプリ版:「スタンプのみでお礼する」機能のリリースについて

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: 数値または値のエラー: 文字列バッファが小さすぎます。が発生しました

と表示されました。

A 回答 (3件)

こんにちわ。



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

>hh24miにしているので、例えば9時なら


>0900になると思っているので、char(04)にしました。

"to_date(end_date,'hh24mi')"というのは
end_dateの文字列は"hh24mi"(時2桁分2桁の24時間表記)として、
それをdate型に変換するという意味です。
date型なので当然char(04)型ではありません。

SQL文を実行してみるなど確認方法はあるでしょうに・・・
    • good
    • 0

>wk_time := to_date(end_date,'hh24mi') - to_date(start_date,'hh24mi');



date型からdate型を引いた値の型は、char(04)になるんですか?

この回答への補足

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

補足日時:2012/04/01 14:06
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す