繁体   English   中英

ORACLE PLSQL函数/触发器

[英]ORACLE PLSQL Function/Trigger

我正在尝试创建一个FUNCTION / TRIGGER,它可以更新表supplystatus_comunal_waste ,而无需编写查询。

编辑:

TRAFFIC (date),(input_quant),(output_quant),(status)
SUPPLY (input_quant), (output_quant),(status_comunal_waste)

在我将DATE,INPUT,OUTPUT,STATUS数据导入到表TRAFFIC中后,使用触发器AIR,该数据也被导入到了表SUPPLY中,并执行了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;

该函数编译没有错误,但是现在我得到了PACKAGE错误

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”必须为类型

该查询可能是错误的。

SELECT SUM(input_quant) - SUM(output_quant) into Status_comunal_waste   
FROM traffic   WHERE key_num_code =200101);

确保获得正确的值。 尝试将下面的查询替换为下面的代码,然后尝试一下

select SUM(input_quant) into input_q FROM traffic WHERE key_num_code =200101;
select SUM(output_quant) into output_q FROM traffic WHERE key_num_code =200101;
diff := input_q  - output_q;

最终插入将如下所示:

INSERT INTO status (Status_comunal_waste) VALUES (diff); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM