2017-10-02 7 views
2

"from" SELECT COUNT(*) FROM :T_NAMEの変数を使用しようとしましたが、動作しません。どうすればこの問題を解決できますか?この私のコード:ファイヤーバードの "from"内の変数を使用

SET TERM^; 
CREATE OR ALTER PROCEDURE Myfunction 
RETURNS(
    T_NAME varchar(100), 
    NUM_RECORDS integer 
) 
AS 
BEGIN 
    FOR SELECT RDB$RELATION_NAME FROM RDB$RELATIONS 
     WHERE (RDB$SYSTEM_FLAG <> 1 OR RDB$SYSTEM_FLAG IS NULL) AND RDB$VIEW_BLR IS NULL 
     ORDER BY RDB$RELATION_NAME 
     INTO :T_NAME 
    DO 
    BEGIN 
     SELECT COUNT(*) FROM :T_NAME 
     INTO :NUM_RECORDS; 
     SUSPEND; 
    END 
END^ 
SET TERM ;^
+0

これには動的SQLが必要です –

答えて

3

オブジェクト名をパラメータ化することはできません。クエリを動的に構築する必要があります(SQLインジェクションを慎重に開いていない場合)。

具体的にあなたが使用する必要があります。

... 
BEGIN 
    EXECUTE STATEMENT 'select count(*) from "' || T_NAME || '"' 
     INTO :NUM_RECORDS; 
    SUSPEND; 
END 

これは二重引用符が含まれているテーブル名を除いて、安全でなければなりません。技術的に可能な、オブジェクト名に一重引用符で動作を明示的にチェックしていません。これを実際のプロダクションコードで使用する場合は、これらの形式のSQLインジェクションから保護するために特別な手順を実行する必要があります。

+0

ありがとうございます。 –

関連する問題