[英]Using IF and UPDATE in a PROCEDURE in PLSQL
我是 SQL 和 PL/SQL 的新手,在這種情況下我遇到了一些困難:
create or replace PROCEDURE set_valor(p_variavel VARCHAR2, p_valor VARCHAR2) IS
BEGIN
INSERT INTO co_t_conf (nome_variavel,valor_variavel) values (p_variavel, p_valor);
/* I need to update nome_variavel if p_variavel is an already existent variable.
How can i do a 'IF' and 'UPDATE' in this situation?)
*/
COMMIT;
END;
試試merge
,它也被稱為upsert ,因為它能夠在同一個語句中更新和插入值。 像這樣的東西:
create or replace procedure set_valor
(p_variavel in varchar2,
p_valor in varchar2
)
is
begin
merge into co_t_conf c
using (select p_variavel,
p_valor
from dual
) x
on (c.nome_variavel = x.p_variavel)
when matched then update set
c.valor_variavel = x.p_valor
when not matched then insert (nome_variavel, valor_variavel)
values (x.p_variavel, x.p_valor);
end;
我認為 MERGE 是一個更好的解決方案,但為了完整起見(為了避免可怕的 IF..THEN..ELSE 你也可以使用這個:
create or replace PROCEDURE set_valor(p_variavel VARCHAR2, p_valor VARCHAR2) IS
BEGIN
BEGIN
INSERT INTO co_t_conf (nome_variavel,valor_variavel) values (p_variavel, p_valor);
EXCEPTION
WHEN dup_val_on_index THEN
UPDATE co_t_conf SET valor_variavel = p_valor WHERE none_variavel = p_variavel;
END;
COMMIT;
結尾;
再次,只是為了完整性。 MERGE 是一個更好的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.