was ich tun muss, ist ich möchte einen Trigger erstellen, der einen Fehler auslöst, wenn beide die Fähigkeiten des Programmierers gleich sind. Bitte sagen Sie mir die Fehler, die ich gemacht habe.Progblem mit Triggern in pl/sql
SQL> get f:/sqlprog/trigger_3;
1 create or replace trigger t2 before insert or update on programmer for each
row
2 declare
3 cursor c1 is select prof1, prof2 from programmer;
4 begin
5 for r1 in c1 loop
6 if r1.pname=:new.pname then
7 if :new.prof1=: new.prof2 then
8 raise_application_error(-20091,'prof1 and prof2 should not be same');
9 end if;
10 end if;
11 end loop;
12* end;
SQL>/
Warnung: Auslöser mit Kompilierungsfehlern erstellt.
SQL> show errors
Errors for TRIGGER T2:
LINE/COL ERROR
-------- -----------------------------------------------------------------
4/1 PLS-00103: Encountered the symbol "FOR" when expecting one of the
following:
constant exception <an identifier>
<a double-quoted delimited-identifier> table long double ref
char time timestamp interval date binary national character
nchar
6/15 PLS-00103: Encountered the symbol ":" when expecting one of the
following:
(- + all case mod new null <an identifier>
<a double-quoted delimited-identifier> <a bind variable>
LINE/COL ERROR
-------- -----------------------------------------------------------------
continue any avg count current max min prior some sql stddev
sum variance execute forall merge time timestamp interval
date <a string literal with character set specification>
<a number> <a single-quoted SQL string> pipe
<an alternatively-quoted string literal with character set
specification>
<an alternative
das sind die Fehler, die ich festgestellt und die Tabelle in Bezug auf Programmierer unter PROF1 gegeben = proficieny 1 prof2 = proficieny 2
SQL> desc programmer;
Name Null? Type
----------------------------------------- -------- ----------------------------
PNAME VARCHAR2(20)
DOB DATE
DOJ DATE
SEX CHAR(1)
PROF1 VARCHAR2(10)
PROF2 VARCHAR2(10)
SALARY NUMBER(5)
i habe keine Ahnung, warum ich sie bin immer pls helfen Sie mir danke im Voraus.
Was möchten Sie erreichen? Meine Vermutung ist, dass Sie eine Check-Bedingung anstelle eines Triggers wollen. Wenn Sie ineffizient sein und einen Trigger anstelle einer Einschränkung haben wollen, dann schätze ich, dass Sie nur 'if: new.prof1 =: new.prof2' überprüfen und die Schleife und die erste if-Anweisung loswerden wollen. –
Sir ich bin neu und ich bin ein langsamer Lerner Könnten Sie bitte genauer sein, was ich tun soll? –
Zuerst erklären Sie genau, was Sie erreichen möchten. Ich versuche zu raten, basierend auf dem, was ich denke, dass dein Code deiner Meinung nach funktioniert. Aber es ist durchaus möglich, dass meine Vermutung falsch ist. Warum benutzt du einen Auslöser? Warum haben Sie zwei Proficiency-Spalten in der Tabelle anstatt eine Eins-zu-viele-Mapping-Tabelle? Hat jeder Programmierer wirklich genau zwei Fähigkeiten? Niemand hat 1 oder 3? –