الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

dynamic sql

Featured Replies

بتاريخ:

السلام عليكم
متى نستعمل ديناميك اس كيو ال وما هي فائدتها وهل الشركات تستخدمها في عمل برامجها ام هناك بديل عتها ؟

بتاريخ:

اخى العزيز m_dba .. دعنا نتخيل مثال بسيط و سريع
تخيل لو عندنا 30 او 40 جدول الأستركشر بتاعهم واحد على سبيل المثال
المحافظات ( كود المحافظة - اسم المحافظة )
المناطق ( كود المنطقة - اسم المنطقة ) ....... الخ
تخيل بقى لو ناا عايز ادخل بيانات فى كل جدول من دول ... الطريقة العادية بتقول ... انك تعمل فورمة لكل جدول و تدخل البيانات .. الى مش طبيعى بقى انك تعمل فورمة واحدة و فيها لست ايتم يجبلك اسماء الجداول ..

تعالى بقى للنقطة الجامدة ..... ازاى نخلى الفورمة تتعامل مع الجداول كمتغيرات ؟ بمعنى انة مفيش حاجة اسمها Insert into Varible
اى ان جملة السكول ثابتة فى حد زاتها لأنها بتتعامل مع جدول واحد ... طب تخيل بقى دى
EXECUTE IMMEDIATE'Insert into ' || List_item1 || ' Values (var1,var2)'

اعزرونى ان كان فى غلط سنتكس ولا حاجة لأنى قاعد على مكنقة خنقانى هههههه

ياريت تكون المعلومة وصلت و لمزيد من التفوق

Oracle ITself

بتاريخ:
  • كاتب الموضوع

بارك الله فيك
يعني ممكن ان استعمل فورمة واحده لادخال بيانات لاكثر من جدول الهم نفس الاستركشر عن طريق زر مثلا في الفورم؟
وكمان لانشاء الجداول بنفس الطريقة
ارجو ان يكون كلامي صحيح.

بتاريخ:

اخى كلاامك مظبوط ... و هو دا استخدام مشهور جدا للدينمك سكول
و الله اعلم
Oracle ITself

بتاريخ:

طلب منى صديق بالمنتدى Hobaa شرح ما معنى دينمك اس كيو ال ... و هذة هى الصيغة العامة للأمر EXECUTE IMMEDIATE
EXECUTE IMMEDIATE dynamic_SQL_string
[iNTO defined_variable1, defined_variable2, ...]
[uSING [iN | OUT | IN OUT] bind_argument1, bind_argument2, ...]
[RETURNING INTO | RETURN bind_argument1, bind_argument2, ...]

و لم اجد افضل من هذا المثال

DECLARE
sql_stmt VARCHAR2(100);
plsql_block VARCHAR2(300);
v_zip VARCHAR2(5) := '11106';
v_total_students NUMBER;
v_new_zip VARCHAR2(5);
v_student_id NUMBER := 151;
BEGIN
-- Create table MY_STUDENT
sql_stmt := 'CREATE TABLE my_student '||
'AS SELECT * FROM student WHERE zip = '||v_zip;
EXECUTE IMMEDIATE sql_stmt;

-- Select total number of records from MY_STUDENT table
-- and display results on the screen
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM my_student'
INTO v_total_students;
DBMS_OUTPUT.PUT_LINE ('Students added: '||v_total_students);

-- Select current date and display it on the screen
plsql_block := 'DECLARE ' ||
' v_date DATE; ' ||
'BEGIN ' ||
' SELECT SYSDATE INTO v_date FROM DUAL; ' ||
' DBMS_OUTPUT.PUT_LINE (TO_CHAR(v_date, ''DD-MON- YYYY''));'||
'END;';
EXECUTE IMMEDIATE plsql_block;

-- Update record in MY_STUDENT table
sql_stmt := 'UPDATE my_student SET zip = 11105 WHERE student_id = :1 '||
'RETURNING zip INTO :2';
EXECUTE IMMEDIATE sql_stmt USING v_student_id RETURNING INTO v_new_zip;
DBMS_OUTPUT.PUT_LINE ('New zip code: '||v_new_zip);
END;

تخيل بقى لو حبينا نعقدها شوية صغيرة بمعنى ( انى مش عارف اصلاا انا هدخل البيانات دى فى جدول x ولا y ولا z الخ الخ الخ

الحل انك تعمل لست ايتم فى فورمة يجيب كل الجداول و المطلوب منك تحطة فى جملة السكول الى موجودة فى EXECUTE IMMEDIATE
بس تحط قبلها كونكت و بعدها كونكت و تخلى بالك من الفواصل و بكدة هيفهم ان الجدول اسمة جاى من اللست ايتم

اخى Hobaa قمت بعمل هذة الفورمة من فترة .. سأبحث عنها و اضعها على المنتدى و شكرا

Oracle ITself

و الله اعلم

بتاريخ:

اما دا بقى ما يسمى الدينمك كرزر

DECLARE
TYPE student_cur_type IS REF CURSOR;
student_cur student_cur_type;

v_zip VARCHAR2(5) := '&sv_zip';
v_first_name VARCHAR2(25);
v_last_name VARCHAR2(25);
BEGIN
OPEN student_cur FOR
'SELECT first_name, last_name FROM student '||
'WHERE zip = :1'
USING v_zip;

LOOP
FETCH student_cur INTO v_first_name, v_last_name;
EXIT WHEN student_cur%NOTFOUND;

DBMS_OUTPUT.PUT_LINE ('First Name: '||v_first_name);
DBMS_OUTPUT.PUT_LINE ('Last Name: '||v_last_name);
END LOOP;
CLOSE student_cur;

EXCEPTION
WHEN OTHERS THEN
IF student_cur%ISOPEN THEN
CLOSE student_cur;
END IF;

DBMS_OUTPUT.PUT_LINE ('ERROR: '||
SUBSTR(SQLERRM, 1, 200));
END;

ارجوا تكونوا استفدتوا حاجة و الله اعلم

Oracle ITself

بتاريخ:
  • كاتب الموضوع

بارك الله فيك يا اخي وكثر من امثالك

بتاريخ:

الف شكر ياباششششششششششششششششششششششششششششششششششششششش

ايهاب وجدى

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.