1) Musi być coś innego na swoim przykładzie, bo to na pewno wydaje się działać dla mnie
SQL> create table someTable(employeeid number);
Table created.
SQL> create table person(personid number, personnum varchar2(10));
Table created.
SQL> ed
Wrote file afiedt.buf
1 CREATE OR REPLACE TRIGGER MYTRIGGER
2 AFTER INSERT ON SOMETABLE
3 FOR EACH ROW
4 DECLARE
5 v_emplid varchar2(10);
6 BEGIN
7 SELECT personnum
8 into v_emplid
9 FROM PERSON
10 WHERE PERSONID = :new.EMPLOYEEID;
11 dbms_output.put(v_emplid);
12 /* INSERT INTO SOMEOTHERTABLE USING v_emplid and some of the other values
from the trigger table*/
13* END MYTRIGGER;
14/
Trigger created.
SQL> insert into person values(1, '123');
1 row created.
SQL> insert into sometable values(1);
1 row created.
2) prawdopodobnie chcesz zadeklarować V_EMPLID jako mający typ Person.PersonNum% Typ dzięki czemu można upewnij się, że typ danych jest poprawny, a jeśli zmienisz typ danych tabeli, nie będziesz musiał zmieniać kodu.
3) Zakładam, że wiesz, że twój wyzwalacz nie może zapytać lub zaktualizować tabeli, w której zdefiniowano wyzwalacz (więc nie ma żadnych zapytań lub wstawia do someTable).
W której wierszu jest zgłaszany błąd? –
Pierwszy błąd w sekwencji dotyczy linii "WHERE PERSONID ...". – Equistatic
Zaktualizowałem moją odpowiedź, w twoim przykładzie jest coś jeszcze, co nie zostało opublikowane. Kod jak napisałem działa dla mnie. –