2013-09-04 1 views
7

मैं एक HSQL डेटाबेस 2.2.9 आरंभ कर रहा हूँ मौजूदा नहीं वसंत के माध्यम सेHSQL: अगर

<jdbc:initialize-database enabled="true"> 
    <jdbc:script execution="INIT" location="classpath:./create-tables.sql" /> 
</jdbc:initialize-database> 

में बनाने-tables.sql का उपयोग कर रहा

CREATE TABLE IF NOT EXISTS MyTable(...); 

का उपयोग टेबल भी एक है सूचकांक बनाया जा रहा है सूचकांक। मैं हमेशा ड्रॉप और इंडेक्स बनाने से बेहतर तरीका ढूंढ रहा हूं।

मैंने कोशिश की:

CREATE INDEX IF NOT EXISTS myIndex ...; 
  • काम नहीं करता है

मैं एक समारोह indexExisting() बना सकते हैं प्रणाली टेबल जाँच और गिनती (*)> 0 लौटने अगर सूचकांक पाया जाता है , लेकिन अगर मैं

IF indexExisting() = 0 THEN ... 

सीधे .sql फ़ाइल में लिखता है, तो यह कहता है

java.sql.SQLSyntaxErrorException: unexcepted token: IF 

इसके अलावा एक संग्रहीत प्रक्रिया के रूप में वे ड्रॉप बयान शामिल नहीं हो सकता, जहाँ तक मैंने पढ़ा है, मदद करने के लिए प्रतीत नहीं होता।

तो इंडेक्स को छोड़ने/बनाने के अलावा अन्य समाधान की सराहना की जाएगी।

धन्यवाद

+0

मैं नहीं बल्कि सभी स्कीमा प्रवास Liquibase या Flyway जैसे उपकरण जो रहता है का उपयोग करते हुए बयान को चलाने वाली इच्छित लागू किया गया है का ट्रैक और क्या किये जाने की आवश्यकता है। –

+0

धन्यवाद, मैं उन उपकरणों की जांच करूंगा। एसक्यूएल-स्क्रिप्ट में एक और दोष है, जो अभी तक मौजूद इंडेक्स को छोड़ने का प्रयास करते समय अपवाद फेंक रहा है। अभी के लिए, मैंने इसे कक्षाओं के माध्यम से तालिकाओं और सूचकांक में बदलने के लिए बदल दिया, जहां अपवाद को पकड़ लिया जा सकता है। – pma

+1

'ड्रॉप इंडेक्स मौजूद है अगर my_index' अपेक्षित तरीके से काम करेगा। हालांकि, 'my_table (my_column) पर my_index मौजूद नहीं होने पर इंडेक्स बनाएं,' if' नामक एक इंडेक्स बनायेगा। इसमें आपके द्वारा निर्धारित सटीक विशेषताओं का नाम होगा, नाम और तथ्य को छोड़कर कि यह बिना शर्त रूप से बनाया गया है और दो बार निष्पादित होने पर विफल हो जाएगा। अभी भी एक समाधान की तलाश है - इंडेक्स को छोड़ना और पुनर्निर्माण करना हर बार एक बड़े डीबी पर काफी महंगा हो सकता है। – user149408

उत्तर

3

HSQLDB के नवीनतम संस्करण को दोनों का समर्थन करता है:

CREATE INDEX IF NOT EXISTS myIndex ... 
DROP INDEX IF EXISTS myIndex 
+0

स्विंग डेटाबेस प्रबंधक – pma

+1

के माध्यम से वी 2.3.4 के साथ इसका परीक्षण किया वास्तव में, मुझे अजीब व्यवहार मिल रहा है। यदि मैं test_table (field1, field2) पर ix_test1 मौजूद नहीं है, तो 'इंडेक्स बनाएं' का उपयोग करें, 'मैं 'if' नामक इंडेक्स के साथ समाप्त होता हूं और फिर कमांड चलाता हूं, मुझे' ऑब्जेक्ट का नाम पहले से मौजूद है '। एचएसक्यूएल 2.3.3 का उपयोग करना। –

+1

2.3.4 का प्रयास करें, 2.3.3 नहीं। – fredt

संबंधित मुद्दे