DBMS_OUTPUT.PUT_LINE मुद्रण नहीं


93

निम्नलिखित कोड को निष्पादित करते समय, यह सिर्फ यह कहता है कि प्रक्रिया पूरी हो गई है और मैं उसके (पहले नाम, अंतिम नाम) और फिर नीचे दी गई तालिका में चुनिंदा क्वेरी से अन्य मानों के लिए यह जानकारी नहीं प्रिंट करना चाहता।

 CREATE OR REPLACE PROCEDURE PRINT_ACTOR_QUOTES (id_actor char)
AS
CURSOR quote_recs IS
SELECT a.firstName,a.lastName, m.title, m.year, r.roleName ,q.quotechar from quote q, role r,   
rolequote rq, actor a, movie m
where
rq.quoteID = q.quoteID
AND
rq.roleID = r.roleID
 AND
r.actorID = a.actorID
AND
r.movieID = m.movieID
AND
 a.actorID = id_actor;
BEGIN
FOR row IN quote_recs LOOP
DBMS_OUTPUT.PUT_LINE('a.firstName' || 'a.lastName');

end loop;
END PRINT_ACTOR_QUOTES;
/ 

सर्वर आउटपुट सेट करते समय, मुझे मिलता है

a.firstNamea.lastName
a.firstNamea.lastName
a.firstNamea.lastName
a.firstNamea.lastName

कई बार!

जवाबों:


191

बयान में "यह" क्या है "यह सिर्फ यह कहता है कि प्रक्रिया पूरी हो गई है"?

डिफ़ॉल्ट रूप से, अधिकांश उपकरण dbms_outputलिखने के लिए बफर को कॉन्फ़िगर नहीं करते हैं और कोड निष्पादित होने के बाद उस बफर से पढ़ने का प्रयास नहीं करते हैं। दूसरी ओर, अधिकांश उपकरण ऐसा करने की क्षमता रखते हैं। SQL * प्लस में, आपको कमांड का उपयोग करने की आवश्यकता होगी set serveroutput on [size N|unlimited]। तो आप ऐसा कुछ करेंगे

SQL> set serveroutput on size 30000;
SQL> exec print_actor_quotes( <<some value>> );

SQL डेवलपर में, आप View | DBMS OutputDBMS आउटपुट विंडो को सक्षम करने के लिए जाएंगे , फिर किसी विशेष सत्र के लिए DBMS आउटपुट को सक्षम करने के लिए हरे रंग के प्लस आइकन पर क्लिक करें।

इसके अतिरिक्त, यह मानते हुए कि आप हर पंक्ति के लिए शाब्दिक "a.firstNamea.lastName" नहीं छापना चाहते हैं।

FOR row IN quote_recs
LOOP
  DBMS_OUTPUT.PUT_LINE( row.firstName || ' ' || row.lastName );
END LOOP;

क्षमा करें, जब संदेश के ऊपर की प्रक्रिया को क्रियान्वित किया जाता है तो PL / SQL प्रक्रिया सफलतापूर्वक पूर्ण हो जाती है। मैं SQL प्लस
3x12

8
@dexter - ठीक है। फिर आपको set serveroutput onSQL * प्लस में प्रक्रिया को निष्पादित करने से पहले कमांड को जोड़ने की आवश्यकता है ।
जस्टिन गुफा

@dexter - राइट। मेरी टिप्पणी को अंत में देखें- यदि आप हर पंक्ति के लिए उस शाब्दिक को नहीं चाहते हैं, तो आप शायद मेरे उत्तर के अंत में पोस्ट किया गया वाक्यविन्यास चाहेंगे।
जस्टिन गुफा

ठीक है तो अब यह सही नामों को प्रदर्शित करता है लेकिन 100 बार की तरह। मैं कैसे प्रदर्शित होने वाले नाम के 100 के बजाय नीचे दी गई तालिका में शीर्षक, वर्ष, रोलेनाम, उद्धरण प्रदर्शित करूंगा
डेक्सटर

