À l'aide de la Date dans la Clause where
Je suis en train de placer une date dans une clause where. Je veux mettre à jour toutes les lignes dont la colonne de la date avant ou après une certaine date. Comment dois-je préciser que je ne veux mettre à jour ces colonnes. Voici le codage que j'ai jusqu'à présent (pas y compris les noms de colonne):
update table1
set column1 = value
where (select date from table2) < date;
Suis-je sur la bonne voie?
Aussi, quelqu'un pourrait-il expliquer la différence entre SQL et PL/SQL. Je suis dans une classe en PL/SQL pour le moment. Chaque fois que je poste une question sur ce forum, je dis que j'ai une question en PL/SQL, mais les personnes qui ont répondu à ma question de dire qu'une certaine fonction de mise à jour/cas/cas/etc. - est une instruction SQL et pas un PL/SQL. Quelle est la différence?
-Neil
- Je dois mentionner que la façon dont j'ai écrit la date de la clause where est: TO_DATE(01/02/2012); Est-ce la bonne façon d'écrire un type de données date?
- PL/SQL est exclusivement utilisé pour les procédures stockées (fonctions, triggers). SQL est (essentiellement) tout ce que vous écrivez en dehors d'une procédure stockée. Tout cela est très bien documenté dans le manuel
- Vous commencez à apprendre SQL et finalement aller à PL/SQL et PL/SQL avancé.
- Laquelle de ces dates dans votre
where
clause avez-vous spécifié comme ça? Ni aurait vraiment de sens; si le premier, puis celle-ci est inutile, si la seconde, alors... eh bien, celle-ci est inutile de trop, mais vous pourrez aussi mettre à jour toutes les lignes dans le tableau 1. Et à l'aide d'une date fixe, vous devez spécifier le format queto_date('01/02/2013', 'DD/MM/YYYY')
(ouMM/DD/YYYY
en fonction de vos paramètres régionaux), ou à la norme ANSIdate '2013-01-02
. De Plus, vue d'ensemble de PL/SQL à partir de la documentation. PL/SQL est SQL plus de procédure de trucs... - SQL est un L4G et PL/SQL est un L3G. PL/SQL permet de SQL pour être intégré nativement, mais en général, le SQL, PL/SQL n'est pas considéré comme faisant partie de la PL/SQL de la langue; il est plus utile d'examiner les différentes langues distinctes (mais complémentaires), les fonctionnalités et les capacités.
Vous devez vous connecter pour publier un commentaire.
Votre instruction de mise à jour
est correct et que cela fonctionne, mais uniquement si la requête interne
(select date from table2)
renvoie une seule ligne. Si vous essayez de comparer à une date précise, vous n'avez pas besoin de la requête interne, par exemple:Vous pouvez régler le format de date masque à n'importe quel format de données que vous préférez.
to_date
permettra de convertir de char de type date, etto_char
fait le contraire.SQL est une norme de langage de requête pris en charge par tous conformes à la norme de bases de données relationnelles (avec quelques extensions propriétaires, parfois). SQL n'est pas un langage de programmation. PL/SQL est un langage de programmation procédural qui est pris en charge dans Oracle seulement (Postgres a la même syntaxe). PL/SQL est SQL + la programmation régulière de la langue des fonctionnalités comme les instructions conditionnelles (if/else), les boucles (for), des fonctions et des procédures, par exemple. PL/SQL est utilisée chaque fois qu'il est trop difficile ou impossible d'obtenir des données à l'aide de SQL uniquement.
Comme Aleksey dit, votre question est correct, mais vous devez soit [1] définir les conditions de la sous-SQL afin de retourner uniquement UN enregistrement ou [2] assurez-vous que les données dans tabl2 n'a qu'UN seul enregistrement lorsqu'il s'exécute.
ie
Si vous devez vous référer aux données d'une autre table dans votre clause where envisager explicite des jointures (exemple dans SQL Server) ...
De cette façon, vous n'assument pas, table2 a un seul enregistrement. Elle peut avoir de nombreux enregistrements que tant qu'ils se rapportent à table1 par l'intermédiaire de leurs touches/index et la clause where simplement fait en sorte de vous mettre à JOUR uniquement basée sur des données de table2 qui a un jour de MOINS QUE la date dans le tableau 1.