SQL डेवलपर में संग्रहीत प्रक्रिया चलाएं?


81

मैं एक संग्रहीत प्रक्रिया को चलाने की कोशिश कर रहा हूं जिसमें पैरामाटर्स में कई और बाहर हैं। प्रक्रिया केवल अन्य उपयोगकर्ताओं को नेविगेट करके मेरे कनेक्शन पैनल में देखी जा सकती है | पैकेज | |

यदि मैं राइट क्लिक करता हूं, तो मेनू आइटम "ऑर्डर सदस्य द्वारा ..." और "यूनिट टेस्ट बनाएं" (ग्रे आउट किया गया) हैं। उपयोगकर्ता द्वारा एक्सेस किए जाने पर प्रक्रिया "रन" करने की क्षमता संभव नहीं लगती है।

मैं एक गुमनाम ब्लॉक बनाने का एक उदाहरण खोजने की कोशिश कर रहा हूं ताकि मैं SQL फ़ाइल के रूप में प्रक्रिया को चला सकूं, लेकिन मुझे यह काम नहीं मिला।

क्या किसी को पता है कि मैं SQL डेवलपर से इस प्रक्रिया को कैसे निष्पादित कर सकता हूं? मैं संस्करण 2.1.1.64 का उपयोग कर रहा हूं।

अग्रिम में धन्यवाद!

संपादित करें 1:

मैं जिस प्रक्रिया को कॉल करना चाहता हूं उसमें यह हस्ताक्षर हैं:

user.package.procedure(
   p_1 IN  NUMBER,
   p_2 IN  NUMBER,
   p_3 OUT VARCHAR2,
   p_4 OUT VARCHAR2,
   p_5 OUT VARCHAR2,
   p_6 OUT NUMBER)

अगर मैं अपना अनाम ब्लॉक इस तरह लिखूँ:

DECLARE
   out1 VARCHAR2(100);
   out2 VARCHAR2(100);
   out3 VARCHAR2(100);
   out4 NUMBER(100);
BEGIN
   EXECUTE user.package.procedure (33,89, :out1, :out2, :out3, :out4);
END;

मुझे त्रुटि मिली:

Bind Varialbe "out1" is NOT DECLCARED
anonymous block completed

मैंने * वैरिएबल्स को शुरू करने की कोशिश की है:

   out1 VARCHAR2(100) := '';

लेकिन एक ही त्रुटि प्राप्त करें:

संपादित करें 2:

एलेक्स के जवाब के आधार पर, मैंने कॉलोन को पारमों के सामने से हटाने की कोशिश की और यह प्राप्त किया:

Error starting at line 1 in command:
DECLARE
   out1 VARCHAR2(100);
   out2 VARCHAR2(100);
   out3 VARCHAR2(100);
   out4 NUMBER(100);
BEGIN
   EXECUTE user.package.procedure (33,89, out1, out2, out3, out4);
