2010-02-15 8 views
0

Je souhaite obtenir l'ID d'une ligne particulière à partir d'une procédure stockée Firebird 2.1. Je n'arrive pas à me souvenir de la syntaxe, et ça me rend fou.Sélection d'une valeur scalaire dans une procédure stockée Firebird

Voici comment le code peut apparaître dans TSQL, utilisé par Microsoft SQL Server.

@ID = SELECT ID FROM ADDRESS WHERE 
     POBox = :POBOX AND 
     ExtendedAddress = :EXTENDEDADDRESS AND 
     StreetAddress = :STREETADDRESS AND 
     Locality = :LOCALITY AND 
     Region = :REGION AND 
     PostalCode = :POSTALCODE AND 
     CountryName = :COUNTRYNAME; 

Quel est l'équivalent de Firebird?

MISE À JOUR: Le Firebird SQL migration guide suggère que cela devrait fonctionner

SELECT ID INTO :ID FROM ADDRESS WHERE 
     POBox = :POBOX AND 
     ExtendedAddress = :EXTENDEDADDRESS AND 
     StreetAddress = :STREETADDRESS AND 
     Locality = :LOCALITY AND 
     Region = :REGION AND 
     PostalCode = :POSTALCODE AND 
     CountryName = :COUNTRYNAME; 

Mais je reçois une erreur de syntaxe à « INTO » lorsque je tente de créer la procédure stockée.

+0

Pour la postérité, quelle version de FB? – pilcrow

+0

J'utilise Firebird 2.1 et 2.5. Je vais mettre à jour la question pour refléter cela. – dthrasher

Répondre

4

Apparemment, le guide de migration de Firebird est erroné. Cette syntaxe a fonctionné pour moi:

SELECT ID FROM ADDRESS WHERE 
    POBox = :POBOX AND 
    ExtendedAddress = :EXTENDEDADDRESS AND 
    StreetAddress = :STREETADDRESS AND 
    Locality = :LOCALITY AND 
    Region = :REGION AND 
    PostalCode = :POSTALCODE AND 
    CountryName = :COUNTRYNAME 
INTO :ID; 

Notez que la clause INTO doit venir après les clauses FROM et WHERE.

+1

Je suis assez sûr que le point-virgule après ': COUNTRYNAME' est faux. – mghie

+0

Vous avez raison, @mghie! Erreur de copier-coller idiot. J'ai corrigé ma réponse. – dthrasher