سؤال

لدي مؤشر محدد في PL/SQL ، وأنا أتساءل ما هي أفضل طريقة لاستخدامها من Proج. عادة بالنسبة للمؤسس المحدد في المؤيدج أنت ستفعل:

EXEC SQL DECLARE curs CURSOR FOR SELECT 1 FROM DUAL;
EXEC SQL OPEN curs;
EXEC SQL FETCH curs INTO :foo;
EXEC SQL CLOSE cusr;

كنت آمل أن يعمل بناء الجملة (أو ما شابه ذلك) مع مؤشر معبأ. على سبيل المثال ، لدي حزمة mypack ، مع إعلان

type MyType is record (X integer);
cursor MyCurs(x in integer) return MyType;

الآن لديّ في رمز Pro*C قطعة غير مرضية إلى حد ما من PL/SQL المضمّن التي تفتح المؤشر ، تقوم بإحضار الجلب وما إلى ذلك ، حيث لم أتمكن من الحصول على النمط الأول من بناء الجملة. باستخدام المثال

EXEC SQL EXECUTE
  DECLARE
    XTable is table of MyPack.MyType;
  BEGIN
    OPEN MyPack.MyCurs(:param);
    FETCH MyPack.MyCurs INTO XTable;
    CLOSE MyPack.MyCurs;
  END;
END-EXEC;

هل يعرف أي شخص ما إذا كان هناك نهج أكثر "نقية" Pro*C؟

هل كانت مفيدة؟

المحلول

في الواقع ، لن يكون مختلفًا كثيرًا عن مثالك الأول ، فقط تأكد من أن تعريف المؤشر الخاص بك في مواصفات الحزمة وليس هيئة الحزمة. لا "تعلن" وتذهب مع شيء مثل:

كائن قاعدة البيانات:

create or replace package mypkg as 
  cursor mycur is 
    SELECT 1 FROM DUAL; 
end;

في Pro*C:

EXEC SQL OPEN schema.mypkg.mycur; 
EXEC SQL FETCH schema.mypkg.mycur INTO :foo; 
EXEC SQL CLOSE schema.mypkg.mycur; 

بالطبع ، ستحتاج الحزمة إلى الوصول إلى مستخدم Oracle الذي تتصل به ، وما إلى ذلك. إذا كانت الحزمة مملوكة للمستخدم ، أو يوجد مرادف في مكانه ، "المخطط". غير مطلوب في المكالمات المحترفة.

نصائح أخرى

نعم. قم بإجراء بحث على Google على مصطلح REF Cursor وسترى أمثلة على ما تريد القيام به.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top