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

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

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


3 رد (ردود) على هذا الموضوع

#1 a_m2

a_m2

    مشترك

  • الأعضــاء
  • 169 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 02 March 2007 - 04:52 AM

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

#2 hanyfreedom

hanyfreedom

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,481 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:Chess , Sudoku

تاريخ المشاركة 03 March 2007 - 06:29 PM

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


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


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

ملفات مرفقة

  • ملف مرفق  DBMS_OUTPUT.png   13.42كيلو   13 عدد مرات التحميل


#3 a_m2

a_m2

    مشترك

  • الأعضــاء
  • 169 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 03 March 2007 - 08:15 PM

الاخ العزيز 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 لا محاولتك واجتهادك

#4 أسامة موسى

أسامة موسى

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 2,381 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 06 March 2007 - 10:25 AM

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

۩ اللهـــــــــــــــــــــــم صلي على سيدنا محمد وعلـى آله وصحبه أجمـعين ۩
۩ سبحـــــــــــــــــان الله وبحمده ....... سبحــــــــــــــــــــــــان الله العظيم ۩



يمكنك زيارتي على صفحتي الخاصة بالفيس بوك على الرابط AskOsama

يمكنك زيارتي على مدونتي الجديدة على الرابط http://askossama.blogspot.com