سؤال

رأيت المناقشات حول هذا الموضوع في الماضي ، مثل هنا.ولكن أنا أتساءل عما إذا كان في مكان ما على طول الخط ، ربما 10g أو 11g (نحن نستخدم 11g), ORACLE قدمت أي دعم أفضل "معلمات وجهات النظر" ، دون الحاجة إلى القمامة قاعدة البيانات مع جميع أنواع الأنواع المعرفة من قبل المستخدم و/أو المؤشر أو التعاريف أو sys_context المتغيرات في جميع أنحاء.

أنا آمل أوراكل واضاف لدعم شيء ببساطة "يعمل فقط" ، كما في المثال التالي في T-SQL:

CREATE FUNCTION [dbo].[getSomeData] (@PRODID ROWID)  
RETURNS TABLE AS  
    RETURN SELECT PRODID, A, B, C, D, E  
    FROM MY_TABLE  
    WHERE PRODID = @PRODID

ثم اختيار كما إذا:

SELECT * FROM dbo.getSomeData(23)
هل كانت مفيدة؟

المحلول

لا حاجة لSYS_CONTEXT أو المؤشر التعريفات. كنت بحاجة لنوع بحيث، عند تحليل SQL، فإنه يمكن تحديد الأعمدة التي هي على وشك أن عاد. قال ذلك، يمكنك بسهولة كتابة السيناريو من شأنها أن تولد نوع ونوع جمع تعريفات لواحد أو أكثر من الجداول استنادا إلى البيانات في user_tab_columns.

والأقرب هو

create table my_table
(prodid number, a varchar2(1), b varchar2(1), 
  c varchar2(1), d varchar2(1), e varchar2(1));

create type my_tab_type is object
(prodid number, a varchar2(1), b varchar2(1), 
  c varchar2(1), d varchar2(1), e varchar2(1))
.
/

create type my_tab_type_coll is table of my_tab_type;
/

create or replace function get_some_data (p_val in number) 
return my_tab_type_coll pipelined is
begin
  FOR i in (select * from my_table where prodid=p_val) loop
    pipe row(my_tab_type(i.prodid,i.a,i.b,i.c,i.d,i.e));
  end loop;
  return;
end;
/

SELECT * FROM table(get_Some_Data(3));

نصائح أخرى

فمن الممكن لتحديد نوع من "parametrized" آراء في أوراكل.الخطوات هي:

  1. تحديد حزمة تحتوي العامة الأعضاء التي هي في الواقع حاجة المعلمات (ليست هناك حاجة للحصول على وظائف أو إجراءات في تلك الحزمة) ،
  2. تحديد عرض هذا على أساس أنه مجموعة أعضاء.

أن استخدام هذه الآلية مستخدم واحد يجب أن:

  1. فتح الدورة ،
  2. تعيين القيم المطلوبة إلى أن حزمة الأعضاء ،
  3. SELECT البيانات من طريقة العرض ،
  4. تفعل أشياء أخرى أو إغلاق الدورة.

ملاحظة:فمن الضروري بالنسبة للمستخدم القيام بكل الخطوات الثلاث في جلسة واحدة فقط كما الحزمة أعضاء نطاق بالضبط الدورة.

هناك نوعان من مهام قيم الجدول في SQL SERVER:

  1. مضمنة دالة قيم الجدول:بالنسبة مضمنة دالة قيم الجدول لا يوجد وظيفة الجسم ؛ الجدول هو نتيجة مجموعة واحدة SELECT البيان.هذا النوع يمكن أن يدعى 'معلمات عرض' وأنه لا مثيل له في أوراكل كما أعلم.

  2. Multistatement دالة قيم الجدول:عن multistatement قيم الجدول الدالة الجسم ، تعريفها في BEGIN...END بلوك يحتوي على سلسلة من عبارات SQL للعمليات التي تبني و إدراج صفوف في الجدول الذي سوف تعاد.

نموذج أعلاه (من قبل غاري مايرز) بإنشاء جدول وظيفة من النوع الثاني وليس 'معلمات الرأي'.

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