1
undefine dates

declare
  v_dateInput VARCHAR(10);
  v_dates DATE;
begin
  v_dateInput := &&dates;
  v_dates := to_date(v_dateInput,'dd-mm-yyyy');
  DBMS_OUTPUT.put_line(v_dates);
end;

たとえば、03-03-1990 の入力でこのコードを実行するたびに、このエラーが表示される理由がわかりません。

Error report:
ORA-01847: day of month must be between 1 and last day of month
ORA-06512: at line 6
01847. 00000 -  "day of month must be between 1 and last day of month"
*Cause:    
*Action:
4

2 に答える 2

12

はぁ、いいやつ。これは、 && が変数をその場で置き換えるため、スクリプトは次のようになります。

declare
  v_dateInput VARCHAR(10);
  v_dates DATE;
begin
  v_dateInput := 03-03-1990;
  v_dates := to_date(v_dateInput,'dd-mm-yyyy');
  DBMS_OUTPUT.put_line(v_dates);
end;

引用符がないことに注意してください。オラクルは 03 - 03 - 1990 の数値を計算するため、v_dateInput は実質的に「-1990」です。もちろん、これは指定された書式文字列では機能しません。

それを修正するには、必要です

v_dateInput := '&&dates';
于 2010-03-25T12:10:17.810 に答える
1

日付の値を入力するように求められたら、必ず一重引用符で囲んでください。

Enter value for dates: '03-03-1990'

共有してお楽しみください。

于 2010-03-25T12:19:45.297 に答える