Cuestión : poner al día la tabla si no existe el expediente de otra manera expediente del parte movible

¿Tengo un programador que esté intentando conseguir este código a work.
I no piense que la lógica sea correcto - puedo usted decirme lo que él tiene incorrecto? el

He quiere comprobar la tabla para considerar si existe un expediente - si existe él quiere ponerla al día - si no existe él quiere insertar el record.
##########################################################
CREATE O SUBSTITUIR LA FUSIÓN del
AS
BEGIN

del PROCEDIMIENTO CNSADMIN.UpdateApprovedScoutRule
(p_SID EN ApprovedScoutRule.SID%TYPE, p_RuleText del
EN ApprovedScoutRule.RuleText%TYPE, p_DefaultPriority del
EN ApprovedScoutRule.DefaultPriority%TYPE, p_IsSoRule del
EN ApprovedScoutRule.IsSoRule%TYPE,
del
p_IsIgnored EN ApprovedScoutRule.IsIgnored%TYPE
) EN el asr
de ApprovedScoutRule USAR (Sid SELECTO,
RuleText,
DefaultPriority,
IsSoRule,
IsIgnored de ApprovedScoutRule) el
EN (asr2.SID = asr.SID) el
CUANDO THEN
       --PONER AL DÍA el
SET
de la ACTUALIZACIÓN de RULE
asr.RuleText = p_RuleText,
asr.DefaultPriority = p_DefaultPriority,
asr.IsSoRule = p_IsSoRule,
asr.IsIgnored = el p_IsIgnored
DONDE asr.SID = el p_SID
CUANDO ENTONCES NO EMPAREJADO el
            --INSERTAR EL NUEVO
VALUES
(p_SID, p_RuleText del
, p_DefaultPriority del
, p_IsSoRule del
, p_IsIgnored
de RULE
INSERT
(asr.SID,
asr.RuleText,
asr.DefaultPriority,
asr.IsSoRule,
asr.IsIgnored) del
); el
del
CONFÍA;
EXCEPTION
del
del
CUANDO OTROS ENTONCES
RAISE_APPLICATION_ERROR (- 20001, p_SID del
   || “: $: ” || p_RuleText del
   || “: $: ” ||p_DefaultPriority del
   || “: $: ” ||p_IsSoRule del
   || “: $: ” ||EL
SQLERRM, VERDAD);

END UpdateApprovedScoutRule;
/
###########################################################

Thanks
class= del

Respuesta : poner al día la tabla si no existe el expediente de otra manera expediente del parte movible

Cheque hacia fuera:
http://jasonvogel.blogspot.com/2008/01/upsert-merge-within-same-table-oracle.html


Ese llevarme al caso de prueba siguiente.  Nota: Cambié el nombre de la tabla.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
purgación del myApprovedScoutRule de la tabla  de la gota;
crear el myApprovedScoutRule de la tabla (carbón de leña del Sid (1), carbón de leña del ruletext (1), carbón de leña del defaultpriority (1), carbón de leña del issorule (1), carbón de leña isignored (1));
insertar en los valores del myApprovedScoutRule (“a”, “b”, “c”, “d”, “e ");
insertar en los valores del myApprovedScoutRule (“z”, “z”, “z”, “z”, “z ");
confiar;

CREAR O SUBSTITUIR el PROCEDIMIENTO UpdateApprovedScoutRule
(
    p_SID EN myApprovedScoutRule.SID%TYPE,
    p_RuleText EN myApprovedScoutRule.RuleText%TYPE,
    p_DefaultPriority EN myApprovedScoutRule.DefaultPriority%TYPE,
    p_IsSoRule EN myApprovedScoutRule.IsSoRule%TYPE,
    p_IsIgnored EN myApprovedScoutRule.IsIgnored%TYPE
)
COMO
COMENZAR

    COMBINARSE EN el radar de vigilancia aérea del myApprovedScoutRule
    USANDO (SELECCIONAR el p_sid el Sid,
             p_ruletext RuleText,
             p_DefaultPriority DefaultPriority,
             p_IsSoRule IsSoRule,
             IsIgnored p_IsIgnored) de asr2 dual   
    EN (asr2.SID = asr.SID)
    CUANDO ENTONCES ESTÁ EMPAREJADO
       --REGLA EXISTENTE DE LA ACTUALIZACIÓN
        ACTUALIZACIÓN 
            SISTEMA
                 asr.RuleText = p_RuleText,
                 asr.DefaultPriority = p_DefaultPriority,
                 asr.IsSoRule = p_IsSoRule,
                 asr.IsIgnored = p_IsIgnored
            DONDE asr.SID = p_SID
      CUANDO ENTONCES NO ESTÁ EMPAREJADO    
            --INSERTAR LA NUEVA REGLA
            PARTE MOVIBLE
                (asr.SID,
                 asr.RuleText,
                 asr.DefaultPriority,
                 asr.IsSoRule,
                 asr.IsIgnored)
            VALORES
                (p_SID,
                 p_RuleText,
                 p_DefaultPriority,
                 p_IsSoRule,
                 p_IsIgnored
                );
    
    CONFIAR;
    
    
EXCEPCIÓN
        CUANDO OTROS ENTONCES 
             RAISE_APPLICATION_ERROR (- 20001, 
              p_SID    || “: $: ” || 
              p_RuleText    || “: $: ” ||
              p_DefaultPriority    || “: $: ” ||
              p_IsSoRule    || “: $: ” ||
              SQLERRM, VERDAD);

EXTREMO UpdateApprovedScoutRule;
/

demostrar los errores


updateapprovedscoutrule del exec (“a”, “a”, “a”, “a”, “a ");
updateapprovedscoutrule del exec (“b”, “b”, “b”, “b”, “b ");

seleccionar * de myApprovedScoutRule;
Otras soluciones  
 
programming4us programming4us