簡體   English   中英

無論我在表中插入什么數據,日期都保持在 2022 年 1 月 3 日相同。 我怎樣才能解決這個問題?

[英]No matter what data I insert into my table, the date stays the same at 03.01.2022. How can I fix this?

我創建了一個原始表,可以在其中存儲日期、時間、患者 ID 和員工 ID。

CREATE TABLE Squedule (
id INTEGER,
datee DATE NOT NULL,
timee CHAR(5),
patientId CHAR(10),
employeeId CHAR(10),
CONSTRAINT squedule_pk PRIMARY KEY (kennzahl),
CONSTRAINT squedule_fkSprstdh FOREIGN KEY (employeeId) REFERENCES Sprechstdhilfe,
CONSTRAINT squedule_fkPatientIn FOREIGN KEY (patientId) REFERENCES PatientIn);

------------------I insert the data like so
INSERT INTO squedule(datee,timee,patientid,employeeid) VALUES('02.02.3000','16:43',8137770103,3146213220);

------------------This is the trigger for the id
CREATE TRIGGER newSquedule BEFORE INSERT ON Squedule
FOR EACH ROW
    BEGIN
        SELECT auto_increment_pk.NEXTVAL
        INTO :new.id
        FROM dual;
    END;

這工作得很好,直到我注意到無論我嘗試為 datee 值插入什么數據,每次插入的表中總是以“03.01.2022”結束。
我刪除了所有表並再次創建了幾次,因為創建了一些 system_sequences,我猜是因為我在另一個表中使用了一個身份。 但是他們並沒有因為刪除每一個表而被刪除。 也許其中一個正在觸發某些事情。 我能做些什么來解決這個問題? 我一無所知...

我無法重現你所說的。

我從表中刪除了外鍵(因為我不想創建您引用的表)。

SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'dd.mm.yyyy hh24:mi:ss';

Session altered.

SQL> CREATE SEQUENCE auto_increment_pk;

Sequence created.

SQL> CREATE TABLE squedule
  2  (
  3     id           INTEGER,
  4     datee        DATE NOT NULL,
  5     timee        CHAR (5),
  6     patientid    CHAR (10),
  7     employeeid   CHAR (10),
  8     CONSTRAINT squedule_pk PRIMARY KEY (id)
  9  );

Table created.

SQL> CREATE OR REPLACE TRIGGER newsquedule
  2     BEFORE INSERT
  3     ON squedule
  4     FOR EACH ROW
  5  BEGIN
  6     :new.id := auto_increment_pk.NEXTVAL;
  7  END;
  8  /

Trigger created.

插入:

SQL> INSERT INTO squedule (datee,
  2                        timee,
  3                        patientid,
  4                        employeeid)
  5       VALUES ('02.02.3000',
  6               '16:43',
  7               8137770103,
  8               3146213220);

1 row created.

但是,按照你的說法,我可以在timee列中插入任何內容,包括這樣的垃圾:

SQL> INSERT INTO squedule (datee,
  2                        timee,
  3                        patientid,
  4                        employeeid)
  5       VALUES ('25.02.3000',
  6               'xy:83',
  7               8137770103,
  8               3146213220);

1 row created.

結果:

SQL> SELECT * FROM squedule;

        ID DATEE               TIMEE PATIENTID  EMPLOYEEID
---------- ------------------- ----- ---------- ----------
         1 02.02.3000 00:00:00 16:43 8137770103 3146213220 --> 02.02.3000, not 03.01.2022
         2 25.02.3000 00:00:00 xy:83 8137770103 3146213220 --> invalid time value
                               
SQL>

我建議你放棄你正在做的事情,只使用數據類型為DATE的一列 - 在 Oracle 中 - 它包含日期和時間組件。 像這樣的東西:

SQL> DROP TABLE squedule;

Table dropped.

SQL> CREATE TABLE squedule
  2  (
  3     id           INTEGER,
  4     datee        DATE NOT NULL,
  5     patientid    CHAR (10),
  6     employeeid   CHAR (10),
  7     CONSTRAINT squedule_pk PRIMARY KEY (id)
  8  );

Table created.

SQL> CREATE OR REPLACE TRIGGER newsquedule
  2     BEFORE INSERT
  3     ON squedule
  4     FOR EACH ROW
  5  BEGIN
  6     :new.id := auto_increment_pk.NEXTVAL;
  7  END;
  8  /

Trigger created.

插入:

SQL> INSERT INTO squedule (datee, patientid, employeeid)
  2          VALUES (TO_DATE ('02.02.3000 14:43', 'dd.mm.yyyy hh24:mi'),
  3                  8137770103,
  4                  3146213220);

1 row created.

SQL> SELECT * FROM squedule;

        ID DATEE               PATIENTID  EMPLOYEEID
---------- ------------------- ---------- ----------
         3 02.02.3000 14:43:00 8137770103 3146213220

SQL>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM