当前位置: 首页 > 知识库问答 >
问题:

ORA-04088:执行触发器“OES2.t_UPDATE_ORDERS_GROSS”时出错

林星华
2023-03-14

我创建了触发器:--drop trigger t_update_orders_gross

create or replace trigger t_update_orders_gross
before insert on orders_update
for each row
declare
v_gross int;
v_subtotal int;
begin
select subtotal into v_subtotal from orders;
if v_subtotal is null then
    :new.subtotal:=testing(:new.order_no); 
--  testing is a function that will calculate the subtotal for the given 
-- order_no
    update orders set subtotal=:new.subtotal
    where order_no=:new.order_no;
end if;
end;
create or replace procedure p_update_orders_grossSales
as
v_order_no orders.order_no%type;   
v_order_date orders.order_date%type;
v_ship_date orders.ship_date%TYPE;
v_shipping_method orders.shipping_method%type;
v_tax_status orders.tax_status%type;
v_subtotal orders.subtotal%type;
v_tax_amt orders.tax_amt%type;
v_shipping_charge orders.shipping_charge%type;
v_total_amt orders.total_amt%type;
v_customer_no orders.customer_no%type;
v_employee_no orders.employee_no%type;
v_branch_no orders.branch_no%type;
cursor c1 is select order_no,order_date,ship_date,shipping_method,tax_status, subtotal,tax_amt,shipping_charge,total_amt,customer_no,employee_no,branch_no from orders;

begin
open c1;
loop
    fetch c1 into v_order_no,v_order_date,v_ship_date,v_shipping_method,v_tax_status,v_subtotal,v_tax_amt,v_shipping_charge,v_total_amt,v_customer_no,v_employee_no,v_branch_no;
    exit when c1%notfound;
    insert into orders_update (
            order_no,order_date,ship_date,shipping_method,tax_status, subtotal,tax_amt,shipping_charge,total_amt,customer_no,employee_no,branch_no)
        values (v_order_no,v_order_date,v_ship_date,v_shipping_method,v_tax_status,v_subtotal,v_tax_amt,v_shipping_charge,v_total_amt,v_customer_no,v_employee_no,v_branch_no);
    end loop;
close c1;
end;
/

共有1个答案

贲高寒
2023-03-14

当“select into”返回超过1行时,Oracle引发错误ORA-01422。在这种情况下,select from orders表将返回orders表中的每一行,因为没有Where。您需要添加与update orders语句相同的where子句。您可能需要为“未找到数据异常”做准备。

护卫者

 类似资料:
  • 问题内容: 我创建了一个触发器,如下所示: 我正在尝试在Trigger_1中插入一行 它给了我错误: 谁能帮忙吗? 问题答案: 只需删除 从触发代码。在正在进行的事务中触发执行,因此您无法进行单独的提交。提交事务后,您在trigger_2中的插入也将提交。

  • 问题内容: 我做了这个触发器,在将行插入表TEST_TRNCOMPVISIT时,出现以下错误- 发生以下错误: ORA-04091:表TEST.TEST_TRNCOMPVISIT正在变异,触发器/函数可能看不到它 ORA-06512:在“ TEST.UPDATE_TEST_280510”,第4行 ORA-06512:在“ TEST.UPDATE_TEST_280510”,第10行 ORA-0408

  • 问题内容: 我正在尝试在oracle 10g数据库中创建一个简单的触发器。用于创建触发器的此脚本运行干净。 但是当我跑步时: 激活触发器,我收到以下错误消息: ORA-04098:触发器’JMD.NEWALERT’无效且重新验证失败(影响0行) 我不知道是什么导致此错误。您知道导致此错误的原因吗?还是为什么会这样? 先感谢您! -大卫 问题答案: Oracle将尝试重新编译引用的无效对象。在这里,

  • 问题内容: 假设您有表格和。保存演示文稿并包含基本事件信息(如位置和日期)后,将使用触发器自动创建事件。(由于技术原因,恐怕不可能仅将数据保存在一个位置并使用视图。)此外,在稍后的演示中更改此信息时,触发器也会将更新复制到事件中,像这样: 现在,客户需要它,这样,如果用户更改了 事件中 的信息,它也应该返回到演示。出于明显的原因,我不能相反: 毕竟,这将导致每个触发器彼此触发。我可以做的是在两个表

  • 问题内容: 我在用 并执行存储过程。 我在存储过程中使用引发消息。 我要在处理时在查询执行结束时由sql server抛出所有消息。 通过设置,我可以实时获取所有消息,但这会导致严重性大于10的错误也可以作为异常抛出来处理。 有什么方法可以在eventHandler中实时获取严重性为10的自定义sql infomessage,但其他方法可以作为异常? 问题答案: 看来问题出在。 就我而言,我使用并

  • 原木 templateProcessingException:在org.thymeleaf.processor.element.abstractAttributeTrocessor.doProcess(abstractAttributeTrocessor.java:117)~[thymeleaf-3.0.9.release.jar:3.0.9.release]在org.thymeleaf.proc