2016-09-07 1 views
-2

Ich habe zwei Tabellen. Ich möchte abc aus Tabelle 2 nach folgenden Schritten erhalten:
1. Wählen Sie Name aus Tabelle1, wo Typ = "Tier";
2. Durchlaufen Sie jeden Namen von 1. und prüfen Sie auf Table2, d. H. O_name = name;
3. Überprüfen Sie, ob für diesen o_name eine Beschreibung existiert.
4. Wenn desc nicht existiert, fügen Sie 'pet' für diesen Datensatz in Tabelle2 ein.Schleife durch die Daten des Cursors und vergleichen für den Wert einer anderen Tabelle sql

Wie mache ich das? Für jetzt habe ich einen Cursor, der Name von Table1 hat. Ich denke daran, die Aufzeichnung des Cursors zu durchlaufen, aber darüber hinaus bin ich nicht in der Lage. Bitte empfehlen Sie mir:

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

Warum möchten Sie es mit einem Cursor tun? – rjdevereux

+0

@rjdevereux Hallo Rj Können wir es ohne Cursor machen? – Rthp

+1

Warum müssen Sie Tabelle1 durchlaufen. Es ist im Voraus bekannt, dass der Name "Katze" ist. Warum also nicht einfach Katzen direkt von table2? Es ist nicht klar, was Sie erreichen möchten. –

Antwort

1

Sie noch dies als Abfrage tun und brauchen keinen Cursor. Beachten Sie, dass Datenbanken für die Arbeit mit Datensatzgruppen optimiert sind, und genau das tun SQL-Abfragen. Cursor sollten nur verwendet werden, wenn andere Strategien nicht funktionieren.

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

Beachten Sie, dass DESC und TYPEreserved words in Oracle sind daher eingeschlossen ich sie in doppelte Anführungszeichen. Einfache Anführungszeichen werden verwendet, um Textliterale (Zeichenfolgen) in Oracle einzuschließen.

Verwandte Themen