0

触发器将如何在两个时间之间插入?插入时出现条件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 回答
0

if 条件中的问题.. 现在它工作正常.. 谢谢大家。

创建或替换触发器 TRI_INSERT

  after insert on stud_details  

  referencing old as old new as new

  for each row

宣布

    strTime varchar2(20) := :new.time_stamp;   -- (eg: '02/08/2013 11:09:42 PM')
    strFromTime varchar2(20):= '22:00:00'
    strToTime varchar2(20):= '23:59:59'

开始

    if ((to_char(strTime, 'hh24:mi:ss') > strFromTime) and (to_char(strTime,           
         'hh24:mi:ss') < strToTime)) 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;

结束 TRI_INSERT;

于 2013-02-23T07:24:08.873 回答