بتاريخ: 22 يوليو 200817 سنة comment_133826 بسم الله الرحمن الرحيم السلام عليكم ورحمة الله وبركاتة ،الأخوة الأعزاء ، تحية طيبة وبعد ،واجهتني مشكلة غريبة ، علي الأقل في نظري ،بنيت جملة 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 فما هو سبب هذه المشكلةملحوظة أخيرة ، تحدث هذه المشكلة أثناء إنشاء غرض يرتجع جدول ، ولكن عند إنشاء غرض يرتجع قيمة واحدة لا تحدث هذه المشكلةشكراً تقديم بلاغ
بتاريخ: 22 يوليو 200817 سنة comment_133839 السلام عليكم ورحمة الله وبركاته الغريبة نحجت كل هذه الأكواد عندي تماماًوبالشكل التالي ما علي إلا أن نسخت وقمت باللصق 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.0PL/SQL 9.2.0.1.0 TNS for 32-bit Windows: 9.2.0.1.0 تقديم بلاغ
بتاريخ: 22 يوليو 200817 سنة كاتب الموضوع comment_133874 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 !!!!!!!!! تقديم بلاغ
بتاريخ: 22 يوليو 200817 سنة comment_133889 السلام عليكم ورحمة اللهOracle Products Releaseإصدارة قاعدة البياناتإصدارة الـ PL/SQLإصدارة الـ Listener تم تعديل 22 يوليو 200817 سنة بواسطة Shibeika تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.