مشكلة في تشغيل استعلامات الإدراج مع متغيرات varray

StackOverflow https://stackoverflow.com/questions/116938

  •  02-07-2019
  •  | 
  •  

سؤال

أنا أستخدم SQL*Plus 9.2 على Oracle 10g Enterprise.لقد قمت بإنشاء بعض البرامج النصية التي تقوم بإدخالات أساسية باستخدام المعلمات التي أمررها عبر موجه الأوامر.بدا من المنطقي أن أكون قادرًا على تشغيل مجموعة من الإدخالات في حلقة.لذلك حاولت ما يلي:

--begin

DECLARE

TYPE va_orgs IS TABLE OF nbr.lien_item.lien_item_name%type;

org va_orgs :=  va_orgs('RTA','RTB','RTE','RTI','RTM','RTT');

BEGIN

FOR i in org.FIRST .. org.LAST

LOOP

INSERT INTO nbr.lien_item (lien_item_sid, excel_row, include_in_calcs, indent, header_level, sort_order, unit, lien_item_status, lien_item_name) VALUES (nbr.lien_item_seq.nextval, 0, 'Y', 1, 0, 1, 'FTE', 'A', 'org(i)');

COMMIT;

END LOOP;

END;

/

--end

عندما أقوم بتشغيل البرنامج النصي، أحصل على رسالة تفيد بأن PL/SQL قد اكتمل بنجاح.حاولت التصحيح والاستخدام dbms_output لتوضيح قيم org(i).كل شيء يبدو على ما يرام.ولكن لا يتم إدخال الصفوف في قاعدة البيانات أبدًا.بمجرد أن أقوم بالتحديد، لا تكون الصفوف الجديدة موجودة.هل هناك بعض الحيل حول التكرار والإدراج؟

(لقد حاولت أيضًا IS VARRAY(6) OF بدلا من IS TABLE OF.نفس النتيجة)

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

المحلول

في بيان الإدراج لديك org(i) بين علامات الاقتباس المفردة.لا ينبغي أن يكون لديك ذلك، فمن المحتمل أنك تقوم بإدخال الكلمات org(i) كقيم في الجدول.لذلك يجب أن يكون بيان الإدراج الخاص بك

INSERT INTO nbr.lien_item (lien_item_sid, excel_row, include_in_calcs, indent, header_level, sort_order, unit, lien_item_status, lien_item_name) VALUES (nbr.lien_item_seq.nextval, 0, 'Y', 1, 0, 1, 'FTE', 'A', org(i));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top