SQL डेवलपर में एक वैरिएबल के मान को प्रिंट करना


102

मैं एक विशेष चर के मूल्य को प्रिंट करना चाहता था जो एक अनाम ब्लॉक के अंदर है। मैं Oracle SQL डेवलपर का उपयोग कर रहा हूं। मैंने प्रयोग करने की कोशिश की dbms_output.put_line। लेकिन यह काम नहीं कर रहा है। जो कोड मैं उपयोग कर रहा हूं वह नीचे दिखाया गया है।

SET SERVEROUTPUT ON

DECLARE

  CTABLE USER_OBJECTS.OBJECT_NAME%TYPE;
  CCOLUMN ALL_TAB_COLS.COLUMN_NAME%TYPE;
  V_ALL_COLS VARCHAR2(500);

  CURSOR CURSOR_TABLE
    IS
    SELECT OBJECT_NAME 
    FROM USER_OBJECTS 
    WHERE OBJECT_TYPE='TABLE'
    AND OBJECT_NAME LIKE 'tb_prm_%';

  CURSOR CURSOR_COLUMNS (V_TABLE_NAME IN VARCHAR2)
    IS
    SELECT COLUMN_NAME
    FROM ALL_TAB_COLS
    WHERE TABLE_NAME = V_TABLE_NAME;

BEGIN

  OPEN CURSOR_TABLE;

  LOOP
    FETCH CURSOR_TABLE INTO CTABLE;
    EXIT WHEN CURSOR_TABLE%NOTFOUND;

    OPEN CURSOR_COLUMNS (CTABLE);

    V_ALL_COLS := NULL;

    LOOP
      FETCH CURSOR_COLUMNS INTO CCOLUMN;
      V_ALL_COLS := V_ALL_COLS || CCOLUMN;
      IF CURSOR_COLUMNS%FOUND THEN
        V_ALL_COLS := V_ALL_COLS || ', ';
      ELSE
        EXIT;
      END IF;
    END LOOP;

    DBMS_OUTPUT.PUT_LINE(V_ALL_COLS);

  END LOOP;
  CLOSE CURSOR_TABLE;

END;

और मुझे केवल आउटपुट मिल रहा है anonymous block completed


आउटपुट प्रोग्राम के अंत / समाप्ति पर फ्लश किया जाता है, जिस तरह से यह काम करता है। दौड़ते समय आप प्रदर्शित नहीं कर सकते। लॉग्स टेबल (स्वायत्त लेनदेन) में देखें कि कोई प्रोग्राम चल रहा है या नहीं, यह देखने के लिए
tbone

क्यों अपने ब्लॉक के माध्यम से डिबगर में निर्मित और कदम का उपयोग न करें। यह सभी चरों की स्थिति को दर्शाता है।
वुल्फ

5
पर सेट करें; --add अर्द्ध बृहदान्त्र, सभी का चयन करें और डेवलपर अपने काम के ठीक चलाने के लिए, मेरे लिए,
Praveenkumar_V

जवाबों:


203

आपको dbms_output चालू करना होगा। Oracle SQL डेवलपर में:

  1. DBMS आउटपुट विंडो दिखाएं (देखें-> DBMS आउटपुट)।
  2. Dbms आउटपुट विंडो के शीर्ष पर "+" बटन दबाएं और फिर खुलने वाले संवाद में एक खुला डेटाबेस कनेक्शन चुनें।

SQL * प्लस में:

 SET SERVEROUTPUT ON

संस्करण 1.5.5 में, मुझे वह विकल्प दृश्य के तहत नहीं लगता है। वहाँ कनेक्शन, फ़ाइलें, रिपोर्ट ... स्थिति पट्टी, टूलबार, ताज़ा करें, लेकिन कोई DBMS आउटपुट नहीं है। वरीयताओं के तहत बहुत सारे सामान, लेकिन मुझे अभी भी आउटपुट के लिए कोई विकल्प नहीं दिखता है।
रफिन

1
@ruffin: v1.5.5 3 साल पुराना है। मैं v3.0 का उपयोग कर रहा हूं, और वर्तमान संस्करण v3.1 हो रहा है।
क्लस लिंडबैक

