لماذا تشغيل هذا الاستعلام مع تنفيذ السبب الفوري الذي يفشل فيه؟

StackOverflow https://stackoverflow.com/questions/885304

سؤال

أنا أكتب إجراء PL / SQL الذي يحتاج إلى إنشاء بعض الاستفسارات بشكل حيوي، وهو واحد منها ينطوي على إنشاء جدول مؤقت باستخدام النتائج من استعلام مأخوذة كمعلمة.

CREATE OR REPLACE PROCEDURE sqlout(query IN VARCHAR2)
IS
BEGIN
EXECUTE IMMEDIATE  'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ');';
END;

إنه يجمع بشكل صحيح، ولكن حتى مع استفسارات بسيطة للغاية مثل مع:

BEGIN
    sqlout('SELECT * FROM DUAL');
END;

يرميها ORA-00911: invalid character. وبعد إذا قمت بتشغيل الاستعلام الذي تم إنشاؤه يدويا، فإنه يعمل بشكل صحيح. في هذه المرحلة، أنا قادر على تحديد ما يسبب المشكلة.

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

المحلول

حاول أن تفقد "؛" من داخل السلسلة التي تنفذها فورية.

EXECUTE IMMEDIATE  'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ')';
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top