Okay, lassen Sie uns sagen, dass wir ein Tischspiele haben, wie folgt aus:Wie überprüft man, ob sich der Inhalt eines Arrays in einer Tabelle befindet?
CREATE TABLE games(
game_name NVARCHAR2(20),
owner NVARCHAR2(30),
purchase DATE
);
und ein „Array“ wie diese:
CREATE TYPE array_ch1 IS OBJECT (game_name NVARCHAR2(20),purchase DATE);
/
CREATE TYPE array_ch2 IS TABLE OF array_ch1;
/
Und auf diesem Array würde es Werte wie ‚GTA sein ',' 2019 'und' Pac-man ',' 2000 '.
Ich habe versucht, eine Prozedur zu erstellen, die alle Besitzer zurückgibt, die alle Spiele in dem angegebenen Datum haben.
Ich habe bereits eine Funktion namens „checkGame“, dass angesichts einem Eigentümer und Variable vom Typ „array_ch1“ liefert 1 oder 0 (1, wenn die Besitzer das Spiel hat und am richtigen Kaufdatum, sonst 0) .
Meine ursprüngliche Idee war es, durch die Tabellenspiele und das Array gleichzeitig zu iterieren und zu überprüfen, ob ein bestimmter Benutzer tatsächlich das richtige Spiel mit dem richtigen Datum hatte, aber ich habe keine Ahnung, wie ich das Ergebnis zurückgeben soll. noch, was zu tun ist, wenn es mehrere Besitzer gibt, die den Kriterien entsprechen.
CREATE OR REPLACE PROCEDURE findOwners(game_date IN array_ch2, good_owners OUT SYS_REFCURSOR)
IS BEGIN
FOR v_game in SELECT * FROM games LOOP
FOR cond in 1..game_date.count LOOP
IF(checkGame(cond, v_game.owner) = 0) THEN
EXIT;
END IF;
END;
END;
END;
/
Was ist der Zweck, die Daten an zwei Orten gleichzeitig zu haben? –
Die Idee war, dass Benutzer (durch eine andere Software) nach Spielen suchte, die ihren Kriterien entsprechen, @BobJarvis, vielleicht sollte ich diese Art von Eingabe auf eine andere Weise erhalten? – Safirah
Mein Punkt ist, dass es eine schlechte Idee ist, Ihre Daten an zwei Stellen zu haben. Bewahren Sie Ihre Daten in der Datenbank auf, nehmen Sie sie heraus, um daran zu arbeiten, und legen Sie sie zurück, wenn Sie fertig sind. –