2009-08-31 8 views
1

J'écris une procédure simple.Erreur lors de la comparaison des valeurs dans Oracle

DECLARE 
    connection_id LINE.CONNECTION_ID%TYPE := 11009; 
    tmp_integer INTEGER; 
BEGIN 
    SELECT COUNT(*) INTO tmp_integer FROM LINE WHERE LINE.CONNECTION_ID = 11009; 
    DBMS_OUTPUT.PUT_LINE(connection_id); 
    DBMS_OUTPUT.PUT_LINE(tmp_integer); 
END; 

Résultat du lancement:

11009 
3 

Il est bon résultat. J'ai seulement 3 lignes où CONNECTION_ID est 11009. Après modification:

DECLARE 
    connection_id LINE.CONNECTION_ID%TYPE := 11009; 
    tmp_integer INTEGER; 
BEGIN 
    SELECT COUNT(*) INTO tmp_integer FROM LINE WHERE LINE.CONNECTION_ID = connection_id; 
    DBMS_OUTPUT.PUT_LINE(connection_id); 
    DBMS_OUTPUT.PUT_LINE(tmp_integer); 
END; 

Mais dans ce cas, je gagne étrange résultat:

11009 
30997 

Où est l'erreur?

Répondre

3

Essayez de changer le nom de votre variable PL/SQL pour qu'elle soit différente du nom de la colonne dans la table, par ex. v_connection_id.

+0

Oui, c'est une erreur. Merci! –

+0

De rien - Remarque supplémentaire: il est recommandé d'adopter un style de codage qui réduit les risques de collision entre les variables PL/SQL et les noms de colonne, par ex. v_COLUMN_NAME ou vCOLUMN_NAME - dans votre code, cela était facile à repérer, mais les paquets avec de longues définitions de curseur et de nombreuses variables peuvent entraîner beaucoup de déboguage. – dpbradley

Questions connexes