the past بتاريخ: 16 نوفمبر 2007 تقديم بلاغ مشاركة بتاريخ: 16 نوفمبر 2007 يا شباب اريد شرح ل ref cursor وايضا merg ومالفائدة منهما مع مثال يوضح ذلكارجوووووووو الرد اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ammar_kh1982 بتاريخ: 16 نوفمبر 2007 تقديم بلاغ مشاركة بتاريخ: 16 نوفمبر 2007 Salamo 3alaikom, for the ref cursor, you can use it if you want to return a set of data to an application. Like if you are using .Net framwork, and you have a page which needs to view the table of all employees. Then you must return a Ref cursor with all data needed to this application by creating a database procedure like this: create or replace procedure get_emp_data(p_out ref cursor,p_dept_no number) is begin open p_out for select a.emp_id,a.emp_no,a.emp_name,a.sal,b.dept_name from emp a,dept b where b.dept_id = p_dept_no and a.dept_id = b.dept_id; end; Good luck. اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
hanyfreedom بتاريخ: 17 نوفمبر 2007 تقديم بلاغ مشاركة بتاريخ: 17 نوفمبر 2007 (معدل) REF CURSOR DECLARE TYPE empcurtyp IS REF CURSOR RETURN employees%ROWTYPE; emp empcurtyp; -- after result set is built, process all the rows inside a single procedure -- rather than calling a procedure for each row PROCEDURE process_emp_cv (emp_cv IN empcurtyp) IS person employees%ROWTYPE; BEGIN DBMS_OUTPUT.PUT_LINE('-----'); DBMS_OUTPUT.PUT_LINE('Here are the names from the result set:'); LOOP FETCH emp_cv INTO person; EXIT WHEN emp_cv%NOTFOUND; DBMS_OUTPUT.PUT_LINE('Name = ' || person.first_name || ' ' || person.last_name); END LOOP; END; BEGIN -- First find 10 arbitrary employees. OPEN emp FOR SELECT * FROM employees WHERE ROWNUM < 11; process_emp_cv(emp); CLOSE emp; -- find employees matching a condition. OPEN emp FOR SELECT * FROM employees WHERE last_name LIKE 'R%'; process_emp_cv(emp); CLOSE emp; END; / Merge CREATE TABLE bonuses (employee_id NUMBER, bonus NUMBER DEFAULT 100); INSERT INTO bonuses(employee_id) (SELECT e.employee_id FROM employees e, orders o WHERE e.employee_id = o.sales_rep_id GROUP BY e.employee_id); SELECT * FROM bonuses; EMPLOYEE_ID BONUS ----------- ---------- 153 100 154 100 155 100 156 100 158 100 159 100 160 100 161 100 163 100 MERGE INTO bonuses D USING (SELECT employee_id, salary, department_id FROM employees WHERE department_id = 80) S ON (D.employee_id = S.employee_id) WHEN MATCHED THEN UPDATE SET D.bonus = D.bonus + S.salary*.01 DELETE WHERE (S.salary > 8000) WHEN NOT MATCHED THEN INSERT (D.employee_id, D.bonus) VALUES (S.employee_id, S.salary*0.1) WHERE (S.salary <= 8000); EMPLOYEE_ID BONUS ----------- ---------- 153 180 154 175 155 170 159 180 160 175 161 170 179 620 173 610 165 680 166 640 164 720 172 730 167 620 171 740 تم تعديل 17 نوفمبر 2007 بواسطة hanyfreedom اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ahmedselim بتاريخ: 18 نوفمبر 2007 تقديم بلاغ مشاركة بتاريخ: 18 نوفمبر 2007 السلام عليكم ورحمة الله وبركاتهmergeكود يستخدم لعمل ادخال او تعديل بين جدولينيعني في جدولين نبدأ نقارن بين البيانات اللي فيهمبحيث ان الجدول الاول يكون فيه نفس البيانات اللي في الجدول الثانيعن طريق شرط معينفي حاله انها موجوده مسبقا في الجدول الاول يتم التعديل في الجدول الاول عن طريق الثانيواذا كانت غير موجوده في الجدول الاول يتم ادخالها من الجدول الثاني .والله أعلم اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ahmedselim بتاريخ: 18 نوفمبر 2007 تقديم بلاغ مشاركة بتاريخ: 18 نوفمبر 2007 السلام عليكم ورحمة الله وبركاتهRef Cursorنفس مفهوم الكرسور العاديإلا انه يمكن استخدامه لكذا جملة sqlيعني احنا الاول بنعمل datatype نوعها ref cursrorوبعد كده بنعمل variableالتايب بتاعه هيه ال datatype اللي احنا عملناها الاول "زي مبنعمل variable داتا تايب بتاعه number"وكل مره بفتح الكرسور بفتح ال variableعلى جملة sql مختلفة.. OPEN variable_name FOR SELECT column_name FROM Table_name1; OPEN variable_name FOR SELECT column_name FROM Table_name2; OPEN variable_name FOR SELECT column_name FROM Table_name3; والله أعلم اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.