المصفوفات في SQL أوراكل
سؤال
وهنا نسخة الزائفة رمز مبسط ما أود أن تكون قادرة على القيام في PL-SQL (أوراكل):
DECLARE
mylist as ARRAY
BEGIN
mylist (1) := '1'
mylist (2) := '3'
...
SELECT *
FROM aTable
WHERE aKey IN mylist;
END;
ووSELECT يجب إرجاع السجلات المطابقة للقائمتي (1)، قائمتي (2) وما إلى ذلك يجب أن تكون مماثلة لأورينج كل القيم، ولكن بالطبع نحن لا نعرف مسبقا كيف العديد من القيم التي سنحصل عليها.
وكيف يمكنني تحقيق ذلك؟ وأنا أعلم أن PL / SQL لديه بعض أنواع البيانات المجموعة، ولكن أنا لا يمكن أن يبدو للحصول عليها للعمل بشكل صحيح في بيانات SQL.
وشكرا لأية أفكار.
المحلول
وهذا من السهل القيام به مع وظيفة TABLE()
. الصيد واحد هو أن متغير مجموعة يجب استخدام نوع أعلن في SQL. وذلك لأن SELECT
يستخدم محرك SQL، لذلك الإعلانات PL / SQL هي خارج النطاق.
SQL> create or replace type numbers_nt as table of number
2 /
Type created.
SQL>
SQL> declare
2 l_array numbers_nt;
3 begin
4 l_array := numbers_nt (7521,7566,7654);
5 for r in ( select ename
6 from emp
7 where empno in ( select *
8 from table (l_array)
9 )
10 )
11 loop
12 dbms_output.put_line ( 'employee name = '||r.ename);
13 end loop;
14 end;
15 /
employee name = PADFIELD
employee name = ROBERTSON
employee name = BILLINGTON
PL/SQL procedure successfully completed.
SQL>
نصائح أخرى
وزوجان من الاقتراحات:
1.) هناك على SQL الكلمة CAST التي يمكنك القيام به يمكن أن قيام بهذه المهمة ... فهو يجعل أن يعامل جمع الخاصة بك كما لو كان الجدول.
2.) وظائف عبر خط انابيب. في الأساس الدالة بإرجاع البيانات التي يشبه الجدول.
وهذا الرابط يلخص الخيارات ويحتوي على عدد من القوائم التعليمات البرمجية التي شرحها.
<وأ href = "http://www.databasejournal.com/features/oracle/article.php/3352091/CASTing-About-For-a-Solution-Using-CAST-and-Table-Functions-in- PLSQL.htm "يختلط =" نوفولو noreferrer "> http://www.databasejournal.com/features/oracle/article.php/3352091/CASTing-About-For-a-Solution-Using-CAST-and-Table-Functions -في-PLSQL.htm