आपने अपना जावा कोड नहीं दिखाया है, लेकिन स्टैक ट्रेस से ऐसा लगता है कि आप ScriptUtil's executeSqlScript()
विधि
, जो डिफ़ॉल्ट अर्धविराम कथन विभाजक का उपयोग करता है।
यह पीएल/एसक्यूएल ब्लॉक को एक इकाई के रूप में नहीं पहचान रहा है, और इसके बजाय सब कुछ पहले अर्धविराम तक एक स्टैंडअलोन एसक्यूएल कथन के रूप में चलाने की कोशिश कर रहा है - जो मान्य नहीं है और जो त्रुटि आप देख रहे हैं उसका कारण बनता है।
आप उपयोग कर सकते हैं the executeSqlScript()
. का संस्करण
जो आपको डिफ़ॉल्ट को ओवरराइड करने और /
. का उपयोग करने देता है इसके बजाय:
जिसका अर्थ यह होगा कि आपकी स्क्रिप्ट के सभी SQL कथनों को /
. का उपयोग करना होगा अर्धविराम के बजाय विभाजक भी:
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE table_a';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -942 THEN
RAISE;
END IF;
END;
/
CREATE TABLE table_a
(
id VARCHAR(5) PRIMARY KEY,
name VARCHAR(100)
)
/
...
जैसा कि टिप्पणियों में बताया गया है, आपका मूल ब्लॉक वैसे भी बिल्कुल सही नहीं था; और create
PL/SQL के माध्यम से करने की आवश्यकता नहीं है, भले ही drop
होना चाहिए।
लेकिन उस विधि में एक ignoreFailedDrops
. भी है ध्वज, जो ठीक वही करता है जो आप चाहते हैं (हालांकि मैं इसे जांचने के लिए परीक्षण नहीं कर सकता):
यदि आप उस संस्करण का उपयोग करते हैं और उस ध्वज के लिए सत्य पास करते हैं तो आपको ड्रॉप के चारों ओर पीएल/एसक्यूएल रैपर की आवश्यकता नहीं होती है; आप अर्धविराम विभाजक रख सकते हैं और इस पर वापस जा सकते हैं:
DROP TABLE table_a;
CREATE TABLE table_a
(
id VARCHAR(5) PRIMARY KEY,
name VARCHAR(100)
);
...
यदि आपकी स्कीमा स्क्रिप्ट में कोई अन्य पीएल/एसक्यूएल - ट्रिगर, पैकेज इत्यादि शामिल है - तो फिर भी आपको हर चीज के लिए स्लैश विभाजक (या अपनी पसंद का कोई अन्य विभाजक; स्लैश पारंपरिक है) का उपयोग करने के लिए स्विच करने की आवश्यकता होगी।पी>