2012-12-05 11 views
6

में ओरेकल मेर्ज स्टेटमेंट हमने स्वचालित परीक्षण के लिए मेमोरी डेटाबेस में H2 का उपयोग करना शुरू किया। हम अपने उत्पादन & देव वातावरण के लिए ओरेकल का उपयोग करते हैं। तो विचार है कि एच 2 टेस्ट-डेटाबेस में तालिका संरचना को डुप्लिकेट करना क्योंकि यह हमारे ओरेकल dev-डेटाबेस में है।एच 2 डेटाबेस

ओरेकल एसक्यूएल कथन में मेरिज स्टेटमेंट्स शामिल हैं और तालिका नामों के लिए उपनाम का उपयोग करें और क्वेरी में उपयोग करें।

एच 2 के साथ संगत होने के लिए गतिशील रूप से इस क्वेरी को मैं कैसे संशोधित कर सकता हूं जिससे यह देव पर्यावरण में मौजूदा क्वेरी को परिवर्तित नहीं करता है? Oracle SQL की

उदाहरण के लिए, एच 2 के साथ संगत किए जाने के लिए,

MERGE INTO TABLE T1 
USING (SELECT .... 
     ........... 
     FROM DUAL) T2 

+0

आपकी परियोजना ने स्वचालित परीक्षण के लिए डेटाबेस का एक अलग स्वाद चुना है, एक अलग एसक्यूएल नाटक के साथ? Fnord। यदि आपको अपने आवेदन को फिर से लिखना है ताकि आपके स्वचालित परीक्षण आपके परीक्षणों को साबित कर सकें? – APC

+2

हम H2 चुनते हैं, क्योंकि यह एक इन-मेमोरी डेटाबेस चला सकता है जो बहुत तेज़ है। – user1877775

+0

हां, लेकिन यदि यह एसक्यूएल व्याकरण नहीं चला सकता है तो आप देव और प्रोडक्शन में उपयोग करते हैं, इससे कोई फ़र्क नहीं पड़ता कि परीक्षण कितनी तेजी से चलते हैं, वे अप्रासंगिक हैं। – APC

उत्तर

7

MERGE statement in H2 एक अलग, सरल वाक्य रचना है (T1 & टी 2 तालिका के लिए अन्य नाम हैं):

MERGE INTO TEST(ID, NAME) KEY(ID) 
SELECT 1, 'Hello' FROM DUAL 

मुझे लगता है कि आपको दो कथन लिखना होगा, एक एच 2 के लिए, और एक ओरेकल के लिए। हालांकि SELECT हिस्सा वही होगा। The Oracle MERGE statement अब हो सकता है, मेरा मानना ​​है कि यह होगा:

MERGE INTO TEST T 
USING (SELECT 1 ID, 'Hello' NAME FROM DUAL) D 
ON (T.ID = D.ID) 
WHEN MATCHED THEN 
UPDATE SET T.NAME = D.NAME 
WHEN NOT MATCHED THEN 
INSERT (B.ID, B.NAME) VALUES (D.ID, D.NAME); 
+0

त्वरित प्रतिक्रिया के लिए धन्यवाद। तो, ऊपर दिए गए वाक्यविन्यास के अनुसार इसका मतलब है, मैं H2 में क्वेरी के लिए उपनाम नाम का उपयोग नहीं कर पाऊंगा? – user1877775

+0

हां, लेकिन यह उपनाम नाम नहीं है। कथन का पूरा वाक्यविन्यास अलग है। –

2

मानक SQL मर्ज वाक्य रचना समर्थन एच 2 के the roadmap लिया हुआ है।

हालांकि, कुछ साधारण मामलों में आप सम्मिलित उपयोग कर सकते हैं ... का चयन करें + कहां नहीं उदाहरण के लिए मौजूद है, तो केवल डालने के लिए रिकॉर्ड मौजूद नहीं है

INSERT INTO T1(K1, V2, V3) 
SELECT 1, 2, 3 FROM DUAL 
    WHERE NOT EXISTS (SELECT 1 FROM T1 WHERE 
K1 = 1 AND V2 = 2 AND V3 = 3); 

यह रचनात्मक ओरेकल और एच 2 (कम से कम MODE = Oracle में) दोनों में काम करता है, इसलिए आपके पास परीक्षण और प्रोड के लिए अलग-अलग SQL आवेषण नहीं होते हैं।

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