【问题标题】:Trigger Functions - Make a trigger that sets the column "inicijali" whenever something is added or changed in table "zaposlenici"触发器函数 - 每当在表“zaposlenici”中添加或更改某些内容时,创建一个设置列“inicijali”的触发器
【发布时间】:2020-09-08 01:29:48
【问题描述】:

LINK TO PASTEBIN

问题

1)

-- 将列“inicijali”(类型 VARCHAR)添加到表“zaposlenici”

-- 制作一个触发器,设置列“inicijali”(用表“zaposlenici”中人名的首字母填充它)

--每当在表“zaposlenici”中插入或更新某些内容时

2)

此问题已解决

--每当表“proizvodi”中更改或添加行时,创建一个触发器,设置列“cijena_ukupno”

--设置为 cijena_ukupno = cijena_bez_pdv + pdv_vrijednost

LINK TO PASTEBIN

这是对问题 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;

【问题讨论】:

  • 这里有问题吗?如果是这样,那就不清楚了。你能edit 更清楚你在问什么吗?当你在做的时候,你能把你的问题标题编辑成有意义的东西吗? SQLDeveloper 是多余的,因为它已经可以从标签中获得,而 student help 几乎没有意义。您的标题应该足够清楚地描述您的问题或问题,以便该站点的未来用户在扫描搜索结果列表试图找到解决问题的方法时从中获取信息,而您当前的标题根本不这样做。谢谢。
  • 谢谢@KenWhite,我是新来的编辑,我已经编辑了我的标题。希望现在好了^^
  • 问题是: 1) -- 在表 "zaposlenici" 中添加一个列 "inicijali" (类型 VARCHAR ) -- 做一个触发器来设置列 "inicijali" (用首字母填充)在“zaposlenici”表中添加或更改了某些内容 2) -- 每当表“proizvodi”中更改或添加行时,创建一个触发器来设置列“cijena_ukupno” -- 设置为 cijena_ukupno = cijena_bez_pdv + pdv_vrijednost
  • 请编辑/改进问题! (1) 请将所有单词/标识符翻译成英文(当你得到帮助时,你可以将它们翻译回你的地方......)。 (2) 请注意问题的格式。 (3) 请避免任何“噪音”(关于电晕、您的私人情况、添加其他渠道/平台的联系地址),这些都已被弃用/禁止。
  • @HelpingHand 感谢您提供信息,我删除了“噪音”,其中一些是代码中不可翻译的表格名称,但我会翻译其余部分

标签: oracle oracle11g database-trigger


【解决方案1】:

我为您的表格创建了一个 较短的 版本,因为其余部分与这种情况无关。

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>

【讨论】:

    【解决方案2】:

    答案

    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;
    

    【讨论】:

    • 您的大写锁定键卡住了吗?请重新格式化答案。
    • 啊,很抱歉,我们拼贴出于某种原因必须在命令上使用大写锁定
    • 这是一个公共网站,不是你的大学。请使用正常拼写(并重写您带回课堂的内容)。在任何类型的用户网上,使用仅大写的拼写就像听到有人大喊大叫一样,这充其量被认为是不礼貌的。与软件相关的问答中的一个例外是任何必须以相应语言大写的标识符,以及某些类型约定,例如,用 C 和类似语言以大写字母编写常量。
    • Oracle 的打字约定也支持大部分关键字的大写,之前的编辑@HelpingHand 没有问题。
    • ^这个,我看到 99% 的人都使用大写字母,但没有理由争论,如果他不想要大写字母,我这样做对我来说没有问题,和平。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-08
    • 2012-03-11
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    相关资源
    最近更新 更多