2010-02-08 2 views
3

Mes tables ont des pré-fixations internes que les utilisateurs ne doivent pas connaître.
J'ai donc fait un SP comme ça pour récupérer des lignes.Comment créer un Firebird SP, obtenir des lignes à partir de TABLES dynamiques?

CREATE PROCEDURE p_Test 
(inStation varchar(10)) 
RETURNS 
(ServiceName varchar(20)) 
AS  
DECLARE VARIABLE StationTable varchar(20); 
BEGIN 
    StationTable = 'TSTATION_' || Upper(Trim(inStation)); 

    SELECT StationTable.ServiceName 
    FROM StationTable 
    INTO :ServiceName; 
    suspend; 

END^ 

Je suis un message d'échec comme celui-ci

code d'erreur SQL = -204
Tableau inconnu
STATIONTABLE

Ma version fbclient.dll est 2.1.2.18118.
Mon environnement de test est Flamerobin 0.9.2.1851.

Une idée pour faire ce travail?

Répondre

2

vous pouvez essayer d'utiliser exécuter le bloc:

execute block (inStation varchar(10) = ?) 
returns (ServiceName = varchar(20)) 
as 
DECLARE variable SQL Varchar(300); 
DECLARE VARIABLE StationTable varchar(20); 
begin 
    StationTable = 'TSTATION_' || Upper(Trim(inStation)); 
    SQL := 'SELECT ' || StationTable ||'.ServiceName FROM ' || StationTable || ' INTO :ServiceName;'; 
    execute STATEMENT sql; 
    SUSPEND; 
end 

check here

+0

J'ai essayé votre code. Toujours se terminer avec un message d'erreur > Jeton inconnu - ligne 10, colonne 5 > exécuter – uian

+0

I forget; A la fin de la ligne 9. Peut-être que c'est mieux maintenant. –

0

Merci pour vos conseils, @Hugues Van Landeghem. Je l'ai fait travailler en utilisant les deux mots-clés EXECUTE STATEMENT. Voici mon SP:

CREATE PROCEDURE p_Test (inStation varchar(10)) 
RETURNS (ServiceName varchar(20)) 
AS 
    DECLARE VARIABLE StationTable varchar(20); 
BEGIN 
    StationTable = 'TSTATION_' || Upper(Trim(inStation)); 
    EXECUTE STATEMENT 'SELECT ServiceName FROM ' || StationTable INTO :ServiceName; 
    SUSPEND; 
END^ 
Questions connexes