簡體   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