Vraag : update lijst als het verslag niet anders tussenvoegselverslag bestaat

Ik heb een programmeur die probeert om deze code aan work.
I te krijgen niet denkt kunnen de logica correct is - u vertellen me wat hij verkeerd heeft?

He wil de lijst controleren om te zien of bestaat een verslag - als het hij wil bestaat het bijwerken - als het niet hij wil bestaat record.
##########################################################
CREATE opnemen OF PROCEDURE CNSADMIN.UpdateApprovedScoutRule
(
p_SID IN ApprovedScoutRule.SID%TYPE,
p_RuleText IN ApprovedScoutRule.RuleText%TYPE,/> p_DefaultPriority
riority%TYPE,
p_IsSoRule IN ApprovedScoutRule.IsSoRule%TYPE,
p_IsIgnored IN ApprovedScoutRule.IsIgnored%TYPE
) VERVANGEN/> FUSIE
AS
BEGIN

GEBRUIKEND (UITGEZOCHTE SID,
RuleText,
DefaultPriority,
IsSoRule,
IsIgnored VAN ApprovedScoutRule) asr2
OP (asr2.SID = asr.SID)
WANNEER AANGEPASTE THEN
       --De BESTAANDE RULE
UPDATE van de UPDATE
SET
asr.RuleText = p_RuleText,
asr.DefaultPriority = p_DefaultPriority,
asr.IsSoRule = p_IsSoRule,
asr.IsIgnored = p_IsIgnored
WAAR asr.SID = p_SID
WANNEER AANGEPASTE niet DAN
            --TUSSENVOEGSEL NIEUWE RULE
INSERT
(asr.SID,
asr.RuleText,
asr.DefaultPriority,
asr.IsSoRule,
asr.IsIgnored)
VALUES
(p_SID,
p_RuleText,
p_DefaultPriority,
p_IsSoRule,
p_IsIgnored
);

BEGAAT;


EXCEPTION
WANNEER ANDEREN TOEN
RAISE_APPLICATION_ERROR (- 20001,
p_SID    || „: $: “ ||
p_RuleText    || „: $: “ ||/> p_DefaultPriority
p_IsSoRule    || „: $: “ ||WARE
SQLERRM,);

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

Thanks

Antwoord : update lijst als het verslag niet anders tussenvoegselverslag bestaat

Controle uit:
http://jasonvogel.blogspot.com/2008/01/upsert-merge-within-same-table-oracle.html


Dat lood me aan de volgende testcase.  Nota: Ik veranderde de lijstnaam.
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:
de zuivering van de dalingslijst  myApprovedScoutRule;
cre�ër lijst myApprovedScoutRule (sid het klusje (1), ruletext klusje (1), defaultpriorityklusje (1), issorule klusje (1), isignored klusje (1));
tussenvoegsel in myApprovedScoutRulewaarden ('a', 'b', „c“, „D“, „e“);
tussenvoegsel in myApprovedScoutRulewaarden („z“, „z“, „z“, „z“, „z“);
bega;

CRE�ëR OF VERVANG PROCEDURE UpdateApprovedScoutRule
(
    p_SID IN myApprovedScoutRule.SID%TYPE,
    p_RuleText IN myApprovedScoutRule.RuleText%TYPE,
    p_DefaultPriority IN myApprovedScoutRule.DefaultPriority%TYPE,
    p_IsSoRule IN myApprovedScoutRule.IsSoRule%TYPE,
    p_IsIgnored IN myApprovedScoutRule.IsIgnored%TYPE
)
ZOALS
BEGIN

    FUSIE IN myApprovedScoutRuleasr
    Het GEBRUIKEN (UITGEZOCHTE p_sid sid,
             p_ruletext RuleText,
             p_DefaultPriority DefaultPriority,
             p_IsSoRule IsSoRule,
             p_IsIgnored IsIgnored VAN dubbele) asr2   
    OP (asr2.SID = asr.SID)
    WANNEER DAN AANGEPAST
       --DE BESTAANDE REGEL VAN DE UPDATE
        UPDATE 
            REEKS
                 asr.RuleText = p_RuleText,
                 asr.DefaultPriority = p_DefaultPriority,
                 asr.IsSoRule = p_IsSoRule,
                 asr.IsIgnored = p_IsIgnored
            WAAR asr.SID = p_SID
      WANNEER DAN AANGEPAST NIET    
            --DE NIEUWE REGEL VAN HET TUSSENVOEGSEL
            TUSSENVOEGSEL
                (asr.SID,
                 asr.RuleText,
                 asr.DefaultPriority,
                 asr.IsSoRule,
                 asr.IsIgnored)
            WAARDEN
                (p_SID,
                 p_RuleText,
                 p_DefaultPriority,
                 p_IsSoRule,
                 p_IsIgnored
                );
    
    BEGA;
    
    
UITZONDERING
        WANNEER ANDEREN TOEN 
             RAISE_APPLICATION_ERROR (- 20001, 
              p_SID    || „: $: “ || 
              p_RuleText    || „: $: “ ||
              p_DefaultPriority    || „: $: “ ||
              p_IsSoRule    || „: $: “ ||
              WAAR SQLERRM,);

EIND UpdateApprovedScoutRule;
/

toon fouten


exec updateapprovedscoutrule ('a', 'a', 'a', 'a', 'a');
exec updateapprovedscoutrule ('b', 'b', 'b', 'b', 'b');

selecteer * uit myApprovedScoutRule;
Andere oplossingen  
 
programming4us programming4us