2010-02-08 3 views
3

В моих таблицах есть внутреннее предварительное исправление, которое пользователи не должны знать.
Итак, я сделал такой SP, чтобы получить строки.Как создать Firebird SP, получить строки из некоторых динамических таблиц?

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^ 

И я получил сообщение потерпеть неудачу, как этот

код ошибки SQL = -204
Таблица неизвестно
STATIONTABLE

Моя fbclient.dll версия 2.1.2.18118.
Мое тестовое окружение - Flamerobin 0.9.2.1851.

Любая идея, чтобы сделать эту работу?

ответ

2

вы можете попробовать использовать выполнить блок:

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 

here проверка

+0

Я пробовал свой код. По-прежнему появляется сообщение об ошибке > Знак неизвестен - строка 10, столбец 5 > выполнить – uian

+0

Я забыл; a конец строки 9. Может быть, сейчас лучше. –

0

Спасибо за ваши советы, @Hugues Ван Landeghem. Я сделал это, используя два ключевых слова: EXECUTE STATEMENT. Вот мой СП:

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^ 
Смежные вопросы