الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف يتم استدعاء الاجراءات

بدأه العقده في 3 أغسطس 2008 · 4 رد · 1,098 مشاهدة · في قواعد بيانات Oracle
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بصراحه انا ضعيف في مواضيع الاجراءات المخزنه ولي عدة استفسارات بخصوص هذا الموضوع اولا كيف يتم استدعاء اجراء مثل هذا بواسطة iSQL *Plus

Declare
i number(5);
BEGIN
FOR i IN 1..10 LOOP
DBMS_OUTPUT.PUT_LINE('i =' || i);
End loop;
END;

وهل بالامكان بناء Table View بواسطة اجراء مخزن يعتمد عرضه على قيمه مرسله للاجراء .

وهل بالامكان عرض نتائج اجراءات مخزنه من نوع PROCEDURE كما يحصل بــ Function

تم تعديل هذه المشاركة بواسطة العقده في 3 أغسطس 2008 في 21:16

ليس كل ما يتمناه المرء يدركه

arabteam2000.gif

#2

1- هذا إجراء يسمى "إجراء غير مسمى " أي يتم تنفيذه بمجرد كتابته في Sql Plus ...

2- يمكنك إنشاء Tables أو Views داخل Procedure بشرط إستخدام Dynamic Sql .

3- عرض النتائج عن طريق Procedure لا يتم إلى عن طريق Out Parameters أو Temporary Tables (ما أجمل Sql Server في هذه النقطة ) ...

#3

مشكور عزيزي المشرف حسام

ليس كل ما يتمناه المرء يدركه

arabteam2000.gif

#4
اقتباس
3- عرض النتائج عن طريق Procedure لا يتم إلى عن طريق Out Parameters أو Temporary Tables (ما أجمل SQL Server في هذه النقطة ) ...

طبعأً بالإضافة إلى الـ Object Type واللي بصراحة يعطيك إمكانية عرض أكثر من سجل كأنك بتعمل إستعلام .

#5
CREATE TABLE EMPLOYEE
(
  EMPLOYEE_ID	NUMBER(10),
  EMPLOYEE_CODE VARCHAR2(20) NOT NULL,
  EMPLOYEE_NAME  VARCHAR2(50) NOT NULL,
  CONSTRAINT PK_EMPLOYEE PRIMARY KEY(EMPLOYEE_ID),
  CONSTRAINT UQ_EMPLOYEE_CODE UNIQUE(EMPLOYEE_CODE),
  CONSTRAINT UQ_EMPLOYEE_NAME UNIQUE(EMPLOYEE_NAME)
)
/

CREATE OR REPLACE TRIGGER TRG_BEFORE_EMPLOYEE BEFORE INSERT ON EMPLOYEE
FOR EACH ROW
BEGIN
  SELECT NVL(MAX(EMPLOYEE_ID),0) + 1
  INTO :NEW.EMPLOYEE_ID
  FROM EMPLOYEE;
END;
/

INSERT INTO EMPLOYEE VALUES(1,'001','Ahmed');
INSERT INTO EMPLOYEE VALUES(2,'002','Ahmed');
INSERT INTO EMPLOYEE VALUES(3,'003','Ahmed');
INSERT INTO EMPLOYEE VALUES(4,'004','Ahmed');
INSERT INTO EMPLOYEE VALUES(5,'005','Ahmed');
------------------------------------------------------------------

CREATE OR REPLACE TYPE O_LIST_EMPLOYEE IS OBJECT
(
  EMPLOYEE_CODE VARCHAR2(20),
  EMPLOYEE_NAME VARCHAR2(50)
)
/

CREATE OR REPLACE TYPE T_LIST_EMPLOYEE IS TABLE OF O_LIST_EMPLOYEE
/

CREATE OR REPLACE FUNCTION GET_EMPLOYEE RETURN T_LIST_EMPLOYEE
AS
  CURSOR CUR_EMPLOYEE IS SELECT EMPLOYEE_CODE,EMPLOYEE_NAME
									   FROM EMPLOYEE ORDER BY EMPLOYEE_ID;
  ID_CODE VARCHAR2(20);
  ID_NAME VARCHAR2(50);
  P_RETURN   T_LIST_EMPLOYEE := T_LIST_EMPLOYEE();
BEGIN
  OPEN CUR_EMPLOYEE;
  FETCH CUR_EMPLOYEE INTO ID_CODE, ID_NAME;

  WHILE CUR_EMPLOYEE%FOUND
  LOOP
	P_RETURN.EXTEND;
	P_RETURN(P_RETURN.COUNT) := O_LIST_EMPLOYEE(ID_CODE,ID_NAME);
	FETCH CUR_EMPLOYEE INTO ID_CODE, ID_NAME;
  END LOOP;

  CLOSE CUR_EMPLOYEE;

  RETURN P_RETURN;
END;
/

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

SELECT * FROM TABLE(GET_EMPLOYEE);

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

مواضيع مشابهة