أفضل طريقة لاستخدام مؤشرات حزمة PL/SQL من Pro*C
-
26-09-2019 - |
سؤال
لدي مؤشر محدد في 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 وسترى أمثلة على ما تريد القيام به.