![](/img/trans.png)
[英]Oracle JDBC Datasource - ORA-00942: table or view does not exist
[英]Oracle Trigger error "ORA-00942: table or view does not exist"
這是我的觸發器:
create trigger tampone_trigger
after insert on tamponi.numerotelpaziente
for each row
begin
IF ( :new.numerotelpaziente not in (
select numtel
from users))
then
insert into spaiati values (new.numtel);
end if;
end;
表“Tamponi”確實存在,“numerotelpaziente”是列之一......表“USERS”也存在,“numtel”是它的列之一......到底為什么給我一個錯誤? 觸發器應該查找插入到“Tamponi”中的新手機號碼,並檢查該號碼是否存在於“Users”中,如果不存在,則必須將其添加到單獨的表“spaiati”中,其中有一列。 . 它完美地連接到我的個人數據庫(我在上面運行我的 JAVAfx 應用程序,它工作正常,我只需要創建一些觸發器)。
Report error -
ORA-00942: table or view does not exist
00942. 00000 - "table or view does not exist"
*Cause:
*Action:
如果我使用“on Tamponi”而不是同時給出該列,則錯誤將變為以下錯誤:
Report error -
ORA-04082: NEW or OLD references not allowed in table level triggers
04082. 00000 - "NEW or OLD references not allowed in table level triggers"
*Cause: The trigger is accessing "new" or "old" values in a table trigger.
*Action: Remove any new or old references.
如果我使用“on tamponi”,現在的錯誤是:
2/5 PL/SQL: Statement ignored
2/40 PLS-00405: subquery not allowed in this context
Errori: controllare il log del compilatore
由於此代碼將在觸發器中,您會希望它盡可能高效,因為它可能會經常運行。 下面的代碼應該以最少的上下文切換來完成您希望實現的目標。
CREATE TRIGGER tampone_trigger
AFTER INSERT
ON tamponi
FOR EACH ROW
BEGIN
INSERT INTO spaiati
SELECT :new.numerotelpaziente
FROM DUAL
WHERE NOT EXISTS
(SELECT 1
FROM users u
WHERE u.numtel = :new.numerotelpaziente);
END;
/
我目前沒有可用的數據庫客戶端,但這應該接近你想要的:
create trigger tampone_trigger
after insert on tamponi for each row
declare
v_exists number;
begin
select count(*) into v_exists from users u where u.numtel = :new.numerotelpaziente;
if (v_exists = 0) then
insert into spaiati values(:new:numerotelpaziente);
end if;
end;
你可以試試這個 -
create trigger tampone_trigger
after insert on tamponi
for each row
declare
v_flag boolean := false;
begin
for c in (select numtel from users)
loop
if :new.numerotelpaziente = c.numtel
then
v_flag := true;
exit;
end if;
exit when no_data_found;
end loop;
insert into spaiati values (new.numtel);
end;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.