2010-07-29 30 views
15

एक .SQL स्क्रिप्ट फ़ाइल चींटी से यह निम्नलिखित कार्य का उपयोग कर ठीक काम करता है निष्पादित करने के लिए:एएनटी एसक्यूएल कार्य: एसक्यूएल और पीएल/एसक्यूएल कैसे चलाएं और निष्पादन विफलता नोटिस करें?

<sql 
    classpath="${oracle.jar}" driver="oracle.jdbc.OracleDriver" 
    url="jdbc:oracle:thin:@@@{db.hostname}:@{db.port}:@{db.sid}" 
    userid="@{db.user}" 
    password="@{db.password}" 
    src="@{db.sql.script}" /> 

लेकिन अगर sql फ़ाइल न केवल शुद्ध एसक्यूएल शामिल लेकिन यह भी PL/SQL कार्य असफल हो जायेगी। यह निम्नलिखित स्निपेट का उपयोग करके हल किया जा सकता:

<sql 
    classpath="${oracle.jar}" driver="oracle.jdbc.OracleDriver" 
    url="jdbc:oracle:thin:@@@{db.hostname}:@{db.port}:@{db.sid}" 
    userid="@{db.user}" 
    password="@{db.password}" 
    delimiter="/" 
    delimitertype="row" 
    src="@{db.sql.script}" /> 

लेकिन मेरी स्क्रिप्ट शामिल दोनों एसक्यूएल और PL/SQL तो न चींटी कार्य काम करेंगे। एक अन्य समाधान "sqlplus" के साथ "कार्यकारी" कार्य का उपयोग करने के होगा:

<exec executable="sqlplus" failonerror="true" errorproperty="exit.status"> 
    <arg value="${db.user}/${db.password}@${db.hostname}:${db.port}/${db.sid}"/> 
    <arg value="@${db.sql.script}"/> 
</exec> 

लेकिन दुर्भाग्य से इस कार्य के असफल कभी नहीं होगा, इसलिए निर्माण के साथ "सफल" हमेशा रिटर्न भले ही एसक्यूएल स्क्रिप्ट निष्पादन में विफल रहा है। त्रुटि प्रॉपर्टी जिसे मैंने सेट करने का प्रयास किया है, कोई त्रुटि कोड नहीं लौटाएगा।

कोई समस्या/सुझाव इस समस्या को हल करने के लिए कैसे करें?

धन्यवाद,

पीटर

उत्तर

6

पीटर,

लिपियों

WHENEVER SQLERROR EXIT SQL.CODE; 

फिर sqlplus बाहर निकलने के कोड के साथ बाहर निकल जाएगा की शुरुआत में जोड़ें! = 0.

6

सुंदर देर से, मुझे लगता है - लेकिन मुझे उम्मीद है कि यह किसी की मदद करेगा:

आम तौर पर, मुझे लगता है कि हमें कई कारणों से निष्पादन योग्य = "sqlplus" निष्पादित करने के बजाय एसक्यूएल का उपयोग करना चाहिए, जैसे: यदि हम डीबी प्रदाता को बदलते हैं, तो आप एसक्यूएल के साथ एक नई प्रक्रिया में पुनर्विक्रय नहीं करते हैं, "

myScript.sql:

के रूप में वैसे भी आदि

sqlplus.exe करने का विरोध छोड़ने का काम "होगा, तो यहां आपको दोनों PL/SQL & एक ही स्क्रिप्ट में एसक्यूएल जाने के लिए इतना है कि यह काम करेगा पर एक सुझाव है


<copy todir="..."> 
    <fileset dir="...." includes="myScript.sql"/> 
    <filterchain> 
    <replaceregex byline="false" pattern=";" replace="{line.separator}/" flags="mg"/> 
    <replaceregex byline="false" pattern="/[\s]*/" replace=";${line.separator}/" flags="mg"/> 
    </filterchain> 
</copy> 

तो परिणाम के लिए दे: <sql delimeter="/" src="myScript.sql"/>

explaination: आप नियमित रूप से एसक्यूएल आज्ञाओं है:

drop table x; 
select blah from blue where bli=blee; 

वे करने के लिए परिवर्तित हो जाएगा:

drop table x 
/
select blah from blue where bli=blee 
/

जो equivlant है - और "/" डिलीमीटर के साथ sql कमांड उन्हें संभाल सकता है।

BEGIN 
    blas 
END; 
/

वापस करने के लिए बदल दिया तो यह सबके लिए खुश -

BEGIN 
    blas 
END/ 
/

और दूसरा regex का उपयोग कर:

दूसरी ओर,

BEGIN 
    blah 
END; 
/

में तब्दील कर दिया जाएगा! हुर्रे!

शुभकामनाएं।

+0

मैंने स्लिम के साथ अर्धविराम को प्रतिस्थापित करने की कोशिश की और यह ठीक काम करता है। हालांकि मेरे पास कुछ पैकेज स्क्रिप्ट बनाते हैं जो मेरे पास सेमी कॉलन के साथ हैं। यदि मैं स्लैश चींटी के साथ अर्ध कोलन को प्रतिस्थापित करता हूं तो सफलतापूर्वक एसक्यूएल स्क्रिप्स निष्पादित करता है लेकिन त्रुटि के कारण सभी संकुल संकलन त्रुटियों के साथ बनाए जाते हैं 'एनकॉन्टेड प्रतीक /' क्या इस मुद्दे को हल करने के कोई तरीके हैं? धन्यवाद – user75ponic

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