Déclarant & de la définition de Variables dans une Instruction Select
Je suis d'essayer d'écrire une requête simple où je déclarer des variables et de les utiliser dans une instruction select dans Oracle. J'ai été en mesure de le faire avant de SQL Server avec les éléments suivants:
DECLARE @date1 DATETIME
SET @date1 = '03-AUG-2010'
SELECT U.VisualID
FROM Usage u WITH(NOLOCK)
WHERE U.UseTime > @Date1
De la recherche que j'ai fait il semble que vous ne pouvez pas déclarer et définir les variables comme ceci dans les instructions Select. Est-ce vrai ou suis-je mssing quelque chose?
Vous devez vous connecter pour publier un commentaire.
De la recherche que j'ai fait il semble que vous ne pouvez pas déclarer et définir les variables comme ceci dans les instructions Select. Est-ce vrai ou ai-je raté quelque chose?
Dans Oracle PL/SQL et SQL sont deux langues distinctes avec deux moteurs séparés. Vous pouvez intégrer SQL DML dans PL/SQL, et qui vous permettra d'obtenir des variables. Telles que les suivantes anonyme PL/SQL bloc. Remarque le
/
à la fin n'est pas une partie de PL/SQL, mais indique à SQL*Plus pour envoyer le bloc précédent.Le problème est qu'un bloc qui est équivalent à votre code T-SQL ne fonctionnera pas:
De transmettre les résultats d'une requête d'un PL/SQL, soit un bloc anonyme, d'une procédure stockée ou une fonction stockée, un curseur doit être déclaré, ouvert et est ensuite retourné au programme appelant. (Au-delà de la portée de la réponse à cette question. EDIT: voir Obtenir resultset de procédure stockée oracle)
L'outil client qui se connecte à la base de données peut avoir sa propre lier les variables. Dans SQL*Plus:
Remarque ci-dessus est dans SQLPlus, ne peut pas (ne sera probablement pas) travailler en Crapaud PL/SQL developer, etc. Les lignes commençant par variable et exec SQLPlus de commandes. Ils ne sont pas SQL ou PL/SQL commandes. Pas de lignes sélectionnées parce que la table est vide.
J'ai essayé et cela a fonctionné:
La
SET
commande est TSQL spécifiques - voici le PLSQL équivalent à ce que vous posté le:Il y a aussi pas besoin de préfixer les variables avec "@"; j'ai tendance à préfixe variables avec "v_" pour distinguer entre les variables & colonnes/etc.
Voir ce fil à propos de l'Oracle équivalent de NOLOCK...
Essayer le to_date fonction.