web-dev-qa-db-fra.com

Comment stocker un résultat unique dans une variable et le réutiliser dans une requête (Oracle)?

J'ai une requête comme

SELECT id FROM xyz WHERE ...;

qui a une clause WHERE plus ou moins complexe et renvoie exactement une ligne avec une colonne (ID). J'ai besoin de cet ID pour plusieurs requêtes ultérieures dans un script. Mon objectif était donc de réutiliser ce résultat dans une variable mais je ne parviens pas à une solution qui fonctionne.

Rejoindre cette requête ne serait pas une bonne option dans ce cas. Est-il donc possible de dire à Oracle de stocker ce résultat unique dans une variable et d'utiliser cette variable pour créer de nouvelles requêtes - à utiliser explicitement dans la clause conditionnelle d'autres requêtes?

Si oui, quelqu'un pourrait peut-être publier un exemple simple - le plus simple serait peut-être qch. comme

SELECT :VARIABLE FROM DUAL
6
cljk

Pour Toad, de this réponse sur SO:

Je pense que cela accomplira ce que vous voulez. Vous pouvez déclarer une variable de liaison, y insérer une valeur, puis l'utiliser dans de futures instructions.

variable l_var varchar2(1);

begin
  select dummy
    into :l_var
    from dual;
end; 

select *
from dual
where dummy = :l_var;

Cela fait une différence ... SQL * Plus peut utiliser des variables, mais elles sont une fonctionnalité SQL * Plus et vous pouvez simplement saisir ce bloc de code et le transmettre à un backend Oracle pour l'exécuter (comme vous le pourriez avec un bloc Transact SQL par exemple).

Vous pouvez choisir entre l'utilisation de variables de liaison dans SQL * Plus comme suit: http://www.adp-gmbh.ch/ora/sqlplus/use_vars.html

Ou utilisez les propres variables de SQL * Plus avec les commandes DEFINE et COLUMN: http://www.adp-gmbh.ch/ora/sqlplus/new_value.html

Si vous avez vraiment besoin que le code soit exécutable dans d'autres environnements, vous devrez probablement emprunter la route PL/SQL.

1
Colin 't Hart