powerpan
Goto Top

Fehler Beim Erstellen eines Triggers

Hallo

ich möchte auf einer Oracle Datenbank einen Trigger erstellen

Die Sequence habe ich schon erstellt Sie heisst SEQUENCE1

Um den Trigger anzulegen benutzte ich/ will ich benutzen:


CREATE OR REPLACE TRIGGER TRIGGER_MLCD_COREDATA
BEFORE INSERT 
ON MLCD_COREDATA 
REFERENCING NEW AS New OLD AS Old 
FOR EACH ROW 
BEGIN 

  SELECT SEQUENCE1.NEXTVAL 
    INTO :NEW.RECID 
    FROM DUAL; 

END; 
/ 

Der code von SEQUENCE1

SEQUENCE1  
MINVALUE 1 
MAXVALUE 9999999999999999999999999999 
INCREMENT BY 1 
START WITH 1 
CACHE 20 
NOORDER  NOCYCLE ;

wenn ich nun den Trigger erstelln will kommt folgender Fehler:

Error report:
ORA-06552: PL/SQL: Compilation unit analysis terminated
ORA-06553: PLS-320: the declaration of the type of this expression is incomplete or malformed
06552. 00000 -  "PL/SQL: %s"  
*Cause:    
*Action:

Kann mir da jemand helfen?

Content-Key: 80024

Url: https://administrator.de/contentid/80024

Ausgedruckt am: 29.03.2024 um 08:03 Uhr

Mitglied: 27234
27234 06.02.2008 um 10:04:57 Uhr
Goto Top
Hallo,

versuch es mal so:

CREATE OR REPLACE TRIGGER TRIGGER_MLCD_COREDATA
BEFORE INSERT ON MLCD_COREDATA
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW

declare
v_RECID MLCD_COREDATA.RECID%TYPE;

BEGIN

SELECT SEQUENCE1.NEXTVAL
INTO v_RECID
FROM DUAL;
:NEW.RECID := v_RECID;

END;
/


Gruß - René
Mitglied: PowerPan
PowerPan 06.02.2008 um 10:18:46 Uhr
Goto Top
hi es kommt nun wieder als Fehler:

Error starting at line 1 in command:
CREATE OR REPLACE TRIGGER TRIGGER_MLCD_COREDATA
BEFORE INSERT ON MLCD_COREDATA 
REFERENCING NEW AS New OLD AS Old 
FOR EACH ROW 

declare
v_RECID MLCD_COREDATA.RECID%TYPE;

BEGIN 

SELECT SEQUENCE1.NEXTVAL 
INTO v_RECID
FROM DUAL; 
:NEW.RECID := v_RECID;

END; 
Error report:
ORA-06552: PL/SQL: Compilation unit analysis terminated
ORA-06553: PLS-320: the declaration of the type of this expression is incomplete or malformed
06552. 00000 -  "PL/SQL: %s"  
*Cause:    
*Action:
Mitglied: 27234
27234 06.02.2008 um 15:27:24 Uhr
Goto Top
Hallo,

also bei mir funktioniert das.
Poste mal bitte die Tabellendefinition (wenigstens den Datentyp von "RECID") und die Oracle-Version.

Gruß - René
Mitglied: PowerPan
PowerPan 06.02.2008 um 15:54:58 Uhr
Goto Top
Oracle 10.2

RECID ist vom TYP Number
Mitglied: 27234
27234 07.02.2008 um 09:24:10 Uhr
Goto Top
Hallo,

also bei mir funktioniert alles perfekt, sowohl in 9i als auch in 10g.
Noch mal nachgefragt, was ist das für eine Tabelle?
Mach mal ein "DESC MLCD_COREDATA" und poste das Ergebnis.

Das "REFERENCING NEW AS New OLD AS Old" im Trigger brauchst Du nicht angeben, es sei denn eine Spalte in der Tabelle hast Du "NEW" oder "OLD" benannt.

Gruß - René
Mitglied: PowerPan
PowerPan 08.02.2008 um 14:07:50 Uhr
Goto Top
Hi habe das Problem gefunden ich hatte eine Spalte mit dem Namen "Date" welches ein Reserviertes Word ist das war as Problem
Mitglied: Biber
Biber 08.02.2008 um 15:43:15 Uhr
Goto Top
Moin Powerpan,

das verstehe ich nur begrenzt.
In dem von Dir geposteten CREATE-TRIGGER-Statement wird doch außer dem Feld RECID kein anderes Feld angesprochen - somit auch kein Feld namens "DATE"?

Soll Deine Fehleranalyse jetzt bedeuten, dass ich in Oracle zwar Tabellen mit Spaltenname "RESEVIERTESWORT" anlegen kann, dann aber die DB krachen geht, sobald ich darauf einen Trigger definiere?

Und das oben gepostete, nicht funktionierende Statement lässt sich jetzt kompilieren, seit Du ein Feld "DATE" in einer Tabelle auf "DATUM" umbenannt hast???

So abgedreht kam mir Oracle bisher gar nicht vor...

Ratlos
Biber
Mitglied: PowerPan
PowerPan 08.02.2008 um 15:45:51 Uhr
Goto Top
also unser dba war draufgekommen der war beim ertsllen leider krank als ich den Beitrag schrieb

Oracle tut wohl beim anlgen die ganze Tabelle begutachten das is das halt aufgetreten obwohl der Spalten name in " " gesetzt war naja was solls habe as geändert und jetzt geht es