@dexter - यदि आप कह रहे हैं कि प्रत्येक नाम को सैकड़ों बार दोहराया जाता है, और यह वह नहीं है जो आप उम्मीद करते हैं, तो इसका मतलब है कि आपका SELECTकथन गलत है और संभवत: इसमें शामिल होने की स्थिति याद आ रही है। आप अपनी क्वेरी (जिसे आप प्रक्रिया के बिना अलग से चला सकते हैं) को परिशोधित करना चाहते हैं, जब तक कि क्वेरी आपके द्वारा अपेक्षित डेटा नहीं लौटाती।
जस्टिन गुफा

21
  1. सुनिश्चित करें कि आपके पास मेनू में दृश्य विकल्प के माध्यम से आपकी डीबीएम आउटपुट विंडो खुली है।
  2. हरे '+' चिह्न पर क्लिक करें और अपना डेटाबेस नाम जोड़ें।
  3. 'DBMS_OUTPUT.ENABLE?' लिखें पहली पंक्ति के रूप में आपकी प्रक्रिया के भीतर। आशा है इससे तुम्हारी समस्या का समाधान हो गया होगा।

14

यह वाक्य

DBMS_OUTPUT.PUT_LINE ('a.firstName' || 'a.lastName');

स्ट्रिंग को प्रिंट करने का मतलब यह है .. मानों को मुद्रित करने के लिए उद्धरण निकालें । सही सिंटैक्स है

DBMS_OUTPUT.PUT_LINE(a.firstName || a.lastName);

13

पहली पंक्ति में नीचे के रूप में क्वेरी सेट करें

SET SERVEROUTPUT ON 

यहां तक ​​कि इसका काम नहीं कर रहा है .. कृपया कोई अन्य विकल्प प्रदान करें
लोवा चित्तमुरी

बस अतिरिक्त स्पष्ट होना चाहिए। श्रीनाथ एस ने जो लाइन सुझाई है वह पहले जाती है और DECLARE और BEGIN / END जैसे सभी कोड ब्लॉक से बाहर है। मैंने इसे अपने DECLARE ब्लॉक में बनाने की कोशिश की जो काम नहीं करता है। मैं SQL * प्लस का उपयोग कर रहा हूं।
ग्रांट जॉनसन

1

मैं Oracle SQL डेवलपर का उपयोग कर रहा हूँ,

इस उपकरण में, मुझे dbms_output.put_line द्वारा मुद्रित परिणामों को देखने के लिए DBMS आउटपुट को सक्षम करना पड़ा

आप इस विकल्प को परिणाम फलक में पा सकते हैं जहाँ अन्य क्वेरी परिणाम प्रदर्शित होते हैं। इसलिए, परिणाम फलक में, मेरे पास 7 टैब हैं। परिणाम के रूप में नामित 1 टैब, अगले एक स्क्रिप्ट आउटपुट और इतने पर है। इसमें से आप एक टैब ढूंढ सकते हैं जिसे "DBMS आउटपुट" नाम दिया गया है, इस टैब को चुनें, फिर 1 आइकन (संवाद आइकन जैसा दिखता है) सक्षम करें DBMS आउटपुट । इस आइकन पर क्लिक करें। फिर आप पीएल / एसक्यूएल निष्पादित करते हैं, फिर "डीबीएमएस आउटपुट टैब का चयन करें, आपको वहां परिणाम देखने में सक्षम होना चाहिए।


0

वे सभी लूप के लिए ध्यान केंद्रित कर रहे हैं लेकिन अगर हम एक सामान्य लूप का उपयोग करते हैं तो हमें कर्सर रिकॉर्ड चर का उपयोग करना होगा। निम्नलिखित संशोधित कोड है

 CREATE OR REPLACE PROCEDURE PRINT_ACTOR_QUOTES (id_actor char)
    AS
    CURSOR quote_recs IS
    SELECT a.firstName,a.lastName, m.title, m.year, r.roleName ,q.quotechar from quote q, role r,   
    rolequote rq, actor a, movie m
    where
    rq.quoteID = q.quoteID
    AND
    rq.roleID = r.roleID
     AND
    r.actorID = a.actorID
    AND
    r.movieID = m.movieID
    AND
     a.actorID = id_actor;
    recd quote_recs%rowtype;
    BEGIN
    open quote_recs;
    LOOP
    fetch quote_recs into recs;
    exit when quote_recs%notfound;
    DBMS_OUTPUT.PUT_LINE(recd.firstName||recd.lastName);
    end loop;
    close quote_recs;
    END PRINT_ACTOR_QUOTES;
    / 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.