PLS-00049 SCHLECHT BIND-VARIABLEN
Ich versuche einen Auslöser erstellen, so dass, wenn die PL_Witness-Tabelle aktualisiert wird, macht es eine Aufzeichnung von diesem in die PLAUDWIT Tabelle, die ein auditing-Tabelle.
Jedoch, jedes mal, wenn ich versuchen, diese trigger, bekomme ich schlechte bind-variable, und ich bekomme das auf die anderen audit-Trigger, ich bin versucht, zu machen. Was ist mein Thema?
Alle Hilfe ist willkommen!
CREATE TABLE "PL_WITNESS"
( "WITNESS_ID" NUMBER(*,0) NOT NULL ENABLE,
"WITNESS_NAME" VARCHAR2(30) NOT NULL ENABLE,
"WITNESS_ADDRESS" VARCHAR2(100),
"FK1_WITNESS_TYPE_ID" NUMBER(*,0) NOT NULL ENABLE,
CONSTRAINT "PK_WITNESS" PRIMARY KEY ("WITNESS_ID") ENABLE
)
/
ALTER TABLE "PL_WITNESS" ADD CONSTRAINT "FK1_WITNESS_WTYPE" FOREIGN KEY ("FK1_WITNESS_TYPE_ID")
REFERENCES "PL_WITNESS_TYPE" ("WITNESS_TYPE_ID") ENABLE
/
.
DROP TABLE PLAUDWIT
CREATE TABLE PLAUDWIT (
AUD_AWitnessID NUMBER,
AUD_AWitnessType NUMBER,
AUDIT_USER varchar2(50),
AUDIT_DATE DATE,
AUDIT_ACTION varchar2(10));
.
CREATE OR REPLACE TRIGGER TRG_PLAUDWIT
AFTER INSERT OR DELETE OR UPDATE ON PL_WITNESS
FOR EACH ROW
DECLARE
v_trigger_task varchar2(10);
BEGIN
IF UPDATING
THEN
v_trigger_task := 'Update';
ELSIF DELETING
THEN
v_trigger_task := 'DELETE';
ELSIF INSERTING
THEN
v_trigger_task := 'INSERT';
ELSE
v_trigger_task := NULL;
END IF;
IF v_trigger_task IN ('DELETE','UPDATE') THEN
INSERT INTO PLAUDWIT (AWitnessID, AWitnessType, AUDIT_USER, AUDIT_DATE, AUDIT_ACTION)
VALUES
(:OLD.AWitnessID, :OLD.AWitnessType, UPPER(v('APP USER')), SYSDATE, v_trigger_task);
ELSE
INSERT INTO PLAUDWIT (AWitnessID, AWitnessType, AUDIT_USER, AUDIT_DATE, AUDIT_ACTION)
VALUES
(:NEW.AWitnessID, :NEW.AWitnessType, UPPER(v('APP USER')), SYSDATE, v_trigger_task);
END IF;
ENDE TRG_PLAUDWIT;
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Sie sich beziehen, zu binden, varibales mit einem
'A'
an den start und Unterstrich nicht, wie:OLD.AWitnessID
, aber deine Tabelle ist nurWITNESS_ID
. Damit Sie nicht übereinstimmen, und dieser Fehler generiert. Sie haben nicht einmal eineWITNESS_TYPE
Spalte.Dann in Ihre
insert
Aussagen haben Sie die Namen der Spalten in der audit-Tabelle geirrt. Darüber hinaus setzen Sie die variable aufUpdate
aber check fürUPDATE
- remmeber bei dem Vergleich die groß- /Kleinschreibung bei string-Werte.Diese kompiliert mit Ihrem schema:
SQL Fiddle zeigt keine Kompilierungsfehler.