1

Oracle プロシージャを作成しましたが、Oracle SQL エディタで動作しています。
Crystal レポートで手順を使用したい。
データベース エキスパートから手順を選択すると、次のエラー メッセージが表示されます。

============================
クエリ エンジン エラー: 'ADO エラー コード: 0x
ソース: OraOLEDB
説明: ORA-01850: 時間 0から
23の 間である必要があり ます========== 変数を次のように宣言します。 ============================= str INT; inv_date DATE; ============================== 手順はこちら ================ ============== 手順 PROC_YEARLYACTIVELIST2(in_year IN VARCHAR) を ctr INT として作成または置換します。 strINT; curr_rowid VARCHAR2(50); inv_date DATE;




















BEGIN

DELETE FROM TBLACTIVELISTYEARLY2;
ctr := 1;
FOR ctr IN 1..12
LOOP

IF ctr = 1 THEN
str := '01';
inv_date := to_date('31-01-' || in_year || ' 23:59:59', 'DD-MM-YYYY HH24:MI:SS');
END IF;
終わり;
/
==============================

私は長い間この問題を解決しようとしてきましたが、まだ解決策を見つけることができません。
あなたが私を助けてくれることを願っています。

ありがとう!:)

-ミシェル(実務研修生)

4

3 に答える 3

2

1 つの可能性は、in_year が Crystal によって渡されていないか、NULL として渡されていることです。

これを確認してください。このコードを簡単なチェックとして追加できます。

  if (trim(in_year) is null) or length(in_year != 4))
  then
    raise_application_error(-20000, 'year is invalid: '  || in_year);
  end if;
 inv_date := to_date('31-01-' || in_year || ' 23:59:59', 'DD-MM-YYYY HH24:MI:SS');

それはどんなエラーをスローしますか?

年がnullであるかのように、次のエラーが発生します。

SQL> declare
  2    inv_date DATE;
  3     in_year varchar2(42) ;
  4  begin
  5   inv_date := to_date('31-01-' || in_year || ' 23:59:59', 'DD-MM-YYYY HH24:MI:SS');
  6  end;
  7  /
declare
*
ERROR at line 1:
ORA-01850: hour must be between 0 and 23
ORA-06512: at line 5
于 2013-02-08T13:34:09.820 に答える
1

データベースの nls 時間設定を確認してください。Crystal Reports の設定とは違うと思います。

nls 設定を変更する必要がある場合は、このクエリを使用してください -- alter session set nls_date_format ='your date format here';

于 2013-02-10T15:47:54.850 に答える
1

機能は有効で動作します。書式マスクの年と時間の間に不要なダッシュがあります。Oracle はそれを無視できるはずですが、Crystal はおそらく無視できません。照会から除外するだけでも、クリーンアップする価値は確かにあります。

そうでない場合、他に考えられるのは の値だけですin_year。それをトレースファイルに書き込んで、それが何であるかを確認できますか?

別の方法として、同じ日時を取得するためのより複雑ですが、おそらくあまり不安定ではない方法を次に示します。

last_day(trunc(to_date( in_year, 'YYYY') , 'YYYY') ) + (86399/86400)

                          ^  first day of current month
          ^ first day of current year
 ^ last day of month
                                                        ^ last second of the day  
于 2013-02-08T09:36:13.273 に答える