Utilisation de variables dans Oracle script
Il y a une requête complexe qui génère un rapport. La requête a plusieurs sous-requêtes qui génèrent 3-colonnes de la table pour les différents produits. Chaque sous-requête retourne une seule ligne. Toutes les lignes retournées ensuite besoin d'être unis.
Mais il y a une exigence. Si il n'existe pas de lignes de résultat pour une sous-requête, nous devons inclure le produit correspondant au rapport final de toute façon, mais préciser que Trades_Count est égal à zéro.
Je peux le faire en utilisant un ensemble de variables. Le code suivant fonctionne parfaitement dans MS SQL Server:
DECLARE @PRODUCT_NAME_1 nvarchar(100);
DECLARE @OFFER_VALID_DATE_1 datetime;
DECLARE @TRADES_COUNT_1 int;
DECLARE @PRODUCT_NAME_2 nvarchar(100);
DECLARE @OFFER_VALID_DATE_2 datetime;
DECLARE @TRADES_COUNT_2 int;
--Product 1
select @PRODUCT_NAME_1 = PRODUCT_NAME, @OFFER_VALID_DATE_1 = MAX(EXPIRY_DATE), @TRADES_COUNT_1 = COUNT(DEAL_NUMBER)
from (
--Data extractions with several joins goes here....
) as TempTable1
GROUP BY PRODUCT_NAME
--Product 2
select @PRODUCT_NAME_2 = PRODUCT_NAME, @OFFER_VALID_DATE_2 = MAX(EXPIRY_DATE), @TRADES_COUNT_2 = COUNT(DEAL_NUMBER)
from (
--Data extractions with several joins goes here....
) as TempTable2
GROUP BY PRODUCT_NAME
SELECT ISNULL(@PRODUCT_NAME_1,'Product 1') AS PRODUCT_NAME, @OFFER_VALID_DATE_1 AS MAX_MATURITY, ISNULL(@TRADES_COUNT_1,0)
UNION
(
SELECT ISNULL(@PRODUCT_NAME_2,'Product 2') AS PRODUCT_NAME, @OFFER_VALID_DATE_2 AS MAX_MATURITY, ISNULL(@TRADES_COUNT_2,0)
)
Je pense que je n'ai pas utilisé quelque chose de ce T-SQL spécifique, mais par pure ANSI-SQL (je ne suis pas sûr à 100% si).
C'est donc pas de travail dans Oracle.
Tout d'abord, il nécessite d'avoir une seule clé DECLARE. Puis elle me force à l'aide de Commencer ... la Fin d'exécution de la portée. Alors il ne me permet pas d'attribuer des variables comme je le fais (voir l'exemple ci-dessus) – je besoin pour utiliser“, Sélectionnez DANS la” déclaration de la place. Après tous les calculs sont faits, il ne me permet pas de sélectionner les valeurs de variables locales. Heck.
Personne ne sait comment le faire fonctionner dans Oracle?
Merci!
OriginalL'auteur Bashir Magomedov | 2011-02-18
Vous devez vous connecter pour publier un commentaire.
PL/SQL est différent de celui de t-sql, j'ai fait un changement, avec quelques commentaires pour vous, mais certainement regarder les liens à partir d'Andy. C'était couru dans oracle SQL Developer gratuit (qui a aussi une "Traduction de Zéro Gestionnaire (outils>Migration>Traduction de Zéro Gestionnaire) que l'on peut utiliser.
Oracle concepts utilisés ici:
Double Tableau , NVL, Les Variables, pl/sql Exception
et de regarder ce http://www.dba-oracle.com/t_convent_sql_server_tsql_oracle_plsql.htm
OriginalL'auteur Harrison
PL/SQL formats de procédure blocs différemment de T-SQL.
Vous aurez envie d'utiliser la structure suivante:
Vous n'utilisez pas le @, soit en PL/SQL. Suffit d'utiliser des noms de variables directement.
OriginalL'auteur Jordan Parmer