如何显示更新工资的员工的姓名和姓氏?

Posted

技术标签:

【中文标题】如何显示更新工资的员工的姓名和姓氏?【英文标题】:How to display name and surname of the employee with updated salary? 【发布时间】:2020-02-13 20:28:45 【问题描述】:

SQL Developer 显示关于突变的错误。 你能给出任何建议如何处理它吗? 我在 Oracle 11g 上以 hr 用户身份登录。

create or replace trigger displayEmp
before update ON employees
for each row
declare
    v_name varchar;
    v_surname employees.last_name%type;
    newSal employees.salary%type;
begin
    newSal := :new.salary;
    select first_name, last_name into v_name, v_surname 
    from employees where salary = newSal;
    dbms_output.put_line(v_name || ' ' || v_surname);
end;

【问题讨论】:

你想做什么?只显示正在修改的员工的姓名和姓氏? 是的,我想显示工资更新的员工。 触发器不能用作显示机制。这是没有意义的。您的选择是选择所有具有匹配薪水的员工。相反,您应该在表上有一个 DATE 字段,例如“上次更新”甚至是工资历史表。并查询。 那么,上面的例子有什么解决办法吗?可以在触发器中显示它吗? *** 中的一些示例表明它是,但那是 t-sql 触发器而不是 pl/sql :/ 解决方案是不使用触发器来执行此操作。再次阅读我的评论。 【参考方案1】:

触发器的用途没有多大意义,因为它只会将一些派生信息打印到标准输出。

但是,您似乎过于复杂了。要访问员工姓名,您无需查询表:该信息在伪记录:new 中可用。这大大简化了您的代码:

create or replace trigger displayEmp
before update of salary on employees
for each row
begin
    dbms_output.put_line(:new.first_name, || ' ' || :new.last_name);
end;

请注意,我修改了触发器,使其仅在 salary 更新时触发:before update of salary on employees

【讨论】:

我收到一个错误:ORA-01031:权限不足。我在 live oracle sql 中触发了触发器。 @adan96ful: 那么你需要检查你的用户是否有权限创建触发器和访问相关的数据库表。这是一个授权问题,与触发代码无关。

以上是关于如何显示更新工资的员工的姓名和姓氏?的主要内容,如果未能解决你的问题,请参考以下文章

SQL系统函数的使用(实验五)

对数据进行限定和排序

子查询

Python:将员工姓名与公司、年龄、性别匹配

sql语句求出第三到第五的工资

SQL的练习,求答案!!!