&引用;“关系不存在”;Postgresql
我有一个错误:&引用;“关系不存在”;Postgresql,postgresql,Postgresql,我有一个错误: --------------------------- pgAdmin III --------------------------- An error has occurred: ERROR: relation "vettura_tariffa" does not exist LINE 2: from vettura_tariffa ^ QUERY: SELECT ( select valore
---------------------------
pgAdmin III
---------------------------
An error has occurred:
ERROR: relation "vettura_tariffa" does not exist
LINE 2: from vettura_tariffa
^
QUERY: SELECT ( select valore
from vettura_tariffa
where new.targa=vettura.targa)
CONTEXT: PL/pgSQL function "progettoBD".costout() line 14 at assignment
---------------------------
OK
---------------------------
代码如下
create or replace function costout()
returns trigger AS
$$
DECLARE
giorno integer;
gg1 integer;
gg2 integer;
tariffa numeric(2,0) ;
costo integer;
BEGIN
gg1=extract (days from new.dataconsegna);
gg2=extract (days from new.dataritiro);
giorno=gg1-gg2;
tariffa=( select valore
from vettura join tariffa on vettura.tipotariffa=tariffa.tipo
where new.targa=vettura.targa);
costo=tariffa * giorni;
new.costoutilizzo=costo;
END;
$$ language plpgsql;
这是触发器的代码
create trigger costo_utilizzo
after insert on utilizzo
for each row
execute procedure costout();
它似乎找不到表vettura,其他表也一样,如果我尝试简单的“select*from vettura”,效果很好。
我尝试从视图中交换视图,但问题仍然存在。
此错误出现在“utilizzo”的插入之后。
对不起,我的英语不好,先谢谢你。再见,Atz34
生成的错误表明您正在调用一个函数,该函数引用了vettura_tariffa
,而您发布的代码引用了vettura JOIN tariffa
。可能是代码中的某个简单错误。但是,触发器和触发器函数还有一些问题
首先,当您修改NEW
的任何字段时,应该在INSERT触发器之前调用;在插入后的触发器上,更改将不会保存在表中(您只能执行审计或更改其他表等副作用)
其次,extract(datefrom…)。假设您的datacosegna
和dataritiro
是date
列,您可以简单地减去它们,然后添加1:NEW.dataritiro-NEW.dataconsegna+1
(因此当天返回不是免费的)
第三,始终从插入触发器返回新的
然后,您可以将所有语句折叠为:
CREATE OR REPLACE FUNCTION costout() RETURNS trigger AS $$
BEGIN
SELECT valore * (NEW.dataritiro - NEW.dataconsegna + 1) INTO NEW.costoutilizzo
FROM vettura
JOIN tariffa ON vettura.tipotariffa = tariffa.tipo
WHERE NEW.targa = vettura.targa;
RETURN NEW;
END; $$ LANGUAGE plpgsql;
JAVA问题的解决方案
我们需要使用双引号和条,以便postgresql接受该命令
sql=“插入到\“模式\”表\”()值(?,,?)
我看到了vettura
和vettura\u tariffa
?搜索路径
问题?该查询没有生成该错误。在您调用vettura
的查询中,错误是由vettura\u tariffa
引起的。要么是您查找的查询错误,要么是您有另一个触发器错误,它应该是错误的be“relation”vettura“not exist”,sorryHi!谢谢,但是即使有你的建议,它也不起作用,粘贴我忘记的代码che“return new”“it not work”也不足以帮助你。到底是什么错误?(查看postgresql日志文件了解更多详细信息)编辑你的问题以显示表定义。