مشكلة في تشغيل استعلامات الإدراج مع متغيرات varray
سؤال
أنا أستخدم 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));