PostgreSQLはexecute ... using
オプションを実装して、パラメーターを動的SQLに渡します。私が知る限り、この機能はバージョン8.4で導入されました。バージョン8.2でPostgreSQLからフォークされたGreenplumを使用しているため、この機能はありません。
GreenplumまたはPostgreSQL8.2で同じことを行う他の方法はありますか?
はっきりとはわかりませんが、 CREATE FUNCTION
ドキュメント:
langname関数が実装されている言語の名前。SQL、C、内部、またはユーザー定義の手続き型言語の名前の場合があります。 Greenplum Databaseでサポートされている手続き型言語については、CREATELANGUAGEを参照してください。
順番に、参照された場所は言います
PL/pgSQL言語はデフォルトでGreenplumデータベースにインストールされます。
今EXECUTE ... USING
はPL/pgSQL機能であるため、唯一の問題はそれがどのPostgreSQLバージョンからのものであるかです。ドキュメントは8.2を指しています-そしてこのようにあなたは運が悪いように見えます。
Greenplumサポートに連絡して明確な回答を得ましたが、回答が得られませんでした。
その構造の欠如を回避することに関しては、あなたは明らかにあなたが望むどんなSQL文字列も一緒に連結してそれを実行することができます。渡された値を正しく引用し、SQLインジェクションを回避するように注意してください。
Dezsoによって言及された保存された関数を使用することにより、回避策を使用できます。
CREATE OR REPLACE FUNCTION dynamic_query (table_name TEXT) RETURNS VOID AS $$
BEGIN
EXECUTE 'SELECT * FROM ' || table_name || ' WHERE column1 LIKE ''a_value''';
END;
$$ language plpgsql;