auf 'N' konvertieren Der effizienteste und sicherste Weg, um festzustellen, ob eine Zeile existiert, ist die Verwendung eines FOR-LOOP ... Sie werden nicht einmal eine schwierige Zeit haben, wenn Sie eine Zeile einfügen oder etwas tun möchten, das nicht auf der Zeile steht Aber das wird Ihnen sicherlich helfen, wenn Sie feststellen müssen, ob eine Zeile existiert. Siehe Beispielcode unten für die Ein- und Ausgänge ...
Wenn Sie nur wissen möchten, dass 1 Datensatz in Ihrer potenziellen Mehrfachrückgabe vorhanden ist, können Sie Ihre Schleife beenden, nachdem sie sie zum ersten Mal erreicht hat.
Die Schleife wird überhaupt nicht aufgerufen, wenn kein Datensatz existiert. Sie werden keine Beschwerden von Oracle erhalten oder solche, wenn die Zeile nicht existiert, aber Sie müssen herausfinden, ob es trotzdem funktioniert.Sein, was verwende ich 90% der Zeit (natürlich auf meine Bedürfnisse abhängig) ...
Beispiel:
DECLARE
v_exist varchar2(20);
BEGIN
FOR rec IN
(SELECT LOT, COMPONENT
FROM TABLE
WHERE REF_DES = (SELECT REF_DES FROM TABLE2 WHERE ORDER = '1234')
AND ORDER = '1234')
LOOP
v_exist := "IT_EXISTS"
INSERT INTO EAT_SOME_SOUP_TABLE (LOT, COMPONENT)
VALUES (rec.LOT, rec.COMPONENT);**
--Since I don't want to do this for more than one iteration (just in case there may have been more than one record returned, I will EXIT;
EXIT;
END LOOP;
IF v_exist IS NULL
THEN
--do this
END IF;
END;
--Dieser außerhalb der Schleife ist hier die IF-CHECK nur oben wird run unabhängig, aber dann wissen Sie, ob Ihre Variable null oder nicht richtig ist!?. Wenn KEINE Datensätze zurückgegeben wurden, wird die Schleife übersprungen und Sie gehen einfach zu dem Code, den Sie als nächstes haben würden ... Wenn (in unserem Fall oben) 4 Datensätze zurückgegeben würden, würde ich nach der ersten Iteration aufgrund meines EXITs beenden ; ... Wenn das nicht da wäre, würden die 4 Datensätze durchgehen und alle einfügen. Oder zumindest versuchen Sie es auch. Es
By the way, ich sage nicht, dies die einzige Möglichkeit ist, dass Sie dies in Erwägung ziehen sollte ... Sie können
SELECT COUNT(*) INTO v_counter WHERE ******* etc...
überprüfen Sie es dann wie
if v_counter > 0
THEN
--code goes here
END IF;
Es gibt mehr Möglichkeiten ... Bestimmen Sie es einfach, wenn Ihre Notwendigkeit entsteht. Achten Sie auf Leistung und Sicherheit.
(Sehr alte Frage, ich weiß ...) Manchmal muss ich eine einfache Überprüfung nach "ist das eine gültige ID-Nummer" (dh existiert es bereits) von einem serverseitigen Programm (PHP), also mache ich eine einfache SQL-Abfrage: 'SELECT null FROM table_name WHERE id =: id' (mit vorbereiteten Anweisungen,': id'). Wenn Zeilen zurückgegeben wurden, lautet die Antwort ja. Ansonsten, nein. Die tatsächlich zurückgegebenen Daten sind irrelevant. – user128216