تنفيذ فوري باستخدام شرط إعطاء أخطاء
-
06-07-2019 - |
سؤال
كل شيء ،
أنا جديدة جدا الإجراءات المخزنة بشكل عام ولكن أنا تكافح وخاصة مع أولئك في أوراكل.لقد خلق مثال بسيط جدا من ما أحاول تحقيقه وأنا لا يزال الحصول على نفس الخطأ مع هذا نسخة مبسطة.
على سبيل المثال تخزين الإجراء هو على النحو التالي:
CREATE OR REPLACE PROCEDURE ashish_test
AUTHID CURRENT_USER IS
BEGIN
DECLARE
v_tab VARCHAR2(50);
v_strSQL VARCHAR2(50);
BEGIN
v_strSQL := 'SELECT * FROM :1';
v_tab := 'ex.emp';
EXECUTE IMMEDIATE v_strSQL USING v_tab;
END;
END;
عندما أتصل فوق الإجراء المخزن باستخدام CALL ashish_test()
, أنا الحصول على :
على أساس هذه المادة (انظر على سبيل المثال 7-1), USING
الكلمة يجب أن يحل محل مرقمة نائبا (:1
) داخل v_strSQL
مع القيمة المخزنة في v_tab
.ومع ذلك ، وأظل الحصول على الجدول غير صالح خطأ.أنا أظن أن هذا بسبب EXECUTE IMMEDIATE
هو قادر على استبدال العنصر النائب مع قيمة لسبب ما ولكن أنا لست متأكدا من السبب في ذلك.لا أحد يعرف إذا أنا أفعل شيئا غبيا هنا ؟
أنا على التوالي على قاعدة بيانات أوراكل 10g & استخدام PL/SQL Developer.
المحلول
استخدام البند هو فقط من أجل ربط المتغيرات (أيحيث يمكنك استخدام أسماء الأعمدة في عبارة select), لا أسماء الجداول.الاستخدام النموذجي تبدو مثل هذا:
Select col1 from table1 where col2 = :a
إذا كنت تريد استخدام متغير الجدول الأسماء استخدام شيء مثل هذا:
v_tab := 'ex.emp';
v_strSQL := 'SELECT * FROM ' || v_tab;
EXECUTE IMMEDIATE v_strSQL;