2009-06-15 13 views
1

Ich lerne Oracle und wollte versuchen, einen Trigger zu erstellen. Ich habe dieses Beispiel versucht, ein Buch in sqlplus zu bilden. Trigger kann nicht mit SQLPlus in Oracle erstellt werden

SQL> CREATE OR REPLACE TRIGGER policy_bull BEFORE insert or update 
    2 ON emp 
    3 FOR EACH ROW 
    4 BEGIN 
    5 :new.salary := 200; 
    6 END 
    7/

FEHLER in Zeile 1: ORA-04089: kann keinen Trigger auf Objekte erstellen, indem Sie SYS Besitz

obwohl ich in als SYS angemeldet mit

sqlplus "sys/oracle als sysdba"

+0

können Sie versuchen, es ohne Semikolons? – jle

+0

Hat das Buch Ihnen gesagt, dass Sie sich als System anmelden sollen? sys ist dem Benutzer "root" in Unix ähnlich - wird nur für die Verwaltung des Systems verwendet. In der Regel erstellen Sie als Erstes eine neue Oracle-Instanz, indem Sie einen Benutzer erstellen, dem die Objekte für eine Anwendung gehören. Für Experimente finden Sie möglicherweise den Benutzer "scott", für diesen Zweck wurde bereits das Passwort "tiger" erstellt (allerdings müssen Sie das Konto bei einer neuen Instanz möglicherweise zuerst entsperren). –

Antwort

7

Sie müssen/in eine leere Zeile eingeben, um SQLPLUS anzuweisen, die Anweisung auszuführen.

+1

Ich sehe, dass Sie Ihre Frage bearbeitet haben, um das/jetzt aufzunehmen. –

+0

Das nahm mich buchstäblich einen Tag um herauszufinden. Vielen Dank. Der fehlende Schrägstrich "/" führte dazu, dass mein Trigger mit einem anderen PL/SQL erstellt wurde, das nach dem Schlüsselwort "END" geschrieben wurde. Danke noch einmal! –

6

Oracle verbietet das Erstellen von Triggern für Objekte, die SYS gehören.

Haben Sie die Tabelle emp als SYS erstellt? Sie möchten wahrscheinlich ein normaler Benutzer sein, um das zu tun. emp klingt nicht wie eine Systemtabelle.

+0

guter Fang. Es sieht so aus, als ob jemand die Beispieltabellen ausgeführt haben könnte ("emp" ist eine Tabelle im standardmäßigen Beispielschema), während sie als SYS angemeldet waren. –

0

Ich denke, ein Semikolon fehlt nach END. Auch erwähnen SYS.emp

0

SQL> CREATE OR TRIGGER policy_bull BEFORE Insert REPLACE oder 2 von GEHALT auf EMP aktualisieren 3 für jede ROW 4 BEGIN 5: new.salary: = 200; 6 END 7/

Sie haben die Spalte zu geben, wo die „NEW GEHALT“ ist ppl seine GEHALT so ... oder Aktualisierung von GEHALT auf EMP ...