Ich habe versucht, SYSDATE in where-Klausel in meinem Trigger in Oracle-Datenbank, sondern die Code-throw "ORA-01722: ungültige Nummer" Ausnahme.Oracle-Sysdate in Where-Klausel
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')
Wissen Sie, wie soll ich es reparieren?
hier Definition von Tabelle
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)
);
/
hier ein Beispiel für die eingefügten Daten
INSERT INTO ATT_REQUEST_DATA (FLAG_ID, DATE_FROM, DATE_TO, CREATED_DATE)
VALUES (2, SYSDATE, SYSDATE, SYSDATE);
ist, und hier ist der Fehlerausgang
ORA-01722: invalid Nummer
ORA-06512: bei "PD.ATT_REQUEST_DATA_TRG_ID", Zeile 4
ORA-04088: Fehler bei der Ausführung des Triggers 'PD.ATT_REQUEST_DATA_TRG_ID'
Und hier ist ganz Auslöser
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;
/
kombinieren. Bitte fügen Sie Struktur der 'ATT_REQUEST_DATA' Tabelle, einige Beispieldaten und erwartete Ausgabe. Sie müssen 'TO_NUMBER' nicht für' COUNT (*) 'verwenden. 'COUNT' gibt Ihnen bereits eine NUMMER. –
Fügen Sie es bitte Frage hinzu. Fügen Sie keine Kommentare hinzu. Fügen Sie auch einige Beispieldaten hinzu und geben Sie die gewünschte Ausgabe aus. –
Der Code in Ihrem Auslöser stimmt nicht mit dem von Ihnen geposteten Original-SQL überein. – APC