سؤال

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

أود أن أفعل شيئًا مثل ما يلي:

create or replace function f_example(
  a_input in number
)
return varchar2 is
begin
  create local temporary table tempIDs
  ( 
    testID number(6, 0)
    , testValue number(8,0)
  );

  //select data from tableFoo that will be overwritten by a_input into tempIDs

  //update data in tableFoo with a_input & store old data in another tableFoo field

end f_example;

هذا بناء الجملة لا يعمل. Oracle لا تسمح "بإنشاء" داخل وظيفة.

أنا لست بالفعل مبرمج قاعدة بيانات - أنا معتاد على العمل في C# و Java. في هذه الحالة ، كنت أقوم بتخزين قيمي في مجموعة محلية (أو أي شيء آخر) تنفد عن النطاق عند الانتهاء من الطريقة. هل لا توجد طريقة شرعية لفعل شيء مثل هذا في Oracle SQL؟

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

المحلول

يمكنك تحديد نوع سجل PL/SQL ونوع الجدول المرتبط به. ثم يمكنك إصدار أ SELECT...BULK COLLECT لملء طاولتك.

declare
  type my_record_type is record (testId number, testvalue number);
  type my_table_type is table of my_record_type index by binary_integer;
  my_table my_table_type;
begin
  select x, y bulk collect into my_table from table_foo;
end;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top