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

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

صورة
- - - - -

كيف عرض صفوف من جدول بشكل عشوائي


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

#1 sasa87

sasa87

    عضو نشط

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

تاريخ المشاركة 06 November 2008 - 08:01 PM

انا عارف الدالة الي بتعمل ارقام عشوائية dbms_random.value بس ازاي احدد الصف المسترجع يعني لو عاوز ارجع الصف 5 فقط او الصف 20 بالنحديد انا عملت الكود ده بس منفعش بيقلي no data found
declare
next_row number;
rec emp%rowtype;
begin select trunc(dbms_random.value(1,14)) into next_row from dual;
select * into rec from emp where rownum=next_row;
dbms_output.put_line(rec.ename);
end;

ارجوااااااااا المساعدة

#2 MMA

MMA

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

  • المجموعة الماسية
  • 1,019 مشاركة
  • الاسم الأول:Mostapha
  • اسم العائلة:Abd El-Salam
  • البـلـد: Country Flag
  • المنصب الحالي:المؤسسة المصرية لتبسيط العلوم - عضو مؤسس - مستشار تقني

تاريخ المشاركة 07 November 2008 - 01:50 PM

جرب هذا :

SELECT EMPLOYEE_ID,EMPLOYEE_CODE,EMPLOYEE_NAME
FROM (SELECT ROWNUM AS RN, EMPLOYEE.* FROM EMPLOYEE ORDER BY EMPLOYEE_ID) E
WHERE RN = TRUNC(DBMS_RANDOM.VALUE(1,3),0)
	  AND ROWNUM = 1

مهندس/ مصطفي محمود عبد السلام   
العضو المؤسس بالمؤسسة المصرية لتبسيط العلوم
والمستشار التقني

(برمجيات - نظم معلومات - شبكات)

.

 

( 01098570165 )

.

.

.

( MMA_Programmer@Yahoo.com )

 


#3 sasa87

sasa87

    عضو نشط

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

تاريخ المشاركة 07 November 2008 - 03:50 PM

الكود في غلط؟؟؟؟؟؟؟؟؟؟؟؟

#4 hanyfreedom

hanyfreedom

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

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

تاريخ المشاركة 07 November 2008 - 06:53 PM

أخى الكريم \ sasa87

هل تريد أسترجاع صفوف معينة ولا عاوز تسترجع كل الصفوف بطريقة عشوائية ؟؟؟


على أى حال أنا كتبتلك كوديين يتناسبان مع الغرضيين .

الكود الأول :-

لأسترجاع الصفوف بشكل عشوائى .... نفذ هذا الكود :-

DECLARE
TYPE rec_type IS TABLE OF emp%ROWTYPE
INDEX BY BINARY_INTEGER;

rec rec_type;

CURSOR c
IS
SELECT * FROM emp ORDER BY DBMS_RANDOM.VALUE;
BEGIN OPEN c;

FETCH c
BULK COLLECT INTO rec; CLOSE c;

FOR i IN rec.FIRST .. rec.LAST
LOOP
DBMS_OUTPUT.put_line (rec (i).empno || ' ' || rec (i).ename);
END LOOP;
END;
/


الكود الثانى :-

أما اذا كنت عاوز ترجع صفوف محدده - مثالاً من الصف الخامس الى الحادى عشر - فنفذ هذا الكود :-

DECLARE
TYPE rec_type IS TABLE OF emp%ROWTYPE
INDEX BY BINARY_INTEGER;

rec rec_type;

CURSOR c
IS
SELECT *
FROM emp WHERE ROWID IN (SELECT ROWID
FROM emp WHERE ROWNUM <= 11
MINUS
SELECT ROWID
FROM emp WHERE ROWNUM < 5);
BEGIN OPEN c;

FETCH c
BULK COLLECT INTO rec; CLOSE c;

FOR i IN rec.FIRST .. rec.LAST
LOOP
DBMS_OUTPUT.put_line (rec (i).empno || ' ' || rec (i).ename);
END LOOP;
END;
/


-------------------

أما أنك تريد أن تسترجع صف واحد فقط معين ؟؟؟

نفذ هذا الكود ،،، و بعد التنفيذ أكتب رقم الصف الذى تريده ان يظهر :-

DECLARE
TYPE rec_type IS TABLE OF emp%ROWTYPE
INDEX BY BINARY_INTEGER;

rec rec_type;

CURSOR c
IS
SELECT *
FROM emp WHERE ROWID IN (
SELECT ROWID
FROM emp WHERE ROWNUM <= &&row_number
MINUS
SELECT ROWID
FROM emp WHERE ROWNUM < &row_number);
BEGIN OPEN c;

FETCH c
BULK COLLECT INTO rec; CLOSE c;

FOR i IN rec.FIRST .. rec.LAST
LOOP
DBMS_OUTPUT.put_line (rec (i).empno || ' ' || rec (i).ename);
END LOOP;
END;
/




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

و بالتوفيق