معي دالة الارقام المتسلسلة في حالة حذف اي عمود يكو هناك ارقام متسلسلة غير مستغلة كيف يمكن ايجاد تلك الرقام الغير مستعملة ومن ضمن التسلسل بواسطة جملة استعلام
Mohammed Basalama
تم التعديل بواسطة محمد باسلامة, 21 December 2006 - 12:55 PM.
تاريخ المشاركة 21 December 2006 - 12:49 PM
تم التعديل بواسطة محمد باسلامة, 21 December 2006 - 12:55 PM.
تاريخ المشاركة 21 December 2006 - 02:19 PM
SQL> CREATE TABLE SERIAL (SERIAL_NO NUMBER); تم تكوين جدول. SQL> BEGIN 2 FOR I IN 1..50 LOOP 3 INSERT INTO SERIAL VALUES(I); 4 END LOOP; 5 COMMIT; 6 END; 7 / تم بنجاح إجراء PL/SQL SQL> SELECT * FROM SERIAL; SERIAL_NO ---------- 1 2 3 4 5 6 7 8 9 10 11 SERIAL_NO ---------- 12 13 14 15 16 17 18 19 20 21 22 SERIAL_NO ---------- 23 24 25 26 27 28 29 30 31 32 33 SERIAL_NO ---------- 34 35 36 37 38 39 40 41 42 43 44 SERIAL_NO ---------- 45 46 47 48 49 50 تم اختيار 50 صف SQL> CREATE TABLE MISSED_SERIAL AS SELECT * FROM SERIAL; تم تكوين جدول. SQL> DELETE SERIAL WHERE SERIAL_NO IN (10,12,15,49,26,23,6,25,32); تم حذف 9 صف SQL> COMMIT; تم التثبيت SQL> select s2.serial_no 2 from serial s1, missed_serial s2 3 where s1.SERIAL_NO(+)=s2.SERIAL_NO 4 AND S1.SERIAL_NO IS NULL 5 ; SERIAL_NO ---------- 6 10 12 15 23 25 26 32 49 تم اختيار 9 صفو أرجو التفاعل مع الموضوع حيث أنه من المواضيع المهمة
تاريخ المشاركة 21 December 2006 - 04:23 PM
تاريخ المشاركة 21 December 2006 - 06:05 PM
set serveroutput on ;
create or replace procedure missing
is
v_min number(5) ;
v_max number(5) ;
v_empno number(5) ;
cursor c_empno is
select empno from emp ;
begin select min(empno),max(empno)
into v_min,v_max from emp; open c_empno ;
fetch c_empno into v_empno ;
for x in v_min..v_max loop
if x = v_empno then
fetch c_empno into v_empno ;
else
dbms_output.put_line(x) ;
end if ;
end loop ;
end ;
تم التعديل بواسطة mw_wageeh, 21 December 2006 - 06:21 PM.
تاريخ المشاركة 22 December 2006 - 12:50 AM
تم التعديل بواسطة hanon_OCP, 22 December 2006 - 01:20 AM.
تاريخ المشاركة 22 December 2006 - 01:48 PM
تم التعديل بواسطة walid99, 22 December 2006 - 05:33 PM.
تاريخ المشاركة 29 December 2006 - 08:41 AM
create or replace procedure count_gaps(p_first number,p_steep number) as v_prior number :=p_first; v_steep number :=p_steep; begin if v_steep is null then v_steep:=1; end if; if v_prior is null then v_prior:=0; end if; v_prior:=v_prior-v_steep; for i in (select empno from emp order by empno) loop v_prior:=v_prior+v_steep; While v_prior<>i.empno loop dbms_output.put_line(v_prior); v_prior:=v_prior+v_steep; end loop; end loop; end;
ORA-20000: ORU-10027: buffer overflow, limit of 2000 bytes
تاريخ المشاركة 23 March 2014 - 03:49 AM
الله يعطيك العافيه مشاركه قيمه
حسب فهمي إذا فهمت قصدك
ان مثلا لو عندي 50 موظف ومرقمهم بالتسلسل
1-2-3-4-5-6-7-8-9-10
وحذفت 11 و 12 و 13 و14 و15
راح يكون التسلسل
1-2-3-4-5-6-7-8-9-10-16-17-18-19-20-...... 50
هل بطريقتك هذه تعيد تقريم التسلسل
1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17-18-19-20-...... 50
؟؟
هذا حسب مافهمت منك وماجربت الكود راح اجربه لاحقا وادقق فيه
لان في بالي اشوف فكره
sequence بشوفها تضبط ولا لا
تاريخ المشاركة 23 March 2014 - 01:50 PM
جرب الجمله دي مع تغير الرقم 100 حسب اخر رقم في التسلسل عندك او ممكن تشيلها وتكتب بدلها select count(*) from your_table
select rownum from dual connect by level<=100 minus select number from your_table
ORACLE 10G DEVELOPER
ORACLE 11G ADMIN
مطلوب شريك لتسويق برنامج حسابات ومخازن
waleed.ita@gmail.com