الانتقال إلى المحتوى

سؤال بخصوص الحزمه Dbms_output


a_m2

Recommended Posts

ممكن اى واحد يتكرم ويقولى ايه الفرق الذى سيحدث عند استخدام الاتى مع الحزمه DBMS_OUTPUT
1/ PUT
2/ PUT_LINE
3/NEW_LINE
4/ GET_LINE
5/ GET_LINES
لقد حاولت ان افهم الفرق بينهم من خلال الشرح الموجود معى ولكن لم استطع وحاولت ادخالهم فى اكواد لاعرف الفرق وايضا لم افلح
فارجوا ممن يعرف فائدة كل من هؤلاء ان يشرح لى وله جزيل الشكر

رابط هذا التعليق
شارك

أرفقت لك صورة توضح الوظائف بصفة عامة لهذه البكج و فيما يلى سوف أوضح لك بالاكواد


SET SERVEROUTPUT ON
BEGIN
DBMS_OUTPUT.PUT_LINE('These are the tables that ' || USER || ' owns:');
FOR item IN (SELECT table_name FROM user_tables)
LOOP
DBMS_OUTPUT.PUT_LINE(item.table_name);
END LOOP;
END;
/



و أيضاً هذا المثال :-

SET SERVEROUTPUT ON FORMAT WRAPPED
DECLARE
new_sal NUMBER(8,2);
emp_id NUMBER(6) := 126;
PROCEDURE adjust_salary(emp_id NUMBER, sal IN OUT NUMBER) IS
emp_job VARCHAR2(10);
avg_sal NUMBER(8,2);
BEGIN
SELECT job_id INTO emp_job FROM employees WHERE employee_id = emp_id;
SELECT AVG(salary) INTO avg_sal FROM employees WHERE job_id = emp_job;
DBMS_OUTPUT.PUT_LINE ('The average salary for ' || emp_job
|| ' employees: ' || TO_CHAR(avg_sal));
sal := (sal + avg_sal)/2; -- adjust sal value which is returned
END;
BEGIN
SELECT AVG(salary) INTO new_sal FROM employees;
DBMS_OUTPUT.PUT_LINE ('The average salary for all employees: '
|| TO_CHAR(new_sal));
adjust_salary(emp_id, new_sal); -- assigns a new value to new_sal
DBMS_OUTPUT.PUT_LINE ('The adjusted salary for employee ' || TO_CHAR(emp_id)
|| ' is ' || TO_CHAR(new_sal)); -- sal has new value
END;
/



و أتمنى أن أكون قد أوضحت ما كنت تريده ..... وبالتوفيق أن شاء الله

post-34898-1172934813.png

رابط هذا التعليق
شارك

الاخ العزيز hanyfreedom
لم تذكر فيها غير الداله put_line فاين باقى الامثله على باقى الدوالل ايها الاخ العزيز اين داله put and new_line واين دالة get_line and get_ lines
عموما اخى الفاضل اليك ما فهمته عله يفيدك
اولا دالة put تستخدم للحصول على الناتج ونخزينه فى الذاكره المؤقته دون طباعته
2/ put_line لطباعة الناتج كل كيرسر على سطر وأيضا إذا اتت خلف dbms_output.put فإنها تقوم بطباعة ناتج هذه الحزمة والمخزن في الذاكرة المؤقتة ولكن تطبع على نفس السطر اى يكون الناتج كله على سطر واحد
3/ new_line فهي تأتى خلف dbms_output.put وتطبع الناتج لهذه الحزمة ولكن على سطر جديد
4/ get_line تحضر صف واحد من الناتج
5/get_lines تحضر صفوف الناتج كلها بعد ترتيبها
6/ ENABLE/DISABLE تستخدم لإيقاف عمل أو تشغيل الحزمة dbms_output
ارجوا من الاخوه اصحاب الخبره والتفكير السليم ان يراجع ما كتبته وان كان ما فهمته فيه اى شئ خطأ ان ينبهنى له
وشكرا لك ايها الاخ hanyfreedom لا محاولتك واجتهادك

