ऐसी प्रक्रिया को कैसे हटाएं जो नाम अस्पष्ट है?


12

मैं Informix का उपयोग कर रहा हूँ ...

मुझे नहीं पता कि मैंने इसे कैसे किया, लेकिन मेरे डेटाबेस में एक ही नाम के साथ दो प्रक्रियाएं हैं। जब मैं उन्हें हटाने की कोशिश करता हूं

DROP PROCEDURE myProc;

तब मुझे एक त्रुटि संदेश मिलता है

ERROR: Routine (add_adr_trigger_row) ambiguous - more than one
routine resolves to given signature.
Error Code: -9700

मैं प्रक्रियाओं को कैसे छोड़ सकता हूं?

जवाबों:


13

ऐसा तब होता है जब आपके पास एक ही नाम के साथ 2 या अधिक प्रक्रियाएं होती हैं, लेकिन विभिन्न मापदंडों के साथ इनपुट पैरामीटर।

उदाहरण के लिए, आपने 2 प्रक्रियाएँ बनाई हैं:

CREATE PROCEDURE myProc(param1)
...
CREATE PROCEDURE myProc(param1, param2)
...

दूसरे को हटाने के लिए, आपके पास 2 विकल्प हैं:

आसान एक:

DROP PROCEDURE myProc(param1, param2);

कठिन एक:

dbaccess DB -
select procname, procid, numargs from sysprocedures where procname like 'myProc';
procname  myProc
procid    1
numargs   1

procname  myProc
procid    2
**numargs   2**

UPDATE sysprocedures SET procname='myProcOLD' WHERE procid=2;
DROP PROCEDURE myProcOLD;

यहां तक ​​कि अगर पहली विधि मृत है, तो पहली बार मुझे इस समस्या के लिए आधी रात में बुलाया गया, मैंने दूसरा चुना है। मेरी गलती ...


इसके अलावा, आप इस तरह की त्रुटि के बारे में अधिक जानकारी देखने के लिए अपने ssh कंसोल में "फाइंडर 9700" का उपयोग कर सकते हैं। जानकारी अक्सर बहुत उपयोगी होती है: ... यह समस्या तब होती है जब एक तर्क (या इसके स्रोत प्रकार या माता-पिता प्रकार) में दो या अधिक दिनचर्या के मापदंडों के लिए निहितार्थ होते हैं। उदाहरण के लिए, मान लें कि दो दिनचर्याएँ दिनचर्या_नाम (paramtype1) और routine_name (paramtype2) कहलाती हैं, और routine_name दिनचर्या_name (argtype) के साथ लागू होती है। इसके अलावा, निहित जातियां argtype से paramtype1 और argtype से paramtype2 तक मौजूद हैं। इस स्थिति में, यह त्रुटि उठाई गई है।
मथाई

पीटर, @ मथाई यदि यह समाधान था तो क्या हम इसे एक उत्तर में ले जा सकते हैं?
jcolebrand

0

यदि आप जानते हैं कि यह भविष्य में एक समस्या हो सकती है, तो आप एक विशिष्ट नाम के साथ अपनी प्रक्रिया बना सकते हैं, जो डेटाबेस में सभी प्रक्रियाओं के लिए अद्वितीय होनी चाहिए।

यदि आप यह नहीं जानते हैं कि प्रक्रिया बनाते समय यह एक समस्या होगी, तो आप आधिकारिक तौर पर वापस नहीं जा सकते हैं और एक विशिष्ट नाम जोड़ सकते हैं, और आपको कोई समस्या नहीं है।

sysproceduresचयनित उत्तर में अद्यतन केवल तभी काम करना चाहिए जब उपयोगकर्ता informixनिजी सर्वर के मामले में (या, सर्वर के मामले में) जुड़ा हुआ हो ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.