2009-06-15 34 views
1

私はOracleを学び、トリガーを作成しようとしました。私はsqlplusでこのサンプルフォームを試しました。 1行目でOracleのSQLPlusを使用してトリガーを作成できません

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/

ERROR: ORA-04089:私は

ます。sqlplus "SYS/AS SYSDBA神託" を使用してSYSとしてログインしていてもSYS

が所有しているオブジェクトに対してトリガーを作成することはできません

+0

あなたはそれがセミコロンなしで試すことができますか? – jle

+0

本はsysとしてログインするように指示しましたか? sysは、UNIXの "root"ユーザに似ています - システムの管理にのみ使用されます。通常、新しいOracleインスタンスで最初に行うことは、アプリケーションのオブジェクトを所有するユーザーを作成することです。実験のために、この目的のためにユーザー "scott"、パスワード "tiger"が既に作成されていることがわかります(ただし、新しいインスタンスでは、アカウントを最初にロック解除する必要があります)。 –

答えて

7

文を実行するようにSQLPLUSに指示するには、空行に/を入力する必要があります。

+1

/nowを含めるように質問を編集しました。 –

+0

これは文字通り理解するのに一日かかりました。どうもありがとうございました。欠落している "/"スラッシュは、 "END"キーワードの後に​​記述された他のPL/SQLで作成されるトリガを引き起こしていました。再度、感謝します! –

6

SYSが所有するオブジェクトに対してトリガを作成することは禁止されています。

テーブルempをSYSとして作成しましたか?これを行うには、通常のユーザーになりたいと思うかもしれません。 empはシステムテーブルのようには聞こえません。

+0

良いキャッチ。 SYSとしてログインしている間、誰かがサンプル・テーブルを実行している可能性があります(「emp」は標準サンプル・スキーマのテーブルです)。 –

0

ENDの後にセミコロンがないと思います。 new.salary: も5 BEGIN 4 BEFORE EACH ROW FOR EMP 3にSALARYの 2を挿入または更新

SYS.emp
0

SQL>トリガpolicy_bullを作成するか、またはREPLACEに言及= 200。 6 END 7/

あなたは "NEW SALARYは" PPLそのようSALARY ...またはEMPにSALARYの更新で列を入力する必要が...

関連する問題