我有两个表table_1和table_2
table_1
id
1
2
3
4
...
table_2
id table_1_id
1 1
5 2
8 3
9 4
首先我插入table_1和第二个table_2。它是在php中插入的,当完成事务时,它发生在第二个table_2中没有插入行,我如何检查在table_2 IN ORACLE中存在的新插入值。
使用左连接并选择表1的所有id,其中table2 ids显示为null,实际上这些空ID在表2中不可用
select from t1 left join t2 on t1.id=t2.id
where t.id is null
一种选择是创建一个函数(如果TRUE
中存在ID
,则返回Boolean - TABLE_2
;否则返回FALSE
)。
我认为TABLE_1_ID
在TABLE_2
中是独一无二的。如果不是,那么它有可能返回TOO_MANY_ROWS
错误,所以我处理了它。
create or replace function f_id_exists (par_table_1_id in table_1.id%type)
return boolean
is
l_table_1_id table_1.id%type;
begin
select t.table_1_id
into l_table_1_id
from table_2 t
where t.table_1_id = par_table_1_id;
return true;
exception
when no_data_found then
return false;
when too_many_rows then
return true;
end;
您可以使用INTERSECT
设置操作检查以下Select语句:
select id as return_id
into v_return_id -- this variable of is of table_1.id%type
from
(
select id from table_1
intersect
select table_1_id from table_2
)
where id = &i_id -- might be replaced with :new.id or :old.id inside a trigger
如果对于变量变量i_id
SQL返回一个值,则相关的id
不存在,否则存在。