{Oracle} Oracle ( constante )

Fermé
Yofa - 2 nov. 2009 à 11:10
 Évidemment - 3 nov. 2009 à 03:45
Bonjour,

Alors voila! Ca peux paraître très bête comme question mais je ne trouves pas la réponse sur google...

J'ai un programme Oracle qui reste le même a chaque fois à l'exception d'une constante qui est le MOIS de l'extraction des données!
Le mois étant repris a plusieurs reprise dans le programme ( 7 a 8 fois ), je souhaiterais poser une constante 'MOIS' en début de programme pour un gain de temps et pour eviter les erreurs d'oubli...




Exemple : Constante MOIS = 'Mars'

select ...
From ...
Where Moisextraction = MOIS ...


En vous remerciant de vos reponses!

1 réponse

salut

tout d'abord, sache que la constante n'existe pas en PL/QSL. C'est à toi d'écrire du code qui ne modifie pas tes variables. tu peux adopter une méthode 'à la hongroise' et préfixer d'un k les identificateurs des variables que tu souhaites constantes, mais tu n'auras guère plus de protection
une méthode trrrès tirée par les cheveux serait de stocker ta constante dans une table et d'inclure cette table dans tes requêtes (la modification de cette valeur n'interviendrait que sur update et non avec une simple affectation). Mais si on est un tant soit peu réaliste, on se contente de faire attention (si les automates savaient faire attention, ils travailleraient à notre place)

1. tu désires une réelle constante
avant ton begin, poses une section DECLARE dans laquelle tu déclares une variable que tu initialises (et que tu ne toucheras plus dans ton code)
create or replace procedure updMauvaisClients as
declare
  nStatut number := 90;
begin
  ...


2. tu désires un constante "fonction de l'environnement", par ex une date horizon
create or replace function heuresPrevues(
  paramCentre schema.commandes.centre%type
  ) return number
declare
  kHorizon date; -- le k pour se rappeler qu'il faut pas lui affecter une valeur
begin
  select trunc(max(dtLivPrevue)+30, 'MM')
    into kHorizon
    from schema.commandes
    where statut>=40
    and centre = paramCentre;
  -- maintenant que kHorizon est initialisée, on n'y touche plus
  ...


/!\ si le code se trouve dans un trigger => pas de mot-clé declare
0