J'ai un script SQL qui est exécuté au crapaud. Actuellement, je l'ai disposé avec juste une déclaration après la déclaration, donc: et ainsi de suite. Certains des clauses suivantes sont répétitives car elles ont des requêtes internes complexes pour obtenir des identifiants particuliers à utiliser. J'aimerais capturer l'identifiant au début du script dans une variable, puis utiliser cette variable dans les clauses suivantes. Alors quelque chose comme ceci: p> évidemment, je fais cette syntaxe, mais c'est ce que je cherche. Mais je ne suis pas sûr que cela soit possible dans un script de crapaud. Je sais que je peux convertir le tout en un bloc PL / SQL, mais j'essaie d'éviter de devoir faire cela pour diverses raisons. P> Toute façon de le faire en utilisant du crapaud sans convertir à un PL / SQL Bloc? P> P>
5 Réponses :
Je n'utilise plus activement le crapaud, mais il devrait y avoir un mécanisme de réglage des valeurs de paramètres de liaison, c'est-à-dire que Vous pouvez également créer une variable de la valeur de contexte de session ou une variable de package PL / SQL (Remarque: pas la même chose que la réécriture de votre code entier à utiliser PL / SQL). Voir Cette question p> Sélectionnez un tel-et tel de quelque part où id =: myid; code> tel que chaque fois qu'il se produit TOAD fournit la même valeur pour ce paramètre. p>
Je suis au courant de ce que vous parlez de variables liées. Cependant, je veux capturer la valeur d'une autre déclaration de sélection. La variable est potentiellement une valeur différente chaque fois que j'exécute le script.
Alors, définissez-la différemment au début chaque fois que vous l'exécutez. Si vous allez l'itinéraire de l'emballage (prenant l'exemple de Thomas Jones-Low), faites alors votre première instruction commencée FOO.MYVAR: = 'Tout ce que je veux ce temps »; finir;
Je pense que cela accomplira ce que vous voulez. Vous pouvez déclarer une variable de liaison, insérer une valeur dans celle-ci, puis l'utiliser dans les dernières instructions.
variable l_var varchar2(1); begin select dummy into :l_var from dual; end; select * from dual where dummy = :l_var;
La fonction "champs calculée" dans TOad est en fait assez puissant si utilisé de la bonne manière. Ce n'est rien de plus qu'un éditeur de script "jeton" qui se fixe à la requête elle-même. Il est uniquement disponible via l'éditeur de conception de la requête et non à partir de l'éditeur natif, ce qui vous permet d'écrire directement up SQL. P>
comme indice, la prochaine fois que vous créez une requête conçue dans du crapaud et que vous devez créer un complexe où ou des sous-requêtes, essayez la fonctionnalité "Champs calculée" et utilisez l'option Formulaires pour attacher ci-elles que vos conditions à une colonne ou une requête donnée . Vous serez surpris à quel point c'est puissant. Et cela aide à garder votre requête SQL dans un bon format lisible. P>
J'utilise des variables de substitution SQL * plus. Ils sont soutenus par le crapaud. Vous pouvez exécuter ce code en appuyant sur F5.
COLUMN VAR NEW_VALUE VAR_VALUE SELECT 'SOMETHING' VAR FROM DUAL; --this sets 'VAR_VALUE' = 'SOMETHING' SELECT '&VAR_VALUE' FROM DUAL; --this uses the value set by the previous stmt.
Comme écrit, c'est aussi une bonne réponse: vous pouvez même avoir plusieurs variables et que tout peut être exécuté en tant que script de crapaud. La dernière instruction de la réponse ci-dessus peut être exécutée par elle-même comme une seule requête et Toad vous invitera à chacun des variables & code> -Type; Cependant, même si toutes vos variables ont le même nom, TOAD vous invitera à chacun.
Lorsque je me couche pour faire un "groupe en" en utilisant le résultat du nom de phrase de cas comme ticket, TOAD montre une erreur de dire que le ticket n'est pas un élément valide,
SELECT CASE WHEN ( amt_1 >= 10000000 ) THEN 'R100000' WHEN ( amt_1 < 9000000 and amt_1 >= 8000000 ) THEN 'R090000' WHEN ( amt_1 < 8000000 and amt_1 >= 7000000 ) THEN 'R080000' WHEN ( amt_1 < 7000000 and amt_1 >= 6000000 ) THEN 'R070000' WHEN ( amt_1 < 6000000 and amt_1 >= 5000000 ) THEN 'R060000' WHEN ( amt_1 < 5000000 and amt_1 >= 4000000 ) THEN 'R050000' WHEN ( amt_1 < 4000000 and amt_1 >= 3000000 ) THEN 'R040000' WHEN ( amt_1 < 3000000 and amt_1 >= 2000000 ) THEN 'R030000' WHEN ( amt_1 < 2000000 and amt_1 >= 1000000 ) THEN 'R020000' WHEN ( amt_1 < 1000000 and amt_1 >= 500000 ) THEN 'R010000' WHEN ( amt_1 < 500000 and amt_1 >= 100000 ) THEN 'R005000' WHEN ( amt_1 < 100000 ) THEN 'R001000' END as Ticket, CAST ( SUM(AMT_1/100) AS DECIMAL(10,2) ) Count(*) FROM BASE24.PTLF GROUP BY Ticket
Si vous avez une nouvelle question, veuillez le demander en cliquant sur le bouton Poser une question . Inclure un lien vers cette question si cela aide à fournir un contexte. - de l'avis
Je ne peux pas offrir une réponse, car je ne suis pas familier avec le crapaud, mais quelles sont vos raisons pour ne pas utiliser PLSQL?
Il y a plusieurs raisons pour ne pas passer à PL / SQL. L'un est qu'il est déjà fait 90% et je n'ai pas envie d'investir le temps de changer. Deux sont que les scripts PL / SQL sont plus difficiles à déboguer de mon expérience et sont également plus difficiles à «passer à travers» une déclaration à la fois. Cela pourrait être un manque de connaissances de ma part depuis que je ne suis pas un expert PL / SQL. Troisièmement, je remette ce script sur les autres et à nouveau de mon expérience "SIMPLE" SQL Scripts SQL sont plus faciles à gérer que Pl / SQL.