Mit Datum in der Where-Klausel
Ich versuche zu Ort, ein Datum in einer where-Klausel. Ich möchte update alle Zeilen in denen die Spalte Datum vor oder nach einem bestimmten Datum. Wie kann ich festlegen, dass ich nur aktualisieren möchten, müssen Sie diese Spalten. Hier ist die Codierung, die ich bisher (nicht einschließlich der bestimmten Spalte Namen):
update table1
set column1 = value
where (select date from table2) < date;
Bin ich auf dem richtigen Weg?
Auch, könnte jemand bitte erklären Sie den Unterschied zwischen SQL und PL/SQL. Ich nehme eine Klasse in PL/SQL im moment. Wann immer ich eine Frage auf diesem forum ich sage, dass ich eine Frage in PL/SQL, aber die Menschen, die Antwort auf meine Frage sagen, dass eine bestimmte Funktion - update/, wenn/Fall/etc. - ist eine SQL-Anweisung und nicht um eine PL/SQL-Anweisung. Was ist der Unterschied?
-Neil
- Ich sollte erwähnen, dass die Art und Weise, dass ich schrieb das Datum in der where-Klausel ist: TO_DATE(01/02/2012); Ist das der richtige Weg to schreiben Sie einem date-Datentyp?
- PL/SQL ist ausschließlich für gespeicherte Prozeduren (Funktionen, Trigger). SQL ist (im wesentlichen) alles, was Sie schreiben außerhalb einer gespeicherten Prozedur. Das ist alles sehr gut dokumentiert im Handbuch
- Sie beginnen das erlernen von SQL und schließlich zu PL/SQL und advanced PL/SQL.
- Welche der Termine in Ihrem
where
- Klausel haben Sie so angegeben? Weder würde wirklich Sinn machen, wenn man dann die untergeordneten select-Anweisung ist sinnlos, wenn das zweite, dann... naja, die untergeordneten select-Anweisung ist sinnlos zu, aber Sie werden auch aktualisieren Sie entweder alle oder keine Zeilen in Tabelle 1. Und mit einem festen Termin, sollten Sie das format angeben, wieto_date('01/02/2013', 'DD/MM/YYYY')
(oderMM/DD/YYYY
je nach locale), oder als ANSI-standarddate '2013-01-02
. Plus, übersicht von PL/SQL aus dem docs. PL/SQL SQL plus prozedurale Zeugs... - SQL ist eine 4GL-und PL/SQL ist eine 3GL. PL/SQL können SQL eingebettet werden nativ, aber in der Regel die SQL in PL/SQL nicht als Teil des PL/SQL-Sprache; es ist mehr hilfreich, um Sie zu betrachten trennen Sie die Sprachen, die mit unterschiedlichen (aber sich Ergänzende) Funktionen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Update-Anweisung
ist richtig und es wird funktionieren, aber nur, wenn die innere Abfrage
(select date from table2)
gibt eine einzelne Zeile zurück. Wenn Sie versuchen, zu vergleichen, zu bestimmten Datum, das Sie nicht brauchen, die innere Abfrage, zum Beispiel:Können Sie einstellen, Datumsformat Maske, was auch immer das format der Daten, die Sie bevorzugen.
to_date
konvertieren von char zu Datum, Typ, undto_char
tun das Gegenteil.SQL ist eine standardisierte Abfragesprache, unterstützt von allen kompatiblen relationalen Datenbanken (mit einigen proprietären Erweiterungen manchmal). SQL ist keine Programmiersprache. PL/SQL ist eine prozedurale Programmiersprache, unterstützt nur Oracle (Postgres hat eine ähnliche syntax). PL/SQL ist SQL + regelmäßige Programmiersprache, die Funktionen wie bedingte Anweisungen (if/else), Schleifen (for), Funktionen und Prozeduren und so. PL/SQL wird verwendet, wenn es zu schwierig oder unmöglich, um einige Daten mit SQL allein.
Als Aleksey erwähnt, wird die Abfrage korrekt ist, aber Sie brauchen, um entweder [1] die Bedingungen, die rund um die sub-SQL nur EIN Datensatz zurückgegeben oder [2] stellen Sie sicher, dass die Daten in tabl2 hat nur EINEN Datensatz, wenn es läuft.
ie
Wenn Sie zum verweisen auf Daten aus einer anderen Tabelle in der WHERE-Klausel erwägen, explizite joins (Beispiel in SQL-Server) ...
So dass Sie nicht davon ausgehen, dass table2-Tabelle hat nur einen Datensatz. Es können viele Datensätze haben, solange Sie sich auf Tabelle1 über Ihre Schlüssel/Indizes und die WHERE-Klausel macht einfach sicher, dass Sie nur zu AKTUALISIEREN, basierend auf den Daten aus Tabelle2, dass ein Datum KLEINER ALS das Datum in Tabelle1.