1

テーブル構造は

Name          Null Type         
------------- ---- ------------ 
T_NO               NUMBER       
T_NAME             VARCHAR2(10) 
ENTERING_TIME      TIMESTAMP(6) 
LEAVING_TIME       TIMESTAMP(6) 
TO_DATE            DATE  

引き金

create or replace trigger t4
before insert
on t4
for each row
declare
d_entering_time timestamp(6):=to_char('09:00:00AM','HH12:MM:SSAM');
begin
if (:new.entering_time <= d_entering_time)  then
raise_application_error
(-20002,'Date of joining cannot be after system date.');
end if;
end;

そして私の挿入クエリ

insert INTO t3 (entering_time) values ( TO_date('8:31:51AM','HH:MI:SSAM'))

次のエラーが表示されます。

SQL Error: ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at "SYSTEM.T3", line 2
ORA-04088: error during execution of trigger 'SYSTEM.T3'
06502. 00000 -  "PL/SQL: numeric or value error%s"
*Cause:    
*Action:

エラーが発生した場所を教えてもらえますか?

4

2 に答える 2

1

コードにいくつかのエラーがあるようです。

  • 文字列リテラルをタイムスタンプ変数に格納しようとしています。

d_entering_time timestamp(6):=to_char('09:00:00AM','HH12:MM:SSAM');

  • HH12:MI:SSAMではなくHH12:MM:SSAMMI分でありMM、月です。

このように試すことができます。

    CREATE OR REPLACE TRIGGER t4 
    BEFORE INSERT ON t3 FOR EACH ROW 
    DECLARE 
         d_entering_time TIMESTAMP :=to_timestamp('09:00:00AM','HH12:MI:SSAM.FF');
    BEGIN
         IF (:NEW.entering_time <= d_entering_time) THEN
              raise_application_error (-20002,'Date of joining cannot be after system date.');
         END IF;
    END;

クエリを挿入、

   INSERT INTO t3 (entering_time) VALUES ( to_timestamp('8:31:51AM','HH:MI:SSAM.FF'));
于 2013-09-24T08:42:15.347 に答える