更新记录是否存在;否则在Oracle中插入
问题描述:
是否有任何指示存在记录或其他有用技巧的Oracle功能?更新记录是否存在;否则在Oracle中插入
编辑:使用MERGE语句我所做的:
MERGE
INTO lims_min.mytab src
USING lims_min.mytab tgt
ON ( src.col1 = tgt.col1
AND tgt.col1 = p_val1
AND src.col2 = tgt.col2
AND tgt.col2 = p_val2
)
WHEN MATCHED
THEN
UPDATE
SET tgt.col3=p_val3,
tgt.col4=p_val4
WHEN NOT MATCHED
THEN
INSERT (col1, col2, col3, col4)
VALUES (val1, val2, val2, val4);
我得到的错误,说COL3是无效的标识符。没有错别字,它是现有的column.p_val1,p_val2,p_val3和p_val4是传递给存储过程的字符串参数。我认为这个问题可能存在于这些参数中,也许它们应该置于WHERE语句中? 任何想法?
答
您正在寻找Oracle的merge
。
MERGE
INTO target_table tgt
USING source_table src
ON (src.object_id = tgt.object_id) //The key to check if the record exists
WHEN MATCHED // if exists
THEN
UPDATE
SET tgt.object_name = src.object_name //update it
, tgt.object_type = src.object_type
WHEN NOT MATCHED // if not exists
THEN
INSERT (tgt.object_id //then insert
, tgt.object_name
, tgt.object_type)
VALUES (src.object_id
, src.object_name
, src.object_type);
甲骨文10,我得到了 “PL/SQL:ORA-00904: ”P COL3“。” “:无效的标识符” – sarsnake 2011-01-22 00:15:54
我认为你需要到:“MERGE INTO tgt”(不是src) - 切换那些;我不认为你需要加入你的src&tgt表 - 只需指定:ON(src.col1 = p_val1和src.col2 = p_val2) – Gerrat 2011-01-22 00:33:29