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

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

صورة
- - - - -

تم تطوير Dbms_output.put_line


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

#1 sky information

sky information

    عضو نشط

  • الأعضــاء
  • 337 مشاركة

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

السلام عليكم ........................................

من ذو فترة و انا مهتم بتزويدكم بأحدث المعلومات خصوصا في الإصدار 10g

هنا معلومة جديدة ولا كن لا تعتبر بتلك الأهمية ولا كن حتى نستفيد من المعلومات ونكون أكثر معرفة في هذا الإصدار

المعلومة الجديدة هي عن DBMS_OUTPUT.PUT_LINE ومن المعروف انها ليست ميزة جديدة وأنها متاحة في الإصدارات السابقة لعملية الطباعة

SET SERVEROUTPUT ON
BEGIN
DBMS_OUTPUT.PUT_LINE('PRINT ME');
END;


لا كن تكمن المشكلة في الإصدارات السابقة حيث لا يمكن طباعة اكثر من 255 بايت
لكل من لديه الإصدار 9i يجرب هذا المثال الذي يحاول طباعة أكثر من 255 بايت :


SET SEREROUTPUT ON

DECLARE
v_string VARCHAR2(500 CHAR);
BEGIN
v_string :='Hello my name is ahmed'
		 ||'Email :sky-776@hotmail.com '
		 ||'Oracle Call Interface(OCI)'
		 ||'Foreign Functions An OCI foreign function incorporates '
		 ||'the Oracle Call Interface. This interface allows you to write '
		 ||'a subprogram that contains calls to Oracle databases . '
		 ||'A foreign function that incorporates only the OCI '
		 ||'not the Oracle Precompiler interface) cannot access Forms Developer '
 ||'variables and items.';
 DBMS_OUTPUT.PUT_LINE(v_string);
 end;


سوف يرجع الخطأ التالي
ERROR at line 1:
ORA-20000: ORU-10028: line length overflow, limit of 255 chars per line


ولقد كان الحل في الإصدارات السابقة هو استخدام الوظيفة SUBSTR كالتالي :

SET SEREROUTPUT ON

DECLARE
v_string VARCHAR2(500 CHAR);
BEGIN
v_string :='Hello my name is ahmed'
		 ||'Email :sky-776@hotmail.com '
		 ||'Oracle Call Interface(OCI)'
		 ||'Foreign Functions An OCI foreign function incorporates '
		 ||'the Oracle Call Interface. This interface allows you to write '
		 ||'a subprogram that contains calls to Oracle databases . '
		 ||'A foreign function that incorporates only the OCI '
		 ||'not the Oracle Precompiler interface) cannot access Forms Developer '
 ||'variables and items.';
 DBMS_OUTPUT.PUT_LINE(SUBSTR(v_string, 1, 255));
DBMS_OUTPUT.PUT_LINE(SUBSTR(v_string, 256));
 end;


جرب هذا المثال في الإصدار 10G ستكون النتيجة دون مشاكل .

بالنسبة للإصدار 10G فقد تم رفع تقييد البايتات وهذا هو الفرق بين هذا الإصدار و الإصدارات السابقة .

عذروني على الإطالة .........................................................................

#2 arnoukfo

arnoukfo

    عضو

  • الأعضــاء
  • 14 مشاركة

تاريخ المشاركة 27 April 2007 - 10:34 AM

أخي الكريم
هذا الكلام غير صحيح بالمرة لأن DBMS_OUTPUT.PUT_LINE يمكن أن يأخذ ما تشاء من عدد الحروف فقط يجب عليك وضع العبارة التالية قبل تنفيذ التعليمة :
DBMS_OUTPUT.ENABLE (
buffer_size IN INTEGER DEFAULT 20000);

راجع الـ DBMS_OUTPUT في ملفات المساعدة .

وشكرا

#3 sky information

sky information

    عضو نشط

  • الأعضــاء
  • 337 مشاركة

تاريخ المشاركة 27 April 2007 - 11:40 AM

شكرا لردك ياعزيزي

اولا: هذا الكلام ليس تأليف من عندي او من خيال وأنما هذه المعلومة من كتاب أطلعت عليه
ثانيا: يمكن ما فهمت انت الموضوع

المقصود هنا حينما تستخدم DBMS_OUTPUT.PUT_LINE في الأصدار 9i في الوضع الأفتراضي لايمكنك طباعة اكثر من 255 حرف ولم يتعلق الموضوع كما ذكرت انت بأستخدام

DBMS_OUTPUT.ENABLE( buffer_size IN INTEGER DEFAULT 20000)

بينما في أوراكل 10g يمكن عمل ذلك

ثالثا: حينما تقول هذا الكلام غير صحيح بالمرة ماعليك سوى التجربة في الأصدارين وسترى الأختلاف

اتمنى ان يكون المغزى من الكلام واضح ..............