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

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

صورة
- - - - -

Execute Immediate


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

#1 waleedamin

waleedamin

    عضو

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

تاريخ المشاركة 13 September 2009 - 12:10 PM

سلام عليكم

يا ريت لو فى توضيح لوظيفه الفانكشن

EXECUTE IMMEDIATE

عشاان مش وصلالى اد كده

شكرا مقدما .
^_^

#2 The Spider

The Spider

    عضو

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

تاريخ المشاركة 16 September 2009 - 02:37 AM

يمكنك استخدامها لتنفيذ أوامر sql بشكل ديناميكى بخيارات عديدة
مثﻻ

declare
v_1 varchar2(30);
begin execute immediate 'select last_name from employees where employee_id = 100' into v_1; dbms_output.put_line(v_1);
end

و
declare
v_1 varchar2(30);
v_2 number(4) := 100;
begin execute immediate 'select last_name from employees where employee_id = :1' Into v_1 using v_2;
dbms_output.put_line(v_1);
end;


كما فى المثالين السابقين يتم استخدام into لوضع متغيرات للاحتفاظ بالقيم المعادة من الجملة المنفذة فالناتج يتم تخزينه فى v_1
أما using فتستخدم كما فى المثال السابق لتقييم الـ <1:> bind Arguments فعند التنفيذ يتم وضع قيمة v_2 بدﻻ من :1

يمكنك استخدام returning into مع جمل dml التى تحتوى على returning فقط
مثال
declare
sql_stmt varchar2(200);
v_empid employees.employee_id%type := 100;
v_sal number(8, 2);
begin sql_stmt := 'update employees set salary = 28000 where employee_id = :1 RETURNING sal INTO :2'; EXECUTE IMMEDIATE sql_stmt USING v_empid RETURNING INTO v_sal; dbms_output.put_line('New Sal is:' || v_sal);
end;


يمكن استخدام نوع المتغير out مع using ولكنى ﻻ استطيع ان استخدمها الا بشكل واحد هذا مثال عليه
باعتبار وجود هذه الدالة
CREATE OR REPLACE FUNCTION CallFunc(p1 IN VARCHAR2)
RETURN VARCHAR2 AS BEGIN DBMS_OUTPUT.PUT_LINE('CallFunc called with ' || p1);
RETURN p1;
END CallFunc;

DECLARE
v_Result VARCHAR2(50);
BEGIN EXECUTE IMMEDIATE
'CALL CallFunc(''any text to be printed out'') INTO :v_Result' USING OUT v_Result;
dbms_output.put_line(v_result);
END

صورة

إن خفت أن تفشل ... فلا تقل شئ .. ولاتفعل شئ .. وكن لاشئ
صورة


#3 جلال شواقفه

جلال شواقفه

    عضو مميز

  • الأعضــاء
  • 2,559 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 16 September 2009 - 11:55 AM

شكرا لك على المعلومه
زادك الله علما وفضلا
ارجو من يستفيد من مشاركاتي الدعاء لوالدي ولاموات المسلمين بالمغفره والرحمه......

جلال محمود شواقفه
مدير دائرة الحاسوب
بلدية المفرق الكبرى
المملكه الاردنيه الهاشميه.

#4 عبود

عبود

    مشترك

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

تاريخ المشاركة 16 September 2009 - 03:53 PM

السلام عليكم.. شكرا للاخوان لاثارة وتوضيح هذه الخاصية بس انا كان عندي سوأل وهو هل يمكن استخام هذه الخاصية ( EXECUTE IMMEDIATE) من اجل عمل استعلام من جداول متغيرة ؟ اي يكون اسم الجدول هو الذي يتغير. انا احاول استخام اوراكل APEX من اجل بناء تقرير وفورمة واحدة لعدد من الجداول وصار لي كم يوم بحاول اضبط هذه الخاصية فلو ممكن توضيح ما هي الصعوبة في جعل اسم الجول هو المتغير ؟

#5 Ahmad.Hasan

Ahmad.Hasan

    مشرف قسم الـ Forms & Reports والمشاريع

  • فريق الإشراف
  • 4,871 مشاركة
  • الاسم الأول:Ahmad
  • اسم العائلة:Hasan
  • البـلـد: Country Flag
  • المنصب الحالي:Oracle HCM Consultant

تاريخ المشاركة 16 September 2009 - 04:51 PM

شكرا على المعلومات...
يعطيك العافية...

.Oracle E-Business Suite R12 HCM Certified Implementation Specialist

 

.Oracle Fusion Human Capital Management 11g Human Resources Certified Implementation Specialist

 


#6 The Spider

The Spider

    عضو

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

تاريخ المشاركة 16 September 2009 - 10:57 PM

اخ عبود ﻻيوجد صعوبة المشكلة انه ﻻ يمكنك الا استقبال row واحد فقط ولو اردت استقبال اكثر من row فعيك باستخدام الـ cursor فهذه وظيفتها ودع execute immediate لتنفيذ DDL - DCL

صورة

إن خفت أن تفشل ... فلا تقل شئ .. ولاتفعل شئ .. وكن لاشئ
صورة