plsql - DBMS_OUTPUT.PUT_LINE प्रिंट नहीं कर रहा है




oracle10g sqlplus dbms-output (5)

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

 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;
    / 

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

 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

कई बार!


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

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

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

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

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

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

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

यह कथन

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

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

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

क्या आप यह करना चाहते हैं?

SELECT id, parent_id, name, 
 (select Name from tbl where id = t.parent_id) parent_name
FROM tbl t start with id = 1 CONNECT BY PRIOR id = parent_id

ओएमजी के आधार पर एक और विकल्प संपादित करें (लेकिन मुझे लगता है कि समान प्रदर्शन करेगा):

select 
           t1.id, 
           t1.parent_id, 
           t1.name,
           t2.name AS parent_name,
           t2.id AS parent_id
from 
    (select id, parent_id, name
    from tbl
    start with id = 1 
    connect by prior id = parent_id) t1
    left join
    tbl t2 on t2.id = t1.parent_id