END;
Error report:
ORA-06550: line 13, column 17:
PLS-00103: Encountered the symbol "USER" when expecting one of the following:

   := . ( @ % ; immediate
The symbol ":=" was substituted for "USER" to continue.
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:


प्रक्रिया निष्पादन विवरण से पहले, BEGIN के अंदर OUT चर डालने की कोशिश करें।
OMG पोंजी

आप की जरूरत नहीं है execute; पीएल / एसक्यूएल में इसकी शुरुआत के रूप में व्याख्या की गई है execute immediate, जो एसक्यूएल के लिए अलग है execute
एलेक्स पोले

2
@ स्कोका: अब आप दो दृष्टिकोणों को भ्रमित कर रहे हैं; अपने संपादन 2 संस्करण के साथ बस शब्द हटा दें executedeclareसे पहले होना चाहिए begin। मुझे क्या लगता है @OMG का मतलब था कि आप variableकीवर्ड के साथ अनाम ब्लॉक से पहले SQL डेवलपर में चर घोषित कर सकते हैं , और फिर :out1सिंटैक्स का उपयोग कर सकते हैं जैसा कि आपके पास मूल रूप से था, इस मामले में आपके पास एक declareखंड बिल्कुल नहीं है । लेकिन आप अपनी अंतिम टिप्पणी से दोनों को मिला रहे हैं।
एलेक्स पोले

1
हां, मुझे पता था कि मैं उलझन में था, लेकिन यह सुनिश्चित नहीं था कि कहाँ / कैसे।
sdoca

जवाबों:


75

साधारण पैरामीटर प्रकारों के साथ (अर्थात रिफर्सेक्टर आदि नहीं) आप कुछ इस तरह से कर सकते हैं:

SET serveroutput on;
DECLARE
    InParam1 number;
    InParam2 number;
    OutParam1 varchar2(100);
    OutParam2 varchar2(100);
    OutParam3 varchar2(100);
    OutParam4 number;
BEGIN
    /* Assign values to IN parameters */
    InParam1 := 33;
    InParam2 := 89;

    /* Call procedure within package, identifying schema if necessary */
    schema.package.procedure(InParam1, InParam2,
        OutParam1, OutParam2, OutParam3, OutParam4);

    /* Display OUT parameters */
    dbms_output.put_line('OutParam1: ' || OutParam1);
    dbms_output.put_line('OutParam2: ' || OutParam2);
    dbms_output.put_line('OutParam3: ' || OutParam3);
    dbms_output.put_line('OutParam4: ' || OutParam4);
END;
/


ओपी की युक्ति का उपयोग करने के लिए और :varबाइंड चर का उपयोग करने के लिए एक वैकल्पिक दृष्टिकोण के साथ संपादित :

var InParam1 number;
var InParam2 number;
var OutParam1 varchar2(100);
var OutParam2 varchar2(100);
var OutParam3 varchar2(100);
var OutParam4 number;

BEGIN
    /* Assign values to IN parameters */
    :InParam1 := 33;
    :InParam2 := 89;

    /* Call procedure within package, identifying schema if necessary */
    schema.package.procedure(:InParam1, :InParam2,
        :OutParam1, :OutParam2, :OutParam3, :OutParam4);
END;
/

-- Display OUT parameters
print :OutParam1;
print :OutParam2;
print :OutParam3;
print :OutParam4;

1
+1 अच्छा जवाब। जिज्ञासा से बाहर क्या आप जानते हैं कि कौन सी पसंद की जाती है?
कॉनराड फ्रैक्स

@ कोनराड: मुझे लगता है कि यह एक प्राथमिकता की बात है, हालांकि इस :varतरह से स्विच करने से अधिक संदर्भ हो सकता है । declareअगर मैं पीएल / एसक्यूएल के साथ कुछ भी कर रहा था, तो मैं डिफ़ॉल्ट रूप से रास्ते का उपयोग करूंगा; लेकिन मैं यह :varकह सकता हूं कि अगर मैं प्रो * C से कॉपी किए गए मौजूदा कोड का थोड़ा उपयोग कर रहा था, जो पहले से ही सिंटैक्स था और मैं कॉल में पारस को नहीं छूना चाहता था।
एलेक्स पूले

2
मदद के लिए धन्यवाद और विस्तृत जवाब। मुझे यकीन है कि यह दूसरों की भी मदद होगी। एक बात का ध्यान रखें कि इन्हें स्क्रिप्ट के रूप में चलाया जाना चाहिए न कि स्टेटमेंट।
sdoca

1
Sql डेवलपर में दौड़ते समय, मुझे चर नामों के साथ उपसर्ग नहीं करना पड़ता था :(वास्तव में, यह इसके साथ काम नहीं करता था)।
हरदिवस

29

आसान आसान है। परिणाम प्राप्त करना कठिन हो सकता है।

इस प्रश्न पर एक नज़र डालें मैंने एक ओरेकल पैकेज प्रक्रिया से परिणाम प्राप्त करने के लिए सबसे अच्छा तरीका / उपकरण पूछा

इसका सारांश इस प्रकार है।

मान लें कि आपके पास एक पैकेज था जिसका नाम mypackage था और प्रक्रिया जिसे getQuestions कहा जाता था। यह एक रिफ़ोर्सर लौटाता है और स्ट्रिंग उपयोगकर्ता नाम लेता है।

आपको बस नई SQL फ़ाइल (नई फ़ाइल) बनानी होगी। कनेक्शन सेट करें और निम्नलिखित में पेस्ट करें और निष्पादित करें।

var r refcursor;
exec mypackage.getquestions(:r, 'OMG Ponies');
print r;

3
मुझे "निष्पादित" के बजाय पूर्ण शब्द "निष्पादित" का उपयोग करना था
पैट्रिक

21

SqlDeveloper 3+ का उपयोग करने वालों के लिए, यदि आप चूक गए हैं:

SqlDeveloper में सीधे संग्रहीत कार्य / फ़ंक्शन को निष्पादित करने की सुविधा होती है, और आउटपुट आसान-से-पढ़ने के तरीके में प्रदर्शित होते हैं।

बस पैकेज / संग्रहित खरीद / संग्रहित फंक्शन पर राइट क्लिक करें, उस पर क्लिक करें Runऔर targetउस खरीद / फ़ोकस का चयन करें जिसे आप निष्पादित करना चाहते हैं, SqlDeveloper निष्पादित करने के लिए कोड स्निपेट उत्पन्न करेगा (ताकि आप अपना इनपुट पैरामीटर डाल सकें)। एक बार निष्पादित होने के बाद, आउटपुट पैरामीटर डायलॉग बॉक्स के निचले आधे हिस्से में प्रदर्शित होते हैं, और इसमें रेफरी कर्सर के लिए अंतर्निहित समर्थन भी होता है: कर्सर के परिणाम को एक अलग आउटपुट टैब के रूप में प्रदर्शित किया जाएगा।


2
यह चयनित उत्तर होना चाहिए।
EvilTeach

12

SQL डेवलपर में प्रक्रिया खोलें और इसे वहां से चलाएं। SQL डेवलपर SQL को प्रदर्शित करता है जो इसे चलाता है।

BEGIN
  PROCEEDURE_NAME_HERE();
END;

6

उपयोग:

BEGIN

  PACKAGE_NAME.PROCEDURE_NAME(parameter_value, ...);

END;

"PACKAGE_NAME", "PROCEDURE_NAME" और "पैरामीटर_वल्यू" को आपकी ज़रूरत के अनुसार बदलें। OUT मापदंडों को पहले घोषित करने की आवश्यकता होगी।


2

हालांकि यह प्रश्न काफी पुराना है, मैं sql डेवलपर से चलने का आसान तरीका न पाकर उसी परिणाम में ठोकर खाता रहता हूं। कुछ कोशिशों के बाद, मुझे sql डेवलपर की संग्रहीत प्रक्रिया को निष्पादित करने का एक आसान तरीका मिल गया।

  • पैकेज के तहत, अपने इच्छित पैकेज का चयन करें और पैकेज के नाम पर राइट क्लिक करें (संग्रहीत कार्यविधि नाम पर नहीं)।

  • आपको चलाने का विकल्प मिलेगा। उस का चयन करें और आवश्यक तर्कों की आपूर्ति करें। ठीक पर क्लिक करें और आप आउटपुट चर खंड में आउटपुट नीचे देख सकते हैं

मैं SQL डेवलपर संस्करण 4.1.3.20 का उपयोग कर रहा हूं


1

इनमें से किसी भी अन्य उत्तर ने मेरे लिए काम नहीं किया। यहाँ SQL डेवलपर 3.2.20.10 में एक प्रक्रिया चलाने के लिए मुझे क्या करना था:

SET serveroutput on;
DECLARE
  testvar varchar(100);
BEGIN
  testvar := 'dude';
  schema.MY_PROC(testvar);
  dbms_output.enable;
  dbms_output.put_line(testvar);
END;

और फिर आपको उस तालिका को चेक करना होगा जो आपके खरीद को उस पारित-चर के साथ करना था - आउटपुट बस पुष्टि करेगा कि चर को मूल्य प्राप्त हुआ (और सैद्धांतिक रूप से, इसे खरीद के पास दिया गया)।

नोट (मेरा बनाम अन्य के साथ मतभेद):

  • :चर नाम से पहले नहीं
  • स्कीमा नाम और प्रक्रिया नाम के बीच कोई पुट .package.या नहीं.packages.
  • &चर के मान में डालने के लिए नहीं ।
  • printकहीं कोई उपयोग नहीं
  • varचर घोषित करने के लिए कोई उपयोग नहीं

इन सभी समस्याओं ने मुझे सबसे लंबे समय तक अपने सिर को खरोंचने के लिए छोड़ दिया और इन जवाबों में ये गलतियां हैं जिन्हें बाहर निकालने के लिए और तार-तार कर दिया गया।


0

विश्वास नहीं कर सकते, यह SQL डेवलपर में निष्पादित नहीं होगा:

var r refcursor;
exec PCK.SOME_SP(:r,
 '02619857');

print r;

लेकिन यह होगा:

var r refcursor;
exec TAPI_OVLASCENJA.ARH_SELECT_NAKON_PRESTANKA_REG(:r, '02619857');

print r;

जाहिर है सब कुछ एक लाइन में होना है ।।


2
[SQL * प्लस डॉक्स executeकमांड के लिए] यह बताता है कि। यह उस सवाल का जवाब नहीं है जो हालांकि पूछा गया था, और वैसे भी अन्य सवालों के अधिक प्रासंगिक जवाबों में शामिल किया गया है।
एलेक्स पॉले

SQL डेवलपर में इसका उपयोग करने में सक्षम था। धन्यवाद
Sergejs

0

SQL डेवलपर संस्करण 4.0.2.15 का उपयोग करते हुए निम्नलिखित कार्यों का निर्माण 15.21 करें:

SET SERVEROUTPUT ON
var InParam1 varchar2(100)
var InParam2 varchar2(100)
var InParam3 varchar2(100)
var OutParam1 varchar2(100)

BEGIN
    /* Assign values to IN parameters */
    :InParam1 := 'one';
    :InParam2 := 'two';
    :InParam3 := 'three';

    /* Call procedure within package, identifying schema if necessary */
    schema.package.procedure(:InParam1, :InParam2, :InParam3, :OutParam1);
    dbms_output.enable;
    dbms_output.put_line('OutParam1: ' || :OutParam1);
END;
/

नहीं, क्षमा करें - varइससे पहले कि चर काम न करें - कम से कम SQL डेवलपर 3.2.20.10 में, और उनके सामने कॉलन का उपयोग नहीं करना चाहिए - इसके लिए कोई ज़रूरत नहीं है, फिर से, कम से कम 3.2.20.10 में (केवल कारण मैंने किया था) 'इसे नीचे मत करो या इसे संपादित करो)। इसके बाद एक अर्ध-उपनिवेश की आवश्यकता होगी SET SERVEROUTPUT ON
vapcguy 21

0

SQL डेवलपर से प्रक्रिया को चलाने के लिए केवल निम्नलिखित आदेश पर अमल करें

EXECUTE PROCEDURE_NAME;


-1

मैं @Alex Poole जवाब काम नहीं कर पा रहा था। हालाँकि, परीक्षण और त्रुटि से, मुझे निम्नलिखित कार्य (SQL डेवलपर संस्करण 3.0.04 का उपयोग करके) मिला। इसे यहाँ पोस्ट करने पर यह दूसरों की मदद करता है:

SET serveroutput on;

DECLARE
    var InParam1 number;
    var InParam2 number;
    var OutParam1 varchar2(100);
    var OutParam2 varchar2(100);
    var OutParam3 varchar2(100);
    var OutParam4 number;

BEGIN
    /* Assign values to IN parameters */
    InParam1 := 33;
    InParam2 := 89;

    /* Call procedure within package, identifying schema if necessary */
    schema.package.procedure(InParam1, InParam2,
        OutParam1, OutParam2, OutParam3, OutParam4);

    /* Display OUT parameters */
    dbms_output.put_line('OutParam1: ' || OutParam1);
    dbms_output.put_line('OutParam2: ' || OutParam2);
    dbms_output.put_line('OutParam3: ' || OutParam3);
    dbms_output.put_line('OutParam4: ' || OutParam4);
END;

2
यह मेरे उत्तर में पहले संस्करण के समान है, सिवाय इसके कि आपने ब्लॉक varमें प्रत्येक चर में जोड़ा है declare, जो अमान्य है। इसे चलाने की कोशिश करने से 'PLS-00103: प्रतीक "संख्या" का एनकाउंटर हो जाता है, जब निम्नलिखित में से किसी एक की अपेक्षा करता है ...', और अन्य पांच चर के खिलाफ इसी तरह की त्रुटियां।
एलेक्स पोले

मैं एलेक्स से सहमत हूं। नीचा दिखाया गया है var, और मुझे .package.अपने कॉल में उपयोग करने की आवश्यकता नहीं है , कम से कम 3.2.20.10 में, जो कि इतना अलग नहीं होना चाहिए था, और जब मैंने किया तो त्रुटियां मिलीं। इस उत्तर के साथ बहुत समय बर्बाद किया।
vapcguy

-1
--for setting buffer size needed most of time to avoid `anonymous block completed` message
set serveroutput on size 30000;

-- declaration block in case output need to catch
DECLARE
--declaration for in and out parameter
  V_OUT_1 NUMBER;
  V_OUT_2 VARCHAR2(200);
BEGIN

--your stored procedure name
   schema.package.procedure(
  --declaration for in and out parameter
    V_OUT_1 => V_OUT_1,
    V_OUT_2 => V_OUT_2
  );
  V_OUT_1 := V_OUT_1;
  V_OUT_2 := V_OUT_2;
  -- console output, no need to open DBMS OUTPUT seperatly
  -- also no need to print each output on seperat line 
  DBMS_OUTPUT.PUT_LINE('Ouput => ' || V_OUT_1 || ': ' || V_OUT_2);
END;

-2

यदि आपके पास बहुत सारी प्रक्रियाएँ हैं जिनमें बहुत सारे पैरामीटर हैं, तो Pl / SQL ब्लॉक बनाना दर्दनाक हो सकता है। अजगर पर एक एप्लीकेशन लिखा होता है जो आपके लिए करता है। यह प्रक्रिया घोषणाओं के साथ फ़ाइल को पार्स करता है और सुविधाजनक प्रक्रिया चालान के लिए वेब ऐप बनाता है।


-3
var out_para_name refcursor; 
execute package_name.procedure_name(inpu_para_val1,input_para_val2,... ,:out_para_name);
print :out_para_name;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.