سؤال

يقوم PostgreSQL بتنفيذ execute ... using خيار تمرير المعلمات إلى SQL الديناميكي، وبقدر ما أستطيع أن أقول تم تقديم هذه الميزة في الإصدار 8.4.نحن نستخدم Greenplum، وهو متشعب من PostgreSQL في الإصدار 8.2، لذا فهو لا يحتوي على هذه الميزة.

هل هناك أي طريقة أخرى للقيام بنفس الشيء في Greenplum أو PostgreSQL 8.2؟

هل كانت مفيدة؟

المحلول

لا أستطيع أن أقول على وجه اليقين، ولكن هناك تلميح في CREATE FUNCTION توثيق:

langname اسم اللغة التي يتم تنفيذ الوظيفة فيها.قد يكون SQL أو C أو داخليًا أو اسم لغة إجرائية محددة من قبل المستخدم.راجع إنشاء لغة للتعرف على اللغات الإجرائية المدعومة في قاعدة بيانات Greenplum.

بدوره، يقول المكان المشار إليه

يتم تثبيت لغة 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;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى dba.stackexchange
scroll top