触发器函数 - 创建一个触发器,每当在 table "zaposlenici" 中添加或更改某些内容时设置列 "inicijali"
Trigger Functions - Make a trigger that sets the column "inicijali" whenever something is added or changed in table "zaposlenici"
问题:
1)
-- 添加一列 "inicijali" (类型 VARCHAR )到 table "zaposlenici"
-- 创建一个设置列 "inicijali" 的触发器(用 table "zaposlenici" 中人名的首字母填充)
--每当在 table "zaposlenici"
中插入或更新内容时
2)
此问题已解决
--创建一个触发器,只要 table "proizvodi"
中有更改或添加的行,就会设置列 "cijena_ukupno"
--设置为cijena_ukupno = cijena_bez_pdv + pdv_vrijednost
这是问题 2) 的答案。我需要有关问题 1 的帮助。
CREATE OR REPLACE TRIGGER t_proizvod
BEFORE INSERT OR UPDATE ON proizvodi
FOR EACH ROW
BEGIN
:NEW.cijena_bez_pdv := :NEW.cijena_ukupno - :NEW.pdv;
END;
答案:
1) 还需要
2)
create or replace trigger t_proizvod
before insert or update proizvodi
for each row
begin
:NEW.cijena_bez_pdv := :NEW.cijena_ukupno - :NEW.pdv;
end;
我为您的 table 创建了一个 较短的 版本,因为其余版本与本案例无关。
SQL> create table zaposlenici (
2 id number not null,
3 ime varchar2(20 char) not null,
4 prezime varchar2(20 char) not null
5 );
Table created.
添加新列:
SQL> alter table zaposlenici add inicijali varchar2(5);
Table altered.
触发器:
SQL> create or replace trigger trg_aiu_zap
2 before insert or update on zaposlenici
3 for each row
4 begin
5 :new.inicijali := upper(substr(:new.ime, 1, 1)) ||
6 upper(substr(:new.prezime, 1, 1));
7 end;
8 /
Trigger created.
测试:
SQL> insert into zaposlenici (id, ime, prezime) values (1, 'Little', 'Foot');
1 row created.
SQL> insert into zaposlenici (id, ime, prezime) values (2, 'Velika', 'Gorica');
1 row created.
SQL> select * From zaposlenici order by id;
ID IME PREZIME INICI
---------- -------------------- -------------------- -----
1 Little Foot LF
2 Velika Gorica VG
SQL> update zaposlenici set prezime = 'Zagreb' where id = 2;
1 row updated.
SQL> select * From zaposlenici order by id;
ID IME PREZIME INICI
---------- -------------------- -------------------- -----
1 Little Foot LF
2 Velika Zagreb VZ
SQL>
问题:
1)
-- 添加一列 "inicijali" (类型 VARCHAR )到 table "zaposlenici"
-- 创建一个设置列 "inicijali" 的触发器(用 table "zaposlenici" 中人名的首字母填充)
--每当在 table "zaposlenici"
中插入或更新内容时2)
此问题已解决
--创建一个触发器,只要 table "proizvodi"
中有更改或添加的行,就会设置列 "cijena_ukupno"--设置为cijena_ukupno = cijena_bez_pdv + pdv_vrijednost
这是问题 2) 的答案。我需要有关问题 1 的帮助。
CREATE OR REPLACE TRIGGER t_proizvod
BEFORE INSERT OR UPDATE ON proizvodi
FOR EACH ROW
BEGIN
:NEW.cijena_bez_pdv := :NEW.cijena_ukupno - :NEW.pdv;
END;
答案:
1) 还需要
2)
create or replace trigger t_proizvod
before insert or update proizvodi
for each row
begin
:NEW.cijena_bez_pdv := :NEW.cijena_ukupno - :NEW.pdv;
end;
我为您的 table 创建了一个 较短的 版本,因为其余版本与本案例无关。
SQL> create table zaposlenici (
2 id number not null,
3 ime varchar2(20 char) not null,
4 prezime varchar2(20 char) not null
5 );
Table created.
添加新列:
SQL> alter table zaposlenici add inicijali varchar2(5);
Table altered.
触发器:
SQL> create or replace trigger trg_aiu_zap
2 before insert or update on zaposlenici
3 for each row
4 begin
5 :new.inicijali := upper(substr(:new.ime, 1, 1)) ||
6 upper(substr(:new.prezime, 1, 1));
7 end;
8 /
Trigger created.
测试:
SQL> insert into zaposlenici (id, ime, prezime) values (1, 'Little', 'Foot');
1 row created.
SQL> insert into zaposlenici (id, ime, prezime) values (2, 'Velika', 'Gorica');
1 row created.
SQL> select * From zaposlenici order by id;
ID IME PREZIME INICI
---------- -------------------- -------------------- -----
1 Little Foot LF
2 Velika Gorica VG
SQL> update zaposlenici set prezime = 'Zagreb' where id = 2;
1 row updated.
SQL> select * From zaposlenici order by id;
ID IME PREZIME INICI
---------- -------------------- -------------------- -----
1 Little Foot LF
2 Velika Zagreb VZ
SQL>