2016-09-07 1 views
-2

J'ai deux tables. Je veux obtenir desc de Table 2 après les étapes suivantes:
1. Sélectionnez le nom de Table1 où type = 'animal';
2. parcourez chaque nom à partir de 1. et vérifiez la Table2 i.e o_name = name;
3. Ensuite, vérifiez si desc existe pour ce o_name.
4. Si desc n'existe pas, insérez 'pet' pour cet enregistrement sur Table2.boucle dans les données du curseur et compare pour la valeur d'une autre table sql

Comment faire? Pour l'instant j'ai un curseur qui a un nom de Table1. Je pense faire une boucle dans le dossier du curseur mais au-delà je ne peux pas le faire. S'il vous plaît me suggérer:

DECLARE 
    CURSOR DATA is 
     SELECT name 
     FROM Table1 
     where type='animal';  
BEGIN 
    FOR C IN DATA LOOP 
     // After this what can I do?? I cannot do select into because there will be 
     // multiple rows 
    END LOOP; 
END; 

/

Table1: 
id | name | type 
---| ---- | ----- 
    1| Apple | food 
    2| Ball | game 
    3| Cat | animal 
    4| Cow | animal 
    5| Ball | game 

    Table2: 
o_name | desc 
    ---| ---- 
    Apple| eat 
    Cat| pet 
    Cow| 
+1

Pourquoi voulez-vous le faire avec un curseur? – rjdevereux

+0

@rjdevereux Salut Rj Peut-on le faire sans curseur? – Rthp

+1

Pourquoi devez-vous parcourir la table1? On sait d'avance que le nom sera 'Cat'. Alors pourquoi ne pas prendre directement les chats de table2? Ce n'est pas clair ce que vous essayez d'atteindre. –

Répondre

1

Vous pouvez toujours faire comme requête et ne nécessitent pas un curseur. Notez que les bases de données sont optimisées pour travailler sur des ensembles d'enregistrements, et c'est ce que font les requêtes SQL. Les curseurs ne doivent être utilisés que si les autres stratégies ne fonctionnent pas.

UPDATE Table2 
SET "desc" = 'pet' 
WHERE 
    "desc" IS NULL AND 
    o_name IN (SELECT name FROM Table1 WHERE "type" = 'animal') 

Notez que DESC et TYPE sont reserved words in Oracle, donc je les entre guillemets. Les guillemets simples sont utilisés pour encadrer les littéraux textuels (chaînes) dans Oracle.