समस्या यह है कि SQL*Plus आपके पहले ;
. की व्याख्या कर रहा है कमांड के टर्मिनेटर के रूप में। आपने देखा होगा कि यदि आप किसी टेक्स्ट फ़ाइल में अपने आदेश लिखते हैं और उस पर अमल करते हैं (या इसे SQL*Plus से टेक्स्ट एडिटर में संपादित करते हैं) तो यह काम करता है।
इसे लाइव टाइपिंग के साथ काम करने के लिए, यदि आप वास्तव में ऐसा करना चाहते हैं (ऐसा लगता है कि वे बहुत लंबे होने जा रहे हैं!), तो आप टर्मिनेटर की स्वचालित पहचान को बंद कर सकते हैं SET SQLTERMINATOR off
. ध्यान दें कि आपको SQL*Plus को बताना होगा कि आपका काम हो गया है और इसे /
के साथ निष्पादित करना चाहिए दूसरे ;
. के रूप में निर्देश अनदेखा भी किया जाता है।
SQL> SPOOL myscript.sql
SQL> SET SQLTERMINATOR off
SQL> SELECT q'[SPOOL log
2 SELECT COUNT(*) FROM DUAL;
3 PROMPT Done.
4 ]' FROM DUAL
5 /
SPOOL log
SELECT COUNT(*) FROM DUAL;
PROMPT Done.
यदि आप इन्हें डेटा डिक्शनरी से बना रहे हैं, तो दूसरा विकल्प PL/SQL का उपयोग प्रश्नों और जोड़तोड़ और dbms_output
को करने के लिए करना है। उस आउटपुट को उत्पन्न करने के लिए जिसे आप स्पूल करने जा रहे हैं, जब तक कि अंतिम फ़ाइल का आकार बफर सीमा से अधिक न हो।