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

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

صورة
- - - - -

Update


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

#1 sadlover

sadlover

    عضو

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

تاريخ المشاركة 21 May 2007 - 12:31 AM

السلام عليكم
ارجو مساعدتي في عمل كود
اريد عمل كود update وعندي 200.000 موظف وعندي 50 وظيفه واريد عمل كود update حيث يعمل على توزيع الوظائف على الموظفين عشوائي
ولكم جزيل الشكر والاحترام

#2 hamadaforever

hamadaforever

    مشترك

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

تاريخ المشاركة 30 May 2007 - 02:20 PM

بسم الله الرحمن الرحيم

و عليكم السلام

بصراحة ... مش فاهم حاجة من كلامك ... ممكن توضح أكتر ؟

#3 sky information

sky information

    عضو نشط

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

تاريخ المشاركة 30 May 2007 - 08:19 PM

أخي العزيز سؤالك يتكون من جزئين

الجزء الاول عملية توزيع الوظائف بشكل عشوائي
الجزء الثاني عمية التعديل لكي نمنح كل موظف وظيفة.


الجزء الأول :

لكي نقوم بعملية التوزيع العشوائي يجب عمل جدول فيه الوظائف
CREATE TABLE JOBS AS SELECT DISTINCT(JOB)  FROM EMP;

حتى يكون محتوى الجدول بهذا الشكل

CLERK
SALESMAN
PRESIDENT
MANAGER
ANALYST

بعدل عمل الجدول نعمل function تقوم بتوزيع الوظائف بشكل عشوائي

create or replace function get_job return char
  is
  emp_job varchar2(9);
  begin
  select job into emp_job from (select job from jobs order by dbms_random.random)
  where rownum=1;
  return(emp_job);
  end get_job;

سوف ترى الفائدة منها لاحقا(في procedure في الجزء الثاني ).

الجزء الثاني :

لكي نقوم بعملية التعديل كما ذكرت انت يجب عمل جدول يحوي الموظفين و الوظائف

create table employes(
 empl_name varchar2(10),
 emp_job   varchar2(9));

بعد عمل الجدول نملئ الجدول بسجلات الموظفين

insert into employes(select ename,'' from emp);

بعد ملئ السجلات نعمل update للجدول ولاكن بأستخدام procedure مع دمج function السابقة :

create or replace procedure emp_job
   is
   cursor c1 is select emp_name
   from employes;
   newr c1%rowtype;
  begin
  open c1;
  loop
  fetch c1 into newr;
  exit when c1%notfound;
  update employes
  set job=get_job;
  where emp_name=newr.emp_name;
  end loop;
  commit;
  close c1;


  end;


و الان يصبح الناتج هكذا :

EMP_NAME   JOB
---------- ---------
SMITH	  CLERK
ALLEN	  ANALYST
WARD	   SALESMAN
JONES	  MANAGER
MARTIN	 MANAGER
BLAKE	  ANALYST
CLARK	  PRESIDENT
SCOTT	  PRESIDENT
KING	   PRESIDENT
TURNER	 CLERK
ADAMS	  ANALYST

EMP_NAME   JOB
---------- ---------
JAMES	  SALESMAN
FORD	   SALESMAN
MILLER	 CLERK


ملاحظ قد يختلف الناتج عندك لأن عملية التوزيع عملية عشوائية ............ تحياتي