我試圖在oracle數據庫的觸發器的where子句中使用SYSDATE,但代碼引發「ORA-01722:invalid number」異常。oracle sysdate在where子句中
SELECT 'ATT' || '-' || TO_CHAR(SYSDATE, 'YY') || '-'
|| LPAD((SELECT TO_NUMBER(COUNT(*))
FROM ATT_REQUEST_DATA
WHERE REQID like ('ATT-' + TO_CHAR(SYSDATE, 'YY') + '-%')) + 1, '4', '0')
你知道,我應該怎麼修復呢?
這裏是表的定義
CREATE TABLE ATT_REQUEST_DATA
(REQID VARCHAR2(50),
REQ_SUBID NUMBER,
FLAG_ID NUMBER,
DATE_FROM DATE,
DATE_TO DATE,
CREATED_DATE DATE,
CONSTRAINT ATT_REQUEST_DATA_PK PRIMARY KEY (REQID, REQ_SUBID)
);
/
這裏是插入數據
INSERT INTO ATT_REQUEST_DATA (FLAG_ID, DATE_FROM, DATE_TO, CREATED_DATE)
VALUES (2, SYSDATE, SYSDATE, SYSDATE);
和這裏的一個例子是誤差輸出
ORA-01722:無效號碼
ORA-06512:在 「PD.ATT_REQUEST_DATA_TRG_ID」,第4行
ORA-04088:觸發的執行期間錯誤 'PD.ATT_REQUEST_DATA_TRG_ID'
這裏是整個觸發
CREATE OR REPLACE TRIGGER ATT_REQUEST_DATA_TRG_ID
BEFORE INSERT ON ATT_REQUEST_DATA FOR EACH ROW
BEGIN
IF (:NEW.REQID IS NULL) THEN
SELECT 'ATT' || '-' || TO_CHAR(SYSDATE, 'YY') || '-' || LPAD((SELECT TO_NUMBER(COUNT(*)) FROM ATT_REQUEST_DATA WHERE REQID like ('ATT-' + TO_CHAR(SYSDATE, 'YY') + '-%')) + 1, '4', '0')
INTO :NEW.REQID
FROM DUAL;
SELECT (SELECT COUNT(*) FROM ATT_REQUEST_DATA WHERE REQID = :NEW.REQID) + 1
INTO :NEW.REQ_SUBID
FROM DUAL;
END IF;
END;
/
請添加'ATT_REQUEST_DATA'表的結構,一些樣本數據和期望的輸出。您不需要爲'COUNT(*)'使用'TO_NUMBER'。 'COUNT'已經給你一個NUMBER。 –
請加上它。不要添加評論。還要添加一些你想要的樣本數據和輸出 –
你觸發器中的代碼與你發佈的原始SQL不匹配 – APC