0

トリガーは 2 つのタイミングの間にどのように挿入されますか? 挿入中に条件にcharacter to number conversionエラーが発生しました。if以下は私のトリガーです。

create or replace trigger TRI_INSERT
  after insert on stud_details  
  referencing old as old new as new
  for each row
declare
        strTime varchar2(20) := :new.time_stamp;   -- (eg: '02/08/2013 11:09:42 PM')
  begin
        if (to_char(strTime, 'hh24:mi:ss') between '22:00:00' and '23:59:59') then
             insert into stud_clas_details
              (id,
               v-id,
               w-id,
               al_id,
               time,
               Time_Stamp)
             values
               (seq_ve_id.nextval,
                :new.vehicle_id,
                 :new.way_id,
                 'xxxx',
                 strTime,
                 sysdate);
         end if;
 end TRI_INSERT;
4

3 に答える 3

1

to_char() 日付形式のvarchar2を使用して、機能することを期待することはできません。

代わりにあなたはするべきです

    if (to_char(:new.time_stamp, 'hh24:mi:ss') between '22:00:00' and '23:59:59') then

また、特定の形式で時間をテーブルに挿入する場合は、次を使用します。

to_char(:new.time_stamp, 'hh24:mi:ss')

と同じように

strTime varchar2(20) := :new.time_stamp;

そのセッションのデフォルトのNLS_DATE_FORMATに日付を挿入するだけです(セッションごとに異なる場合があります)。

于 2013-02-09T08:54:52.903 に答える
1

代わりに次を使用してはどうですか:

if extract(hour from :new.time_stamp) in (22,23) then ...
于 2013-02-10T18:08:22.337 に答える