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

إرسال باراميتر لإحدي الأغراض

Featured Replies

بتاريخ:

بسم الله الرحمن الرحيم



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

الأخوة الأعزاء ، تحية طيبة وبعد ،

واجهتني مشكلة غريبة ، علي الأقل في نظري ،

بنيت جملة Function ترتجع Table معين ، هذا الـ Function يطلب مني دائماً أن أدخل الـ Parameters الخاصة به ثابتة وليست متغير ولا أعلم ما السبب !!!

مثال :

أنا لدي الغرض التالي :

 
CREATE OR REPLACE TYPE O_EMP IS OBJECT(EMPNO NUMBER(4), ENAME VARCHAR2(10));
/
CREATE OR REPLACE TYPE T_EMP IS TABLE OF O_EMP;
/
CREATE OR REPLACE FUNCTION GET_EMP(IN_START NUMBER, IN_END NUMBER) RETURN T_EMP
AS
  CURSOR CUR IS SELECT EMPNO, ENAME 
					 FROM EMP 
					 WHERE EMPNO BETWEEN IN_START AND IN_END;
  ID_NO NUMBER;
  ID_NAME VARCHAR2(20);
  P_RETURN T_EMP := T_EMP();
BEGIN
  OPEN CUR;
  FETCH CUR INTO ID_NO, ID_NAME;
  WHILE CUR%FOUND
  LOOP
  P_RETURN.EXTEND;
  P_RETURN(P_RETURN.COUNT) := O_EMP(ID_NO, ID_NAME);
  FETCH CUR INTO ID_NO, ID_NAME;
  END LOOP;
  CLOSE CUR;

  RETURN P_RETURN;
END;
/



حينما أستدعية بهذه الطريقة :

 
DECLARE
  ID_NAME VARCHAR2(20);
  CURSOR C IS SELECT ENAME FROM TABLE(GET_EMP(5, 10));
BEGIN
  OPEN C;
  FETCH C INTO ID_NAME;
  CLOSE C;
END;
/



يعمل معي بنجاح

ولكن لاحظوا أنني أستدعيت الـ Function بإدخال قيم الباراميترات من 5 الي 10 بحيث أن يكون ثابتاً . ولكن عندما فكرت بأن أجعلها متغيرة من الطبيعي أن أفكر في الشكل التالي :

 
DECLARE
  ID_NAME VARCHAR2(20);
  ID_START NUMBER := 5;
  ID_END NUMBER := 10;
  CURSOR C IS SELECT ENAME FROM TABLE(GET_EMP(ID_START, ID_END));
BEGIN
  OPEN C;
  FETCH C INTO ID_NAME;
  CLOSE C;
END;
/



ولكن للأسم دائماً تعرض لي الرسالة التالية :

ORA-22905: لا يمكن الوصول إلى صفوف من بند جدول غير متداخل
ORA-06512: عند line 5
ORA-06512: عند line 7





فما هو سبب هذه المشكلة



ملحوظة أخيرة ، تحدث هذه المشكلة أثناء إنشاء غرض يرتجع جدول ، ولكن عند إنشاء غرض يرتجع قيمة واحدة لا تحدث هذه المشكلة


شكراً

بتاريخ:

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


الغريبة نحجت كل هذه الأكواد عندي تماماً
وبالشكل التالي ما علي إلا أن نسخت وقمت باللصق


1 DECLARE


2 ID_NAME VARCHAR2(20);
3 ID_START NUMBER := 7369;
4 ID_END NUMBER := 7934;
5 CURSOR C IS SELECT ENAME FROM TABLE(GET_EMP(ID_START, ID_END));
6 BEGIN
7 OPEN C;
8 FETCH C INTO ID_NAME;
9 CLOSE C;
10* END;
SQL> /

PL/SQL procedure successfully completed.



لكنني سأريك بعض الملاحظات بالنسبة للبئية التي أعمل بها
NLSRTL 9.2.0.1.0
Oracle9i Enterprise Edition 9.2.0.1.0
PL/SQL 9.2.0.1.0
TNS for 32-bit Windows: 9.2.0.1.0

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

NLSRTL 9.0.1.0.0
Oracle9i Enterprise Edition 9.0.1.0.0
PL/SQL 9.0.1.0.0
TNS for 32-bit Windows: 9.0.1.0.0




!!!!!!!!!

بتاريخ:

السلام عليكم ورحمة الله
Oracle Products Release
إصدارة قاعدة البيانات
إصدارة الـ PL/SQL
إصدارة الـ Listener

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

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

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

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

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

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

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.