الانتقال إلى المحتوى
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.

I Need Function To Get Pk Value With Various Tables

Featured Replies

بتاريخ:

اخواني واخواتي في الله
احاول انشاء فانكشن ندخل لها اسم الجدول واسم الحقل المفتاح الاساسي فتقوم بالرجوع باخر قيمة مضاف عليها قيمة 1 لاستخدامها في ادخال قيمة جديدة في حل المفتاح الاساسي.

من المفترض ان تكون جملة SQL والتي توضح تحت التريجر PRE-INSERT بالوضع القديم او المعتاد كالتالي:
SELECT NVL(MAX(FIELD) , 0 ) + 1
INTO :FIELD
FROM TABLE_NAME

المطلوب هو ان يكون اسم الحقل واسم الجدول متغيران

فتح الله عليكم من علمه

بتاريخ:

CREATE OR REPLACE FUNCTION GET_LAST_ID (P_TABLE_NAME VARCHAR2 , 
P_COLOMN_NAME VARCHAR2)
RETURN NUMBER
IS
V_ID  NUMBER (10);
BEGIN SELECT NVL(MAX(_COLOMN_NAME) , 0 ) + 1
INTO V_ID FROM _TABLE_NAME; 
RETURN V_ID;
END;




-- عدل الكود دا وحطه فى program unite عندك على الفورم
-- اعتقد ان الافضل استخدام الفانكشن دى فى ال POST INSERT
-- كمان اجعل خصائص الفيلد Disabled.

تم تعديل بواسطة theunique

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


جزاك الله خيرا وبارك الله فيك وفي علمك
ولكني لم اجد في الكود الذي كتبته جملة from
فهل هذا مقصودة وسوف تعمل الجملة على ذلك ؟

سؤال أخر : هل كانت محاولاتي في استخدام exec_sql او ref cursor خطأ حينما اردت عمل dynamic SQL
افدني من علمك ... مشكووور

بتاريخ:

CREATE OR REPLACE FUNCTION GET_LAST_ID (P_TABLE_NAME VARCHAR2 , 
P_COLOMN_NAME VARCHAR2)
RETURN NUMBER
IS
V_ID  NUMBER (10);
BEGIN SELECT NVL(MAX(_COLOMN_NAME) , 0 ) + 1
INTO V_ID FROM _TABLE_NAME;
RETURN V_ID;
END;




-- From clause is included .... review the code please
انا مش شايف داعى ل Dynamic SQL or Cursor

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

بالتوفيق

تم تعديل بواسطة theunique

بتاريخ:

السلام عليكم ورحمة الله

شكرا لك أخ / theunique

اعتقد ان الافضل استخدام الفانكشن دى فى ال POST INSERT


اعتقد أنك تقصد pre-insert
بتاريخ:
السلام عليكم ورحمة الله

شكرا لك أخ / theunique

اعتقد ان الافضل استخدام الفانكشن دى فى ال POST INSERT


اعتقد أنك تقصد pre-insert

شكرا اخى الفاضل على التنويه .... بالفعل انا اقصد ال PRE-INSERT Trigger
  • بعد 2 أسابيع...
بتاريخ:
  • كاتب الموضوع


بالتجربة يا اخواني اعطاني خطأ وهذا الخطأ كنت متوقعه

حيث انه بمجرد وجود كلمة from فهو ينتظر ان يتبعها اسم الجدول ،
ولذلك اعطى هذه الرسالة.
table or view dose not exists

وهذا ما أردته ان تتكون الجملة بكاملها على أنها String value ثم تنفذ بعدها بجملة exec_sql
وهذه هي الفكرة التي اردت اخواني ان يساعدوني في تطبيقها.

وحينها يستطيع فريق التطوير استخدام هذه الفانكشن للحصول على Primary Key بسهولة بمجرد امدادها باسم الجدول كمتغير نصي واسم الحقل كمتغير نصي أيضا.

وفقكم الله

  • بعد 2 أسابيع...
بتاريخ:
  • كاتب الموضوع

للأهمية وراح يستفيد منها كثير من المطورين

انتظر رد من المشرفين والخبراء الاحباء

بتاريخ:

CREATE OR REPLACE FUNCTION GET_MAX (P_TBL VARCHAR2,P_COL VARCHAR2) RETURN NUMBER IS
V_MAX NUMBER;
BEGIN execute immediate 'SELECT MAX('||P_COL||') FROM '||P_TBL into V_MAX ;
RETURN V_MAX;
END GET_MAX;
/


هذا الكود دايناميك لتنفيذ ما تريده
استدعاءه

SELECT GET_MAX ('EMP','EMP_NO')  FROM DUAL



تحياتي

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


صراحة معلم

بارك الله فيك وجعله في ميزان حسناتك

اخوك ابو عمر

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

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

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

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

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

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.