J'ai eu une question de plsql liée à ma sortie.
Supposons que j'ai une table comme celle-ci: J'ai besoin de créer une fonction qui obtient comme paramètre le pays et me fournit son niveau maximal. P> C'est ce que j'ai écrit : p> et ma sortie est le taux maximal de table des tarifs entiers qui, par exemple, est 6, mais j'avais besoin d'obtenir 3. P> sera reconnaissant de trouver mon bogue :)
Merci! P> p>
3 Réponses :
Vous devez donner à votre paramètre un autre nom que le nom de la colonne dans la table, sinon la condition dans le in conditions où la clause code> est ambiguë.
r.country = pays CODE>, la base de données pense que le deuxième pays code> fait référence au nom de la colonne (non qualifié), pas au paramètre. Cette condition est toujours vraie (sauf si
pays code> est
null code>), et la requête finit par retourner le niveau maximum de la table entière. P>
CREATE OR REPLACE
FUNCTION getMaxLevel(pCountry VARCHAR2)
RETURN NUMBER
IS
MaxLevel NUMBER;
BEGIN
SELECT max(R.Level) INTO MaxLevel
FROM Rates R
WHERE R.country = pCountry;
RETURN MaxLevel;
END getMaxLevel;
/
/*CALL TO CHECK*/
DECLARE
X NUMBER;
BEGIN
X:=getMaxLevel('FRANCE');
dbms_output.put_line(X);
END;
Vous problème est le nom du paramètre. Je recommanderais de le préfixer avec quelque chose comme vous pense em> que dans code>:
pays code> dans votre expression: P>
R.country = Country
niveau code> dans la table (E.G. LVL), c'est le mot clé. LI>
Considérez cet exemple de travail: P>
create or replace function getMaxLevel (Country varchar2) return number is
begin
for r in (
select max (r.Lvl) MaxLevel
from Rates r
where R.country=getMaxLevel.Country
) loop return r.MaxLevel;
end loop;
raise program_error;
end getMaxLevel;
/
var x number
exec :x := getMaxLevel ('FRANCE');
X
-
3