Frage : Tabelle aktualisieren, wenn Aufzeichnung nicht anders Einsatzaufzeichnung existiert

Ich habe einen Programmierer, der versucht, diesen Code an work.
I zu gelangen denken nicht, dass die Logik korrekt ist - kann Sie mir erklären, was er falsches hat?

He möchte die Tabelle überprüfen, um zu sehen, wenn eine Aufzeichnung existiert - wenn sie er möchte sie aktualisieren existiert - wenn sie nicht er möchte das record.
##########################################################
CREATE einsetzen ODER VERFAHREN CNSADMIN.UpdateApprovedScoutRule
(
p_SID IN ApprovedScoutRule.SID%TYPE,
p_RuleText IN ApprovedScoutRule.RuleText%TYPE,
p_DefaultPriority IN ApprovedScoutRule.DefaultPriority%TYPE,
p_IsSoRule IN ApprovedScoutRule.IsSoRule%TYPE, das
p_IsIgnored IN ApprovedScoutRule.IsIgnored%TYPE
)
AS
BEGIN

MISCHEN IN ApprovedScoutRule asr
USING (AUSERWÄHLTES SID,
RuleText,
DefaultPriority,
IsSoRule,
IsIgnored VON ApprovedScoutRule)
AUF (asr2.SID = asr.SID)
WENN ZUSAMMENGEBRACHTES THEN
       --BESTEHENDES RULE
UPDATE
SET
AKTUALISIEREN asr.RuleText = p_RuleText,
asr.DefaultPriority = p_DefaultPriority,
asr.IsSoRule = p_IsSoRule,
asr.IsIgnored = p_IsIgnored
WO asr.SID = p_SID
WENN NICHT ZUSAMMENGEBRACHTES DANN
            --NEUES RULE
INSERT
(asr.SID,
asr.RuleText,
asr.DefaultPriority,
asr.IsSoRule,
asr.IsIgnored)
VALUES
(p_SID,
p_RuleText,
p_DefaultPriority,
p_IsSoRule,
p_IsIgnored
) EINSETZEN;

LEGEN fest;


EXCEPTION
WENN ANDERE DANN
RAISE_APPLICATION_ERROR (- 20001,
p_SID    || „: $: “ ||
p_RuleText    || „: $: “ ||
p_DefaultPriority    || „: $: “ ||
p_IsSoRule    || „: $: “ ||
SQLERRM, RICHTEN) AUS;

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

Thanks

Antwort : Tabelle aktualisieren, wenn Aufzeichnung nicht anders Einsatzaufzeichnung existiert

Überprüfung heraus:
http://jasonvogel.blogspot.com/2008/01/upsert-merge-within-same-table-oracle.html


Dieses mich zum folgenden Testfall führen.  Anmerkung: Ich änderte den Tabellennamen.
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:
6:
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:
Tropfentabelle myApprovedScoutRule  Bereinigung;
Tabelle myApprovedScoutRule (SID-Putzfrau (1), ruletext Putzfrau (1), defaultpriority Putzfrau (1), issorule Putzfrau (1), isignored Putzfrau, verursachen (1));
in myApprovedScoutRule Werte („a“, „b“, „c“, „d“, „e ") einsetzen;
in myApprovedScoutRule Werte („z“, „z“, „z“, „z“, „z ") einsetzen;
festlegen;

VERFAHREN UpdateApprovedScoutRule VERURSACHEN ODER ERSETZEN
(
    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
)
WIE
ANFANGEN

    IN myApprovedScoutRule asr VERMISCHEN
    ANWENDUNG (p_sid SID VORWÄHLEN,
             p_ruletext RuleText,
             p_DefaultPriority DefaultPriority,
             p_IsSoRule IsSoRule,
             p_IsIgnored IsIgnored VON Doppel) asr2   
    AUF (asr2.SID = asr.SID)
    WENN SIE DANN ZUSAMMENGEPASST WERDEN
       --UPDATE-VORHANDENE RICHTLINIE
        UPDATE 
            SATZ
                 asr.RuleText = p_RuleText,
                 asr.DefaultPriority = p_DefaultPriority,
                 asr.IsSoRule = p_IsSoRule,
                 asr.IsIgnored = p_IsIgnored
            WO asr.SID = p_SID
      WENN SIE NICHT DANN ZUSAMMENGEPASST WERDEN    
            --NEUE RICHTLINIE EINSETZEN
            EINSATZ
                (asr.SID,
                 asr.RuleText,
                 asr.DefaultPriority,
                 asr.IsSoRule,
                 asr.IsIgnored)
            WERTE
                (p_SID,
                 p_RuleText,
                 p_DefaultPriority,
                 p_IsSoRule,
                 p_IsIgnored
                );
    
    FESTLEGEN;
    
    
AUSNAHME
        WENN ANDERE DANN 
             RAISE_APPLICATION_ERROR (- 20001, 
              p_SID    || „: $: “ || 
              p_RuleText    || „: $: “ ||
              p_DefaultPriority    || „: $: “ ||
              p_IsSoRule    || „: $: “ ||
              SQLERRM, RICHTEN) AUS;

ENDE UpdateApprovedScoutRule;
/

Störungen zeigen


exec updateapprovedscoutrule („a“, „a“, „a“, „a“, „a ");
exec updateapprovedscoutrule („b“, „b“, „b“, „b“, „b ");

* vom myApprovedScoutRule vorwählen;
Weitere Lösungen  
 
programming4us programming4us