Question : mettre à jour la table si le disque n'existe pas autrement disque d'insertion

J'ai un programmeur qui essaye d'obtenir ce code à work.
I ne pensent pas que la logique est correct - peux vous me dire ce qu'il a faux ? le

He veut vérifier la table pour voir si un disque existe - s'il existe il veut la mettre à jour - si elle n'existe pas il veut insérer le record.
##########################################################
CREATE OU REMPLACER LA FUSION du
AS
BEGIN

du PROCÉDÉ CNSADMIN.UpdateApprovedScoutRule
(p_SID de
DANS ApprovedScoutRule.SID%TYPE, p_RuleText de
DANS ApprovedScoutRule.RuleText%TYPE, p_DefaultPriority de
DANS ApprovedScoutRule.DefaultPriority%TYPE, p_IsSoRule de
DANS ApprovedScoutRule.IsSoRule%TYPE,
p_IsIgnored DANS ApprovedScoutRule.IsIgnored%TYPE
) DANS l'asr
d'ApprovedScoutRule USING (Sid CHOISI,
RuleText,
DefaultPriority,
IsSoRule,
IsIgnored d'ApprovedScoutRule) le
SUR (asr2.SID = asr.SID) le
QUAND THEN
       --METTRE À JOUR le
SET
de MISE À JOUR de RULE
asr.RuleText = p_RuleText, le
asr.DefaultPriority = p_DefaultPriority, le
asr.IsSoRule = p_IsSoRule, le
asr.IsIgnored = p_IsIgnored
OÙ asr.SID = p_SID
QUAND ALORS NON ASSORTI le
            --INSÉRER le NOUVEAU
VALUES
(p_SID, p_RuleText de
, p_DefaultPriority de
, p_IsSoRule de
, p_IsIgnored
de RULE
INSERT
(asr.SID,
asr.RuleText,
asr.DefaultPriority,
asr.IsSoRule,
asr.IsIgnored) de
) ; le
du
COMMETTENT ;
EXCEPTION
du
du
QUAND D'AUTRES PUIS
RAISE_APPLICATION_ERROR (- 20001, p_SID de
   || « : $ :  » || p_RuleText du
   || « : $ :  » ||p_DefaultPriority du
   || « : $ :  » ||p_IsSoRule du
   || « : $ :  » ||LE
SQLERRM, RECTIFIENT) ;

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

Thanks
class= de

Réponse : mettre à jour la table si le disque n'existe pas autrement disque d'insertion

Contrôle dehors :
http://jasonvogel.blogspot.com/2008/01/upsert-merge-within-same-table-oracle.html


Ce me mener dans le cas de test suivant.  Note : J'ai changé le nom de table.
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 :
purge de myApprovedScoutRule de table  de baisse ;
créer le myApprovedScoutRule de table (char de Sid (1), char de ruletext (1), char de defaultpriority (1), char d'issorule (1), char isignored (1)) ;
insérer dans les valeurs de myApprovedScoutRule (« a », « b », « c », « d », « e ") ;
insérer dans les valeurs de myApprovedScoutRule (« z », « z », « z », « z », « z ") ;
commettre ;

CRÉER OU REMPLACER le PROCÉDÉ UpdateApprovedScoutRule
(
    p_SID DANS myApprovedScoutRule.SID%TYPE,
    p_RuleText DANS myApprovedScoutRule.RuleText%TYPE,
    p_DefaultPriority DANS myApprovedScoutRule.DefaultPriority%TYPE,
    p_IsSoRule DANS myApprovedScoutRule.IsSoRule%TYPE,
    p_IsIgnored DANS myApprovedScoutRule.IsIgnored%TYPE
)
AS
COMMENCER

    FUSIONNER DANS le radar de surveillance aérienne de myApprovedScoutRule
    EMPLOYANT (CHOISIR le p_sid le Sid,
             p_ruletext RuleText,
             p_DefaultPriority DefaultPriority,
             p_IsSoRule IsSoRule,
             IsIgnored p_IsIgnored) d'asr2 duel   
    SUR (asr2.SID = asr.SID)
    UNE FOIS ASSORTI ALORS
       --RÈGLE EXISTANTE DE MISE À JOUR
        MISE À JOUR 
            ENSEMBLE
                 asr.RuleText = p_RuleText,
                 asr.DefaultPriority = p_DefaultPriority,
                 asr.IsSoRule = p_IsSoRule,
                 asr.IsIgnored = p_IsIgnored
            LÀ OÙ asr.SID = p_SID
      UNE FOIS NON ASSORTI ALORS    
            --INSÉRER LA NOUVELLE RÈGLE
            INSERTION
                (asr.SID,
                 asr.RuleText,
                 asr.DefaultPriority,
                 asr.IsSoRule,
                 asr.IsIgnored)
            VALEURS
                (p_SID,
                 p_RuleText,
                 p_DefaultPriority,
                 p_IsSoRule,
                 p_IsIgnored
                ) ;
    
    COMMETTRE ;
    
    
EXCEPTION
        QUAND D'AUTRES ALORS 
             RAISE_APPLICATION_ERROR (- 20001, 
              p_SID    || « : $ :  » || 
              p_RuleText    || « : $ :  » ||
              p_DefaultPriority    || « : $ :  » ||
              p_IsSoRule    || « : $ :  » ||
              SQLERRM, RECTIFIENT) ;

EXTRÉMITÉ UpdateApprovedScoutRule ;
/

montrer les erreurs


updateapprovedscoutrule d'exec (« a », « a », « a », « a », « a ") ;
updateapprovedscoutrule d'exec (« b », « b », « b », « b », « b ") ;

choisir * à partir du myApprovedScoutRule ;
Autres solutions  
  •  MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
  •  Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
  •  Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
  •  Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
  •  Emplacement primaire de deux SCCM dans l'annuaire actif
  •  L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
  •  Stocker le dossier dans le mysql using connector.net et le champ de goutte
  •  Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
  •  asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
  •  Winzip 12 issues de secours du travail ?
  •  
    programming4us programming4us