-1

ストアドプロシージャ内で次のステートメントを実行しようとしています

execute immediate 'insert into tmp_vw(TMP_SRC, SNAP_DATE) 
                   select TMP_SRC,Max(SNAP_DATE) as SNAP_DATE 
                   from tmp_demand group by TMP_SRC'

ORA-01861: リテラルがフォーマット文字列と一致しません

SNAP_DATE は日付型で、値の形式は「2001-01-01」です。

4

1 に答える 1

1

TMP_DEMAND.SNAP_DATE を varchar2 として持つ必要があります。

例えば。

SQL> create table tmp_vw(TMP_SRC varchar2(20), SNAP_DATE date);

Table created.

SQL> create table tmp_demand(TMP_SRC varchar2(20), SNAP_DATE varchar2(20));

Table created.

SQL> alter session set nls_date_format ='yyyy-mm-dd';

Session altered.

SQL> insert into tmp_demand select 'a', sysdate from dual;

1 row created.

SQL> alter session set nls_date_format ='dd/mm/yyyy';

Session altered.

SQL> insert into tmp_vw(TMP_SRC, SNAP_DATE) select TMP_SRC,Max(SNAP_DATE) as SNAP_DATE from tmp_demand group by TMP_SRC;
insert into tmp_vw(TMP_SRC, SNAP_DATE) select TMP_SRC,Max(SNAP_DATE) as SNAP_DATE from tmp_demand group by TMP_SRC
                                                      *
ERROR at line 1:
ORA-01861: literal does not match format string

エラーを回避するには、一時テーブルも日付に変更する必要があります。

于 2013-01-08T15:31:57.430 に答える