एसक्यूएल प्रश्नों में 'गोटो' कथन का उपयोग करना अच्छा अभ्यास है?एसक्यूएल - गोटो स्टेटमेंट
उत्तर
एसक्यूएल पर निर्भर करता है - कुछ बोलीभाषाएं गोटो के अलावा प्रवाह नियंत्रण के लिए उपयोगी तंत्र प्रदान नहीं करती हैं।
गोटो आम तौर पर खराब रूप है।
मेरा अनुमान नहीं होगा। किसी भी आधुनिक भाषा में गेटो स्टेटमेंट के साथ मेरा सामान्य नियम है, यदि आप उनका उपयोग करते हैं, तो आपके डिजाइन में कुछ गड़बड़ है।
सं
अन्य भाषाओं की तरह ही, लगभग हमेशा एक गोटो से उपयोग करने के लिए एक बेहतर विकल्प है।
यदि आप हमें बताते हैं कि आप कौन सी एसक्यूएल पैकेज का उपयोग कर रहे हैं और आप क्या हासिल करने की कोशिश कर रहे हैं, तो हम आपको यह बता सकते हैं कि वास्तव में कौन सा फिट हो सकता है।
यह किसी द्वारा लिखित एक संग्रहीत प्रक्रिया है। – SoftwareGeek
@hejaFry - लेकिन क्या यह टी-एसक्यूएल, पीएल-एसक्यूएल, माईएसक्यूएल, आदि है? –
यह टी-एसक्यूएल है, pl-sql समर्थन goto नहीं होगा? – SoftwareGeek
उत्पादन कोड में नहीं, लेकिन परीक्षण के लिए ठीक हो सकता है।
उदाहरण के लिए, एक संग्रहीत प्रक्रिया के लिए रिग्रेशन परीक्षण प्रदान करना चाहते हैं जहां "सामान्य बिट" परीक्षण की प्रक्रिया और डीबग कथन की कॉल है।
declare @test int;
set @test = 1;
goto tests
common:
print "common bit"
tests:
if @test = 1 print "1";
if @test = 2 print "2";
if @test = 3 print "3";
set @test = @test + 1;
if @test <= 3 goto common
print "finished " + cast(@test as varchar(5))
go -- goto can not be used past go!
एक टी एसक्यूएल noob मैं प्रक्रिया या समारोह के लिए उम्मीद कर रही थी दायरे के भीतर घोषित करने के लिए "आम बिट" ऐसा करने के लिए होने के नाते, लेकिन यह सबसे अच्छा मैं बहुत बाद googling के साथ आ सकता था। आपको प्रत्येक कोड के लिए एक संग्रहीत प्रक्रिया क्यों सेट अप करनी होगी जिसे आप दोबारा उपयोग करना चाहते हैं। विशेष रूप से गैर उत्पादन के काम के लिए।
आप GOTO का उपयोग कर कार्यक्षमता के छोटे बिट्स का उपयोग करने के बारे में एक महान बिंदु बनाते हैं। :-) हमें टी-एसक्यूएल में लैम्ब्डा एक्सप्रेशन की ज़रूरत है! ;-) –
goto अपनी विशेषता के साथ कीवर्ड है। जब भी इसे सीधे कुछ स्तर तक कूदने की आवश्यकता होती है तो हम गोटो का उपयोग कर सकते हैं।
उदाहरण लेते हैं ... मेरी संग्रहीत प्रक्रिया में मुझे 4 temp तालिकाओं में डेटा लेने के साथ काम करने की आवश्यकता है। temp तालिका में रिकॉर्ड डालने के बाद प्रत्येक स्तर पर मुझे यह जांचना होगा कि इस अस्थायी अस्थायी में रिकॉर्ड मौजूद हैं या नहीं, अगर कोई रिकॉर्ड नहीं डाला गया है तो आगे प्रसंस्करण के बजाय मैं सीधे गेटो का उपयोग करके नीचे कूद सकता हूं।
CREATE TABLE #tmpMsNos (custPo CHAR(24))
CREATE TABLE #tmpValidBilltos (billto CHAR(12))
CREATE TABLE #tmpOrders (
fh_pkey INT
,fh_id CHAR(8)
,custPo CHAR(24)
,lastchOfCustInsert DATETIME
)
CREATE TABLE #tmpOrdersFiltered (
fh_pkey INT
,fh_id CHAR(8)
,custPo CHAR(24)
,lastchOfCustInsert DATETIME
,onbDate DATETIME
,rapDate DATETIME
)
CREATE TABLE #tmpLoad (
custPo CHAR(24)
,ld_pkey INT
,ld_wkpmpn CHAR(25)
,lda_barcode VARCHAR(30)
,ld_createdOn DATETIME
,ReceivedDate DATETIME
,DispatchedDate DATETIME
)
INSERT INTO #tmpMsNos
SELECT cast(itemValue AS CHAR(24))
FROM dbo.fn_array_to_table(@pMsNos, ',')
IF (
NOT EXISTS (
SELECT 1
FROM #tmpMsNos
)
)
BEGIN
GOTO label
END
INSERT INTO #tmpValidBilltos
SELECT CONVERT(CHAR(12), xm_doref)
FROM xmlref x
WHERE xm_element = 'THD-BoxtruckRequest'
AND xm_attribute = 'THD-BoxtruckBillto'
IF (
NOT EXISTS (
SELECT 1
FROM #tmpValidBilltos
)
)
BEGIN
GOTO label
END
INSERT INTO #tmpOrders
SELECT fh.fh_pkey
,fh.fh_id
,fh.fh_custPo
,max(coc.ch_dt)
FROM #tmpMsNos msNos
INNER JOIN fcfgthd fh ON msNos.custPo = fh.fh_custPo
INNER JOIN #tmpValidBilltos bt ON bt.billto = fh.fh_bt_id
LEFT JOIN chofcust coc ON coc.ch_fhpkey = fh.fh_pkey
WHERE fh.fh_statcode NOT IN (
98 --CAN
,99 --DEL
)
AND fh.fh_ship_dt > @startDate
GROUP BY fh.fh_pkey
,fh.fh_id
,fh.fh_custPo
IF (
NOT EXISTS (
SELECT 1
FROM #tmpOrders
)
)
BEGIN
GOTO label
END
INSERT INTO #tmpOrdersFiltered
SELECT t.fh_pkey
,t.fh_id
,t.custPo
,t.lastchOfCustInsert
,MAX(cocONB.ch_dt)
,MAX(cocRAP.ch_dt)
FROM (
SELECT tmpO.fh_pkey
,tmpo.fh_id
,tmpO.custPo
,tmpO.lastchOfCustInsert
FROM #tmpOrders tmpO
INNER JOIN (
SELECT custpo
,max(lastchOfCustInsert) AS MaxInserteddate
FROM #tmpOrders
GROUP BY custpo
) tmpOgrouped ON tmpO.custpo = tmpOgrouped.custpo
AND tmpO.lastchOfCustInsert = tmpOgrouped.MaxInserteddate
) AS t
LEFT JOIN chofcust cocRAP ON cocRAP.ch_fhpkey = t.fh_pkey
AND cocRAP.ch_stat = 2 -- RAP --TODO: Add comment with status code like 98, 99 -- CAN, DEL for readability - Paresh
LEFT JOIN chofcust cocONB ON cocONB.ch_fhpkey = t.fh_pkey
AND cocONB.ch_stat = 5 -- ONB --TODO: Add comment with status code like 98, 99 -- CAN, DEL for readability - Paresh
GROUP BY t.fh_pkey
,t.fh_id
,t.custPo
,t.lastchOfCustInsert
--TODO: Take an exit if no order found into #tmpOrdersFiltered table, while taking a early exit make sure it doesn't break the calling code (C#) - Paresh
IF (
NOT EXISTS (
SELECT 1
FROM #tmpOrdersFiltered
)
)
BEGIN
GOTO label
END
INSERT INTO #tmpLoad
SELECT o.custPo
,l.ld_pkey
,l.ld_wkpmpn
,la.lda_barcode
,max(coc.ch_dt)
,CASE ISNULL(w.xl_date, '')
WHEN ''
THEN o.rapDate
ELSE w.xl_date
END AS ReceivedDate
,CASE ISNULL(mm.me_ecpkey, '')
WHEN ''
THEN o.ONBDate
ELSE NULL
END AS DispatchedDate
FROM #tmpOrdersFiltered o
INNER JOIN fcload l ON l.ld_fhpkey = o.fh_pkey
LEFT JOIN loadanc la ON la.lda_ldpkey = l.ld_pkey
LEFT JOIN wkxaclog w ON w.xl_ldpkey = l.ld_pkey
LEFT JOIN multiexceps mm ON mm.me_ldpkey = l.ld_pkey
AND mm.me_ecpkey = @missingitemexcep
LEFT JOIN chofcust COC ON coc.ch_ldpkey = l.ld_pkey
AND coc.ch_stat = 64 -- 64= ILH
GROUP BY o.custPo
,l.ld_pkey
,l.ld_wkpmpn
,la.lda_barcode
,w.xl_date
,o.rapDate
,mm.me_ecpkey
,o.ONBDate
- 1. सी ++, क्या यह गोटो स्टेटमेंट जरूरी है?
- 2. एसक्यूएल स्टेटमेंट
- 3. मैं एक गोटो स्टेटमेंट का उपयोग करने जा रहा हूं
- 4. एंड्रॉइड में गोटो स्टेटमेंट का उपयोग कैसे करें
- 5. एसक्यूएल सर्वर मर्ज स्टेटमेंट
- 6. एसक्यूएल-अपडेट स्टेटमेंट
- 7. टी-एसक्यूएल मर्ज स्टेटमेंट
- 8. एसक्यूएल नेस्टेड केस स्टेटमेंट
- 9. टी-एसक्यूएल अपडेट स्टेटमेंट
- 10. एक एसक्यूएल केस स्टेटमेंट
- 11. एसक्यूएल ड्रॉप व्यू स्टेटमेंट
- 12. गोटो बयान
- 13. कोड की गोटो लाइन
- 14. फायरबर्ड एसक्यूएल स्टेटमेंट टेबल डेफिनिशन
- 15. साथ 'गोटो'
- 16. एचक्यूएल में यूनियन एसक्यूएल स्टेटमेंट कैसे करें?
- 17. गतिशील रूप से एसक्यूएल केस स्टेटमेंट
- 18. एसक्यूएल सर्वर कमांड लाइन बैकअप स्टेटमेंट
- 19. अपडेट स्टेटमेंट- भूगोल कॉलम - एसक्यूएल सर्वर
- 20. एसक्यूएल केस स्टेटमेंट जब शून्य नहीं है
- 21. एसक्यूएल चयन स्टेटमेंट पर रिटर्न बूलियन वैल्यू
- 22. केस स्टेटमेंट जहां क्लॉज - एसक्यूएल सर्वर
- 23. एसक्यूएल मेरिज स्टेटमेंट में अद्यतन-नो-ऑप
- 24. उद्देश्य-सी में स्विच स्टेटमेंट में मैं गोटो का उपयोग कैसे कर सकता हूं?
- 25. बेसिक गोटो और GOSUB कथन
- 26. शब्द 2010 स्वचालन: 'गोटो बुकमार्क'
- 27. मर्ज स्टेटमेंट
- 28. गिनती और केस स्टेटमेंट के साथ एसक्यूएल क्वेरी
- 29. एसक्यूएल प्रक्रिया में प्रिंट स्टेटमेंट प्रदर्शन को प्रभावित करना चाहिए?
- 30. टी-एसक्यूएल स्टेटमेंट में उपसर्ग एन का अर्थ क्या है?
http://xkcd.com/292/ – ircmaxell
@ircmaxell मेरी भावनाओं को वास्तव में: लेबल बिंदु है जहां हम कूद चाहिए। – Meiscooldude
एसक्यूएल में कोई 'गोटो' नहीं है - केवल टी-एसक्यूएल –