رابط هذا التعليق
شارك

*Plus SET SERVEROUTPUT ON in SQL*Plus is equivalent to:



dbms_output.enable(buffer_size => NULL);

DISABLE
Disable DBMS_OUTPUT and reset the buffer size back to the default dbms_output.disable;


BEGIN
 exec dbms_output.disable;
END;
/  
 




ENABLE


Enable DBMS_OUTPUT and set the buffer size. The buffer size can be between 1 and 1,000,000 DBMS_OUTPUT.ENABLE(<buffer_size_integer> DEFAULT 20000);




BEGIN
 dbms_output.enable(1000000);
END;
/ 



GET_LINE

Returns a single line of buffered information dbms_output.get_line(
line   OUT VARCHAR2, 
status OUT INTEGER); 
set serveroutput on
DECLARE
buffer VARCHAR2(100);
status INTEGER;
BEGIN
 dbms_output.put_line('This is');
 dbms_output.put_line('a test.');
 dbms_output.get_line(buffer, status);
 dbms_output.put_line('Buffer: ' || buffer);
 dbms_output.put_line('Status: ' || TO_CHAR(status));
END;
/ 



GET_LINES



Retrieves an array of lines from the buffer dbms_output.get_lines(
lines	   OUT CHARARR, 
numlines IN OUT INTEGER); 
DECLARE
outtab dbms_output.CHARARR;
a_line VARCHAR2(10) := RPAD('*',10,'*');
status INTEGER;
lines  CONSTANT NUMBER := 15;
BEGIN
 outtab(0) := 'This is a test';
 outtab(12) := 'of dbms_output.get_lines';

 -- output 10 lines
 FOR linenum IN 1..10
 LOOP
dbms_output.put_line(a_line || TO_CHAR(linenum));
 END LOOP;

 -- retrieve 15 lines
 status := lines;
 dbms_output.get_lines(outtab, status);
 dbms_output.put_line('Retrieved=' || status);

 FOR linenum IN 0 .. lines
 LOOP
BEGIN
  dbms_output.put_line(linenum || ':' || NVL (outtab(linenum),'<null>'));
EXCEPTION
  WHEN OTHERS THEN
	dbms_output.put_line(linenum || ':' || SQLERRM);
END;
 END LOOP;
EXCEPTION
 WHEN OTHERS THEN
dbms_output.put_line('Exception, status=' || status);
dbms_output.put_line(SQLERRM);
END;
/  



NEW_LINE


Inserts an end-of-line marker dbms_output.new_line;
set serveroutput on




BEGIN
 dbms_output.enable(9999999);
 dbms_output.new_line();

 FOR rec IN (SELECT table_name FROM user_tables)
 LOOP
dbms_output.put_line (rec.table_name);
 END LOOP;
 dbms_output.new_line();
END;
/ 



PUT


Obsolete and no longer supported by Oracle

PUT_LINE
Output a literal dbms_output.put_line(item VARCHAR2);



set serveroutput on
BEGIN
 dbms_output.put_line('Display a string literal');
END;
/ 



Output a variable dbms_output.put_line(<item VARCHAR2);
set serveroutput on size 1000000 format wrapped

DECLARE
x   VARCHAR2(20) := RPAD('Dan Morgan', 199, 'x')
BEGIN
 dbms_output.put_line(x);
END;
/ 


Unlimited Output in 10gR2 dbms_output.get_lines(
lines OUT DBMSOUTPUT_LINESARRAY,
numlines IN OUT INTEGER);


show serveroutput off

show serveroutput

set serveroutput on

show serveroutput

BEGIN
 FOR f IN (SELECT table_name FROM user_tables)
 LOOP
dbms_output.put_line(f.table_name);
 END LOOP;
END;
/

BEGIN
 FOR f IN (SELECT table_name FROM all_tables)
 LOOP
dbms_output.put_line(f.table_name);
 END LOOP;
END;
/ 

رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية