Dav*_*ron 18 oracle merge jdbc
在Oracle中,给出一个简单的数据表:
create table data (
id VARCHAR2(255),
key VARCHAR2(255),
value VARCHAR2(511));
Run Code Online (Sandbox Code Playgroud)
假设我想"插入或更新"一个值.我有类似的东西:
merge into data using dual on
(id='someid' and key='testKey')
when matched then
update set value = 'someValue'
when not matched then
insert (id, key, value) values ('someid', 'testKey', 'someValue');
Run Code Online (Sandbox Code Playgroud)
有比这更好的方法吗?这个命令似乎有以下缺点:
如果这是最好的方法,有没有办法在JDBC中设置两次每个参数?
Cra*_*aig 21
我不认为使用双重作为黑客.为了摆脱绑定/打字两次,我会做类似的事情:
merge into data
using (
select
'someid' id,
'testKey' key,
'someValue' value
from
dual
) val on (
data.id=val.id
and data.key=val.key
)
when matched then
update set data.value = val.value
when not matched then
insert (id, key, value) values (val.id, val.key, val.value);
Run Code Online (Sandbox Code Playgroud)
我将 MERGE 隐藏在 PL/SQL API 中,然后通过 JDBC 调用它:
data_pkg.merge_data ('someid', 'testKey', 'someValue');
Run Code Online (Sandbox Code Playgroud)
作为 MERGE 的替代方案,API 可以执行以下操作:
begin
insert into data (...) values (...);
exception
when dup_val_on_index then
update data
set ...
where ...;
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24764 次 |
| 最近记录: |