I tried to use SYSDATE in where clause in my trigger in oracle database but the code throw "ORA-01722: invalid number" exception.
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')
Do you know, how should I repair it?
here is definition of table
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)
);
/
here is an example of inserted data
INSERT INTO ATT_REQUEST_DATA (FLAG_ID, DATE_FROM, DATE_TO, CREATED_DATE)
VALUES (2, SYSDATE, SYSDATE, SYSDATE);
and here is the error output
ORA-01722: invalid number
ORA-06512: at "PD.ATT_REQUEST_DATA_TRG_ID", line 4
ORA-04088: error during execution of trigger 'PD.ATT_REQUEST_DATA_TRG_ID'
And here is whole trigger
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
table, some sample data and expected output. You don't need to useTO_NUMBER
forCOUNT(*)
.COUNT
already gives you a NUMBER. - Keyur Panchal