/ नोड्स हम 1.5.5 पर अटक गए हैं - यदि आपके पास जवाब आसान था, तो मैं इसे ले जाऊंगा, लेकिन एनपीएस अन्यथा। धन्यवाद!
रफिन

मैंने sql फाइल फर्स्ट लाइन पर "SET SERVEROUTPUT ON" का विकल्प सेट किया।
समीह एक

आपको बहुत - बहुत धन्यवाद!
Amazigh.Ca

18

SQL डेवलपर DBMS_OUTPUT टेक्स्ट को केवल तभी आउटपुट करता है जब आपने DBMS_OUTPUT विंडो पेन को स्पष्ट रूप से चालू किया हो।

फलक पर जाने के लिए (मेनू) दृश्य -> ​​Dbms_output पर जाएं।

अपने कनेक्शन के लिए आउटपुट सक्षम करने के लिए ग्रीन प्लस साइन पर क्लिक करें और फिर कोड चलाएं।

संपादित करें: आप जिस आउटपुट की अपेक्षा कर रहे हैं, उसके अनुसार बफर आकार को सेट करना न भूलें।


6

सबसे पहले सर्वर आउटपुट बनाएं

  1. SET SERVEROUTPUT on फिर

  2. DBMS आउटपुट विंडो पर जाएं (देखें-> DBMS आउटपुट)

  3. फिर सर्वर को जोड़ने के लिए Ctrl+ दबाएँN


3

2 विकल्प हैं:

set serveroutput on format wrapped;

या

'दृश्य' मेनू खोलें और 'dbms आउटपुट' पर क्लिक करें। आपको वर्कशीट के नीचे एक dbms आउटपुट विंडो मिलनी चाहिए। फिर आपको कनेक्शन जोड़ने की आवश्यकता है (किसी कारण से यह स्वचालित रूप से नहीं किया जाता है)।


1

1) मेनू देखने के लिए जाओ।
2) DBMS_OUTPUT मेनू आइटम का चयन करें।
3) प्रेस Ctrl+ Nऔर कनेक्शन संपादक का चयन करें।
4) कमांड पर सेट सर्वर को निष्पादित करें।
5) फिर अपने पीएल / एसक्यूएल स्क्रिप्ट को निष्पादित करें।

यहां छवि विवरण दर्ज करें यहां छवि विवरण दर्ज करें


0
DECLARE

  CTABLE USER_OBJECTS.OBJECT_NAME%TYPE;
  CCOLUMN ALL_TAB_COLS.COLUMN_NAME%TYPE;
  V_ALL_COLS VARCHAR2(5000);

  CURSOR CURSOR_TABLE
    IS
    SELECT OBJECT_NAME 
    FROM USER_OBJECTS 
    WHERE OBJECT_TYPE='TABLE'
    AND OBJECT_NAME LIKE 'STG%';

  CURSOR CURSOR_COLUMNS (V_TABLE_NAME IN VARCHAR2)
    IS
    SELECT COLUMN_NAME
    FROM ALL_TAB_COLS
    WHERE TABLE_NAME = V_TABLE_NAME;

BEGIN

  OPEN CURSOR_TABLE;
  LOOP
    FETCH CURSOR_TABLE INTO CTABLE;

    OPEN CURSOR_COLUMNS (CTABLE);
    V_ALL_COLS := NULL;
    LOOP

      FETCH CURSOR_COLUMNS INTO CCOLUMN;
      V_ALL_COLS := V_ALL_COLS || CCOLUMN;
      IF CURSOR_COLUMNS%FOUND THEN
        V_ALL_COLS := V_ALL_COLS || ', ';
      ELSE
        EXIT;
      END IF;
    END LOOP;
   close CURSOR_COLUMNS ;
    DBMS_OUTPUT.PUT_LINE(V_ALL_COLS);
    EXIT WHEN CURSOR_TABLE%NOTFOUND;
  END LOOP;`enter code here`
  CLOSE CURSOR_TABLE;

END;

मैंने दूसरे कर्सर का क्लोज़ जोड़ दिया है। यह काम कर रहा है और आउटपुट भी ...



-1

DBMS आउटपुट विंडो पर जाएं (देखें-> DBMS आउटपुट)।

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