0
我试图创建一个函数/触发器,它可以在不需要编写查询的情况下更新表supply
中的status_comunal_waste
。ORACLE PLSQL函数/触发器
编辑:
TRAFFIC (date),(input_quant),(output_quant),(status)
SUPPLY (input_quant), (output_quant),(status_comunal_waste)
后,我导入日期,输入,输出,状态数据到表中的流量, 与触发AIR的数据也被导入到表供应,与列execption USER_CHANGES,DATE_CHANGES,USER_DELETE,DATE_DELETE,以模仿“用户”决定更改或添加数据时“用户”所做的更改。
到目前为止,我已经试过这样的事情
create or replace TRIGGER supply_after_insert
after INSERT
ON traffic
FOR EACH ROW
DECLARE
Status_comunal_waste VARCHAR2(20);
BEGIN
SELECT SUM(input_quant) - SUM(output_quant)
into Status_comunal_waste
FROM traffic
WHERE (key_num_code =200101);
INSERT INTO supply
(Status_comunal_waste) VALUES (Status_comunal_waste);
END;
编辑:
同时,我从创建一个触发器功能切换,这是迄今为止写的:
create or replace
FUNCTION stat_comunal_waste (key_num_code number)
return number
is
status_comunal_waste NUMBER;
BEGIN
if (key_num_code = 200101) THEN
SELECT SUM (input_quant) - SUM (output_quant)
into status_comunal_waste
FROM traffic
WHERE key_num_code =200101;
end if;
return status_comunal_waste;
END;
功能编译没有错误,但现在我得到错误的包装
CREATE OR REPLACE PACKAGE Paket
IS
function stat_comunal_waste (key_num_code number)
return status_comunal_waste;
end Paket;
/
错误(3,1):PL/SQL:忽略声明
错误(4,8):PLS-00488: 'status_comunal_waste' 必须是一个类型
什么是“没有运气”的意思是 - 你得到编译错误,运行时错误,而不是你预期的结果?当你说这个表叫做'supply'时,你为什么要插入'status'中,而且你没有显示任何一个名为'Status_comunal_waste'的表。你说你想更新一些东西,但是你正在做一个插入。真的不是很清楚发生了什么,或者为什么。 –
我的歉意,我写了一个不正确的声明和错误的列名(我之前使用过)。我会编辑它。正如你所说的那样,它会**插入到'supply'中。编译触发器,但它不会做我认为会的:我手动尝试更改列中的一个信息,但它不会显示“Supply(status_comunal_waste)”表中的更改。 Supply表中存在三列,所有这些列都需要更新,其中一列是'status_comunal_waste'列,所以我试图为每个列设置一个触发器。我从触发器切换到创建功能,我现在编辑我的帖子。 – Sasa
PLS-00488仅仅是因为你的'return status_comunal_waste'而不是'return number',因为这个消息显示了真的。但这似乎是一个侧面问题。我不明白你为什么说你有单独的触发器,或者你为什么谈论更新(三个值),但显示一个* insert *只设置一个值。也许显示一些现有的数据,你插入什么,以及你希望数据看起来像什么后会有所帮助。 –