DBMS_OUTPUT.PUT_LINE মুদ্রণ করছে না


97

নিম্নলিখিত কোডটি কার্যকর করার সময়, এটি কেবলমাত্র প্রক্রিয়াটি সম্পূর্ণ বলেছে এবং আমি এটি (ফার্সননাম, লাস্টনাম) চাই এবং যে তথ্যটি চান তা মুদ্রণ করে না এবং তারপরে নীচের সারণিতে সিলেক্ট ক্যোয়ারী থেকে অন্য মানগুলি নিখুঁত করে।

 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

একাধিক বার!

উত্তর:


201

বিবৃতিতে "এটি" কী বলে "এটি কেবল প্রক্রিয়াটি সম্পন্ন করেছে"?

ডিফল্টরূপে, বেশিরভাগ সরঞ্জামগুলি 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;

দুঃখিত, বার্তার উপরের প্রক্রিয়াটি সম্পাদন করার সময় পিএল / এসকিউএল পদ্ধতিটি সফলভাবে শেষ হয়েছে। আমি এসকিউএল প্লাস ব্যবহার করছি
ডেক্সটার

8
@ ডেক্সটার - ঠিক আছে। তারপরে আপনার set serveroutput onএসকিউএল * প্লাসে প্রক্রিয়া চালানোর আগে আপনাকে কেবল কমান্ডটি যুক্ত করতে হবে ।
জাস্টিন গুহ

@ ডেক্সটার - ঠিক আছে। শেষে আমার মন্তব্য দেখুন - আপনি যদি প্রতিটি সারির জন্য আক্ষরিক না চান তবে আপনি সম্ভবত আমার উত্তরের শেষে পোস্ট করা বাক্য গঠনটি চাইবেন।
জাস্টিন গুহ

ঠিক আছে তাই এখন এটি সঠিক নামগুলি প্রদর্শন করে তবে 100 বারের মতো। আমি কীভাবে শিরোনাম, বছর, রোলেনাম, নিচের টেবিলে উদ্ধৃতিটি প্রদর্শিত হবে যে 100 নাম প্রদর্শিত হবে তার পরিবর্তে
ডেক্সটার

4
@ ডেক্সটার - আমি দুঃখিত, আমি বুঝতে পারি না। আপনি কি বলছেন যে আপনি SELECTএসকিউএল প্লাস কমান্ড প্রম্পটে বিবৃতিটি টাইপ করেছেন , এসকিউএল বিবৃতি কার্যকর করা হয়েছে, ডেটা ফেরত দেওয়া হয়েছিল, তবে এসকিউএল প্লাসে ডেটা প্রদর্শিত হয়নি ? যদি আপনি autotraceসেটিংসের সাথে না খেলেন তবে আপনি যদি ক্যোয়ারির ফলাফলের পরিবর্তে কোনও ক্যোয়ারী পরিকল্পনা এবং সম্পাদনের পরিসংখ্যান দেখে থাকতে পারেন তবে এটি অসম্ভব বলে মনে হচ্ছে । তবে আমরা আপনার মূল প্রশ্ন থেকে দূরে সরে যাচ্ছি।
জাস্টিন গুহ 16

22
  1. আপনার ডিবিএমএস আউটপুট উইন্ডোটি মেনুবারের ভিউ বিকল্পের মাধ্যমে খোলা আছে তা নিশ্চিত করুন।
  2. সবুজ '+' চিহ্নটিতে ক্লিক করুন এবং আপনার ডাটাবেসের নাম যুক্ত করুন।
  3. 'DBMS_OUTPUT.ENABLE;' লিখুন; প্রথম লাইন হিসাবে আপনার পদ্ধতির মধ্যে। আশা করি এটি আপনার সমস্যার সমাধান করে।

এই নির্দেশাবলী কোন অ্যাপ্লিকেশন জন্য পরিকল্পনা করা হয়?
অসলিক

15

প্রথম লাইনে নীচে হিসাবে প্রশ্ন সেট করুন

SET SERVEROUTPUT ON 

এমনকি এটি কার্যকর নয় .. দয়া করে অন্য কোনও বিকল্প সরবরাহ করুন
লোভা চিত্তমুড়ি

শুধু অতিরিক্ত পরিষ্কার হতে। শ্রীনাথ এস প্রস্তাবিত লাইনটি প্রথমে চলে যায় এবং ডেকলার এবং বিগিন / সমাপ্তির মতো সমস্ত কোড ব্লকের বাইরে থাকে। আমি আমার ডেকলার ব্লকে এটি তৈরির চেষ্টা করেছি যা কাজ করে না। আমি এসকিউএল * প্লাস ব্যবহার করছি।
অনুদান জনসন

14

এই বিবৃতি

ডিবিএমএস_উইউটিউইউপি.পি.উউ অনলাইন ('a.firstName' || 'a.lastName');

স্ট্রিংটি যেমন হয় তেমন মুদ্রণ করা .. মানগুলি মুদ্রিত হওয়ার জন্য উদ্ধৃতিগুলি সরিয়ে ফেলুন। সুতরাং সঠিক বাক্য গঠনটি হ'ল

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

3

আমি ওরাকল এসকিউএল বিকাশকারী ব্যবহার করছি,

এই সরঞ্জামটিতে, আমাকে dbms_output.put_line দ্বারা মুদ্রিত ফলাফলগুলি দেখতে DBMS আউটপুট সক্ষম করতে হয়েছিল

ফলাফলের ফলকে আপনি এই বিকল্পটি সন্ধান করতে পারেন যেখানে অন্যান্য ক্যোয়ারির ফলাফল প্রদর্শিত হয়। সুতরাং, ফলাফল ফলকে, আমার কাছে 7 টি ট্যাব রয়েছে। 1 ম ট্যাবটিকে ফলাফল হিসাবে নাম দেওয়া হয়েছে, তার পরেরটি হ'ল স্ক্রিপ্ট আউটপুট এবং আরও। এ থেকে আপনি হিসাবে "DBMS আউটপুট" নামে একটি ট্যাব জানতে পারেন এই ট্যাবে, তারপর 1 ম আইকন (সংলাপের আইকন মত দেখাচ্ছে) নির্বাচন করা হয় DBMS আউটপুট সক্ষম করুন । এই আইকনটি ক্লিক করুন। তারপরে আপনি পিএল / এসকিউএল চালাবেন, তারপরে "ডিবিএমএস আউটপুট ট্যাব নির্বাচন করুন, আপনি সেখানে ফলাফল দেখতে সক্ষম হবেন।


0

এগুলির সবগুলি লুপের জন্য মনোনিবেশ করছে তবে আমরা যদি একটি সাধারণ লুপ ব্যবহার করি তবে আমাদের কার্সার রেকর্ড ভেরিয়েবলটি ব্যবহার করতে হয়েছিল। নিম্নলিখিতটি পরিবর্তিত কোড is

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

0

এসকিউএল বিকাশকারীর জন্য

আপনাকে এটি ম্যানুয়ালি কার্যকর করতে হবে

SET SERVEROUTPUT ON 

এর পরে যদি আপনি DBMS_OUTPUT.PUT_LINE ('তথ্য') দিয়ে কোনও প্রক্রিয়া সম্পাদন করেন; বা সরাসরি।

এটি লাইনটি প্রিন্ট করবে

এবং দয়া করে এটি যুক্ত করার চেষ্টা করবেন না

 SET SERVEROUTPUT ON

ফাংশন এবং পদ্ধতির সংজ্ঞা ভিতরে, এটি সংকলন করবে না এবং কাজ করবে না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.