Problématique

Dans certains cas, il peut être utile de définir des paramètres ou des variables pour des scripts sql sous oracle.

Cas du paramètre

Le paramètre est passé lors de l'appel du script en ligne de commande (par exemple sqlplus) :

sqlplus user/password@serveur @../sql/monscript.sql variable1 variable2

et de les utiliser dans le script avec &1, &2, ...

spool mon_chemin/&1

SELECT champ1, champ2, ...
FROM &2._tab
WHERE

remarque

La notation &variable. est utile lorsqu'il y a une chaîne disponible dérrière le nom de variable. En effet, oracle ne peut pas déterminer la séparation lorsqu'on n'utile pas de séparateur spécifique. dans ce cas, oracle interpéterait &2_tab comme étant l'appel de la variable 2_tab. La notation &2._tab permet de remplaccer &2 par sa valeur et du lui accoler le suffixe _tab.

Cas de la variable

La variable est définie dans le script sql lui-même grâce au mot clef DEFINE ou sa contraction DEF. Par exemple, l'on veut exécuter une requête sur une table partitionnée dont le nom de partition dépend de la date. l'on commence par définir la variable mois:

clear columns
col tbs new_value mois 
select TO_CHAR(add_months(sysdate,-1),'YYYYMM') as tbs from dual;
def mois

Puis, de réaliser la requête SQL en utilisant la variable mois, utilisable sous la forme &mois:

SELECT champ1,champ2, ...
FROM ma_table partition (DEBUT_&mois._FIN) a
WHERE ...

Cas de la constante

La constante est définie au départ du script grâce au mot clef DEFINE ou sa contraction DEF. Par exemple :

define mois=200801

Puis, on réalise la requête SQL en utilisant la variable mois, utilisable sous la forme &mois:

SELECT champ1,champ2, ...
FROM ma_table partition (DEBUT_&mois._FIN) a
WHERE ...