簡體   English   中英

在 PLSQL 的 PROCEDURE 中使用 IF 和 UPDATE

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM