2010-06-18 6 views
8

Je choisis des tables FOO et BAR. Je voudrais verrouiller les enregistrements de FOO qui sont retournés, mais je ne veux pas que les enregistrements de BAR soient verrouillés. Il semble que j'ai besoin de spécifier des colonnes individuelles, mais je veux que l'enregistrement entier de foo soit verrouillé. par exemple. Je voudrais pouvoir faire quelque chose comme:Oracle de verrouillage avec SELECT ... POUR MISE À JOUR DE

cursor c_foobar is 
select foo.*, bar.* from 
foo, bar 
where foo.id = bar.foo_id 
for update of foo 

Dois-je énumérer toutes les colonnes de foo dans la section for update of afin de les verrouiller tous? Ou puis-je arbitrairement choisir n'importe quelle colonne dans foo, même ceux qui ne sont pas sa clé primaire, et verrouiller l'ensemble de l'enregistrement?

Répondre

12

De the 10G PL/SQL documentation:

Lorsque Interrogation de plusieurs tables, vous pouvez utiliser la clause FOR UPDATE pour limiter ligne de verrouillage à des tables particulières. Les lignes dans une table sont verrouillées uniquement si la clause UP 0: FOR fait référence à une colonne dans cette table. Par exemple, la requête suivante verrouille les lignes de la table employés, mais pas dans le tableau départements:

DECLARE 
    CURSOR c1 IS SELECT last_name, department_name FROM employees, departments 
    WHERE employees.department_id = departments.department_id 
      AND job_id = 'SA_MAN' 
     FOR UPDATE OF salary; 
+0

Très bon; Je ne sais pas comment j'ai raté ça. Donc, je suppose que cela nécessite simplement un nom de colonne arbitraire de la rangée ... facile mais ne me semble pas terriblement intuitif. –

+0

Je suis d'accord, ce n'est pas le cas. Je me rappelle avoir lu quelque part il y a longtemps que l'exigence de spécifier des colonnes est telle que, dans une future version, Oracle pourrait seulement verrouiller certaines colonnes dans la rangée. Mais ma mémoire est floue à ce sujet. –

+2

C'est une forme de code auto-documenté, je pense: "J'ai seulement l'intention de mettre à jour la colonne" salaire "" –

Questions connexes