CREATE TABLE deligate_details_main (
e_id NUMBER(10),completed_date timestamp,
CONSTRAINT pk_deligate_details_main PRIMARY KEY ( e_id )
);
INSERT INTO deligate_details_main VALUES(1,current_timestamp);
INSERT INTO deligate_details_main VALUES(2,current_timestamp);
INSERT INTO deligate_details_main VALUES(3,current_timestamp);
CREATE SEQUENCE deligate_details_trans_sq;
CREATE TABLE deligate_details_trans (
d_id NUMBER(10),
e_id NUMBER(10),
completed_date_trans date,
CONSTRAINT pk_deligate_details_trans PRIMARY KEY ( d_id ),
CONSTRAINT fk_e_id FOREIGN KEY ( e_id )
REFERENCES deligate_details_main ( e_id )
);
insert into deligate_details_trans(d_id,e_id,completed_date_trans)
select deligate_details_trans_sq.nextval,
e_id,
to_date(completed_date,'DD-MON-YY') from deligate_details_main;
我面臨的問題:
我需要將時間戳轉換為日期,然后將其插入到 deligate_details_trans 的 deligate_details_main 表的 Completed_date 列中。當我轉換時,它給出 ORA-01843: not a valid month 錯誤。
目前, deligate_details_main 有 3 行將被插入到 deligate_details_trans 表中,但如果有任何行被插入到 deligate_details_main 表中,則說 e_id 4 在插入 deligate_details_trans 表后插入。然后當我運行 INSERT 查詢時,它應該將 e_id 4 附加到 deligate_details_trans 表中
如果 deligate_details_main 表中有 3 條記錄,則預期輸出:
------ ------ ----------------------
| D_ID | E_ID | completed_date_trans |
------ ------ ----------------------
| 1 | 1 | 13-Dec-21 |
| 2 | 2 | 13-Dec-21 |
| 3 | 3 | 13-Dec-21 |
------ ------ ----------------------
當另外一個 e_id 被添加到 deligate_details_main 表中時
INSERT INTO deligate_details_main VALUES(4,current_timestamp);
那么輸出應該是:
------ ------ ----------------------
| D_ID | E_ID | completed_date_trans |
------ ------ ----------------------
| 1 | 1 | 13-Dec-21 |
| 2 | 2 | 13-Dec-21 |
| 3 | 3 | 13-Dec-21 |
| 4 | 4 | 13-Dec-21 |
------ ------ ----------------------
uj5u.com熱心網友回復:
我會說,你所需要的只是TRUNC開啟completed_date。
SQL> INSERT INTO deligate_details_trans (d_id, e_id, completed_date_trans)
2 SELECT deligate_details_trans_sq.NEXTVAL, e_id, TRUNC (completed_date)
3 FROM deligate_details_main;
3 rows created.
SQL> alter session set nls_date_format = 'dd.mm.yyyy';
Session altered.
SQL> SELECT * FROM deligate_details_trans;
D_ID E_ID COMPLETED_
---------- ---------- ----------
4 1 13.12.2021
5 2 13.12.2021
6 3 13.12.2021
SQL>
要插入deligate_details_trans 自動,您需要一個資料庫觸發器:
SQL> CREATE OR REPLACE TRIGGER trg_ai_ddm
2 AFTER INSERT
3 ON deligate_details_main
4 FOR EACH ROW
5 BEGIN
6 INSERT INTO deligate_details_trans (d_id, e_id, completed_date_trans)
7 VALUES (deligate_details_trans_sq.NEXTVAL,
8 :new.e_id,
9 TRUNC (:new.completed_date));
10 END trg_ai_ddm;
11 /
Trigger created.
讓我們測驗一下:
SQL> INSERT INTO deligate_details_main VALUES(4,current_timestamp);
1 row created.
SQL> SELECT * FROM deligate_details_trans;
D_ID E_ID COMPLETED_
---------- ---------- ----------
4 1 13.12.2021
5 2 13.12.2021
6 3 13.12.2021
7 4 13.12.2021 --> here it is!
SQL>
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/380036.html
