คำขอแบทช์ 1s 8.3 แบบสอบถามง่ายๆ การสร้างชุดคำขอโดยใช้ตัวออกแบบ

เพิ่มความสามารถในการอ่านได้อย่างมาก ซึ่งช่วยลดโอกาสที่จะเกิดข้อผิดพลาด => แค่นี้ก็เพียงพอแล้วสำหรับฉัน

ภาษาคิวรีในตัวของ 1C:Enterprise เวอร์ชัน 8.0 ขาดความสามารถในการใช้ตารางชั่วคราวและเขียนคิวรีแบบแบตช์ ในเวลาเดียวกัน มักจะจำเป็นต้องทำการคำนวณที่ซับซ้อนภายในคำขอเดียว (นั่นคือ หนึ่งรอบของการโต้ตอบระหว่างไคลเอนต์ - 1C:เซิร์ฟเวอร์องค์กร - เซิร์ฟเวอร์ DBMS) เพื่อแก้ไขปัญหาดังกล่าว มีการใช้แบบสอบถามย่อย - ไม่ใช่การเรียกไปยังออบเจ็กต์ข้อมูลเมตา แต่เป็นการโทรไปยังการเลือกจากออบเจ็กต์เหล่านี้ โดยทั่วไปแล้ว แบบสอบถามย่อยจะดำเนินการด้วยการจัดกลุ่มและมักจะใช้ในการรวม

เครื่องมือเพิ่มประสิทธิภาพเซิร์ฟเวอร์ DBMS (ไม่ว่าคุณจะใช้ DBMS ใด) ไม่สามารถปรับแบบสอบถามดังกล่าวให้เหมาะสมได้อย่างถูกต้องเสมอไป ในกรณีนี้ ปัญหาสำหรับเครื่องมือเพิ่มประสิทธิภาพคือการเลือกวิธีการเชื่อมต่อที่ถูกต้อง มีอัลกอริธึมหลายอย่างสำหรับการรวมสองตัวอย่าง การเลือกอัลกอริธึมอย่างใดอย่างหนึ่งขึ้นอยู่กับจำนวนบันทึกที่จะมีอยู่ในตัวอย่างหนึ่งและอีกตัวอย่างหนึ่ง หากคุณกำลังรวมตารางฟิสิคัลสองตาราง DBMS จะสามารถกำหนดขนาดของตัวอย่างทั้งสองได้อย่างง่ายดายตามสถิติที่มีอยู่ ถ้าหนึ่งในตัวเลือกที่รวมเป็นแบบสอบถามย่อย จะเป็นการยากมากที่จะเข้าใจว่าจะส่งกลับบันทึกจำนวนเท่าใด ในกรณีนี้ DBMS อาจทำผิดพลาดในการเลือกแผน ซึ่งจะทำให้ประสิทธิภาพการสืบค้นลดลงอย่างมาก

การเขียนแบบสอบถามใหม่โดยใช้วิธีการข้างต้นมีจุดประสงค์เพื่อทำให้การทำงานของเครื่องมือเพิ่มประสิทธิภาพ DBMS ง่ายขึ้น ในแบบสอบถามที่เขียนใหม่ การเลือกทั้งหมดที่เข้าร่วมในการรวมจะเป็นตารางจริง และ DBMS จะสามารถกำหนดขนาดของการเลือกแต่ละรายการได้อย่างง่ายดาย สิ่งนี้จะช่วยให้ DBMS รับประกันว่าจะเลือกแผนที่เร็วที่สุดที่เป็นไปได้ทั้งหมด นอกจากนี้ DBMS จะตัดสินใจเลือกสิ่งที่ถูกต้องโดยไม่คำนึงถึงเงื่อนไขใดๆ แบบสอบถามที่เขียนใหม่ในลักษณะนี้จะทำงานได้ดีพอๆ กันบน DBMS ใดๆ ซึ่งมีความสำคัญอย่างยิ่งเมื่อพัฒนาโซลูชันการหมุนเวียน นอกจากนี้ แบบสอบถามที่เขียนใหม่ในลักษณะนี้สามารถอ่านได้ดีกว่า เข้าใจง่ายกว่า และแก้ไขจุดบกพร่อง

ควรเข้าใจว่าการเขียนแบบสอบถามใหม่ด้วยวิธีนี้อาจทำให้ช้าลงเนื่องจากค่าใช้จ่ายเพิ่มเติม - การสร้างตารางชั่วคราว หาก DBMS ไม่ได้ทำผิดพลาดในการเลือกแผน DBMS อาจจะดำเนินการสืบค้นเก่าได้เร็วกว่าอันใหม่ อย่างไรก็ตาม การชะลอตัวนี้จะน้อยมากเสมอไป ขนาดของการชะลอตัวขึ้นอยู่กับ DBMS ที่ใช้และประสิทธิภาพของฮาร์ดแวร์ ในกรณีทั่วไป อาจใช้เวลาหลายมิลลิวินาทีในการสร้างตารางชั่วคราวหนึ่งตาราง นั่นคือการชะลอตัวเหล่านี้ไม่สามารถส่งผลกระทบที่เห็นได้ชัดเจนต่อประสิทธิภาพของระบบ และตามกฎแล้วสามารถเพิกเฉยได้

บทความนี้มีไว้สำหรับผู้อ่านที่คุ้นเคยกับภาษา SQL

ภาษาคิวรี 1C ที่ใช้ตั้งแต่เวอร์ชัน 8 ได้กลายเป็นเครื่องมือที่มีประโยชน์สำหรับการทำงานกับฐานข้อมูลในปัจจุบัน ซึ่งช่วยให้คุณสามารถอ่านจากฐานข้อมูลเหล่านั้นได้ แต่ไม่สามารถเขียนได้ ในทางวากยสัมพันธ์ ภาษาคิวรีจะคล้ายกับภาษา SQL มาก แต่เป็นภาษารัสเซีย

ด้านล่างนี้เป็นตารางการติดต่อระหว่างภาษาคิวรีหลักและตัวดำเนินการ SQL:

ตัวดำเนินการภาษาคิวรี 1C

คำสั่ง SQL

หลากหลาย

สารประกอบ

จัดกลุ่มตาม

รวมกัน

เรียงตาม

และนี่ไม่ใช่รายการทั้งหมด ข้อมูลอ้างอิงที่สมบูรณ์เพิ่มเติมเกี่ยวกับตัวดำเนินการภาษาคิวรีที่มีอยู่สามารถรับได้จากตัวออกแบบคิวรี ซึ่งจะกล่าวถึงด้านล่างนี้

การดำเนินการคำขอ 1C จากรหัสโปรแกรมดำเนินการโดยใช้วัตถุภาษาในตัว "คำขอ" ตัวอย่างการเขียนแบบสอบถามฐานข้อมูลโดยใช้ภาษาการเขียนโปรแกรมในตัว:

คำขอ = คำขอใหม่; Query.Text = "SELECT | Synonym.Link AS Link |FROM | Directory.Directory1 AS Synonym"; เลือก = Query.Run().Select(); ในขณะที่ Selection.Next () Loop // แทรกการประมวลผลการเลือก SelectionDetailedRecords EndCycle;

เมธอด "Run" ดำเนินการค้นหา เมธอด "Select" ส่งคืนค่าประเภท "SelectFromQueryResult" คุณยังสามารถใช้เมธอด Unload ซึ่งส่งคืนตารางค่า

พารามิเตอร์คำขอจะถูกเก็บไว้ในคุณสมบัติ "พารามิเตอร์" (ในกรณีนี้คือโครงสร้าง ดังนั้นวิธีโครงสร้างทั้งหมดจึงสามารถใช้ได้ที่นี่ - แทรก ลบ ฯลฯ )

ตัวอย่างการตั้งค่าพารามิเตอร์ “Query.Parameters.Insert” (“Directory”, DirectoryLink) ในคำขอ คุณสามารถเข้าถึงพารามิเตอร์ได้โดยใช้เครื่องหมายและ “&Directory” ด้านล่างนี้คือตัวอย่างคำขอที่ใช้พารามิเตอร์:

คำขอ = คำขอใหม่; Query.Text = "SELECT | Users.Link AS Link, | Users.Parent AS Parent, | Users.Name AS Name |FROM | Directory.Users AS Users |WHERE | Users.Link = &Directory"; Query.Parameters.Insert("ไดเรกทอรี", DirectoryLink); เลือก = Query.Run().Select(); ในขณะที่ Selection.Next () Loop // แทรกการประมวลผลการเลือก SelectionDetailedRecords EndCycle;

โปรดจำไว้ว่าภาษาคิวรีมีไว้สำหรับการอ่านข้อมูลจากฐานข้อมูลเท่านั้น ดังนั้นจึงไม่มีอะนาล็อกของคำสั่ง SQL เช่น INS ERT และ UPDATE ข้อมูลสามารถแก้ไขได้ผ่านโมเดลออบเจ็กต์ของภาษาการเขียนโปรแกรม 1C ในตัวเท่านั้น นอกจากนี้ในภาษาคิวรี 1C ยังมีตัวดำเนินการที่ไม่มีแอนะล็อกใน SQL เช่น:

  • ในลำดับชั้น
  • สถานที่
  • จัดทำดัชนีโดย

ในลำดับชั้น– ให้คุณเลือกองค์ประกอบทั้งหมดของไดเร็กทอรีแบบลำดับชั้นที่รวมอยู่ในลำดับชั้นของลิงก์ที่ถ่ายโอน ตัวอย่างคำขอใช้ ในลำดับชั้น:

เลือก Products.Link, Products.Article จาก Directory.Products AS Products WHERE Products.Link IN HIERARCHY(&Citrus)"

ในกรณีนี้ ผลลัพธ์จะส่งคืนอิลิเมนต์รองทั้งหมดของไดเร็กทอรีระบบการตั้งชื่อ Citrus ไม่ว่าไดเร็กทอรีนี้มีลำดับชั้นกี่ระดับก็ตาม

ตัวอย่างเช่น ภารกิจคือค้นหาผลิตภัณฑ์ชื่อ "ปากกา" สินค้าจะต้องรวมอยู่ในลำดับชั้น "เครื่องเขียน" สินค้า” คือเราไม่ต้องมองหาที่จับประตู โครงสร้างของระบบการตั้งชื่อในกรณีนี้มีดังนี้:

สำนักงาน

|_ ปากกาหมึกซึม |_ ปากกาสีแดง |_ ปากกาสีน้ำเงิน |_ ปากกาหมึก |_ ไม้บรรทัด

เครื่องประดับ

|_ มือจับประตู |_ มือจับประตูเรียบง่าย |_ มือจับประตูหรูหรา

เราเขียนคำขอต่อไปนี้:

เลือก Products.Link, Products.Article จาก Directory.Products AS Products WHERE Products.Name Like "Pen%" AND Products.Link IN HIERARCHY(&เครื่องเขียน)"

เมื่อใช้การออกแบบ ในลำดับชั้นมีความจำเป็นต้องคำนึงว่าหากคุณส่งลิงก์ว่างไปยังพารามิเตอร์ "Office" การดำเนินการตามคำขอจะช้าลงเนื่องจากแพลตฟอร์มจะตรวจสอบแต่ละองค์ประกอบเพื่อดูว่าเป็นของรูทหรือไม่

สถานที่– คำสั่งนี้วางผลลัพธ์ไว้ในตารางชั่วคราว คำขอตัวอย่าง:

SELECT Users.Link AS Link, Users.Parent AS Parent, Users.Name AS Name PLACE SelectedUsers FROM Directory.Users AS Users WHERE Users.Link = &Directory; เลือก SelectedUsers.Link AS Link, SelectedUsers.Parent AS Parent, SelectedUsers.Name AS ชื่อจาก SelectedUsers AS SelectedUsers

แบบสอบถาม SQL นี้จะถูกดำเนินการโดยแบบสอบถามหลายรายการ:

  • การสร้างตารางชั่วคราว (แพลตฟอร์มสามารถ "ใช้ซ้ำ" ตารางชั่วคราวที่สร้างไว้ก่อนหน้านี้ได้ ดังนั้นการสร้างจึงไม่เกิดขึ้นเสมอไป)
  • การวางข้อมูลในตารางชั่วคราว
  • การดำเนินการค้นหาหลัก ได้แก่ SEL ECT จากตารางชั่วคราวนี้
  • การทำลาย/ทำความสะอาดโต๊ะชั่วคราว

ตารางชั่วคราวสามารถถูกทำลายได้อย่างชัดเจนผ่านโครงสร้าง ทำลายหรือโดยปริยาย - เมื่อปิดตัวจัดการตารางชั่วคราว

วัตถุ "แบบสอบถาม" ของภาษาการเขียนโปรแกรมในตัวมีคุณสมบัติ "ตัวจัดการตารางชั่วคราว" ซึ่งมีไว้สำหรับทำงานกับตารางชั่วคราว รหัสตัวอย่าง:

MVT = ตัวจัดการตารางชั่วคราวใหม่ (); คำขอ = คำขอใหม่; Query.TemporaryTableManager = MVT;

หลังจากดำเนินการค้นหาแล้ว ตัวแปร MVT สามารถนำมาใช้เป็นครั้งที่สองในแบบสอบถามอื่น ซึ่งเป็นข้อดีอีกประการหนึ่งของการใช้ตารางชั่วคราวอย่างไม่ต้องสงสัย ในกรณีนี้ ตารางชั่วคราวจากฐานข้อมูลจะถูกลบเมื่อมีการเรียกเมธอด "ปิด"...

MVT.ปิด();

...หรือเมื่อทำการล้างตัวแปรออกจากหน่วยความจำ กล่าวคือ เมื่อดำเนินการตามวิธีการประกาศตัวแปร ตารางชั่วคราวจะเพิ่มภาระบนระบบย่อยของดิสก์ ดังนั้นคุณไม่ควรสร้างระบบย่อยชั่วคราวมากเกินไป (เช่น ในลูป) หรือระบบย่อยที่มีปริมาณมาก

จัดทำดัชนีโดย– โอเปอเรเตอร์นี้ใช้ร่วมกับโอเปอเรเตอร์ สถานที่.เมื่อสร้างตารางชั่วคราว โอเปอเรเตอร์นี้สามารถจัดทำดัชนีตารางที่กำลังสร้างได้ ซึ่งจะช่วยเร่งความเร็วในการทำงานได้อย่างมาก (แต่เฉพาะในกรณีที่ดัชนีตรงกับคำค้นหาของคุณ)

ปรึกษาผู้เชี่ยวชาญฟรี

ขอขอบคุณสำหรับคำขอของคุณ!

ผู้เชี่ยวชาญ 1C จะติดต่อคุณภายใน 15 นาที

คุณลักษณะของตัวดำเนินการภาษาคิวรีบางตัว

เพื่อการเปลี่ยนแปลง– ตัวดำเนินการนี้มีวัตถุประสงค์เพื่อล็อคตารางแบบสอบถามเฉพาะ (หรือตารางทั้งหมดที่มีส่วนร่วมในการสืบค้น) การล็อคทำได้โดยใช้การล็อค U กับโต๊ะ ใน SQL สิ่งนี้ถูกนำไปใช้ผ่านคำแนะนำ UPDLOCK การออกแบบนี้จำเป็นเพื่อป้องกันการหยุดชะงัก ตัวอย่างคำขอพร้อมการก่อสร้าง สำหรับการเปลี่ยนแปลง:

SELECT Users.Link AS Link, Users.Parent AS Parent, Users.Name AS Name FROM Directory.Users AS Users LEFT JOIN Directory.RFK AS RFK BY Users.RFK = RFK.Link TO CHANGE Directory.Users

ในตัวอย่างนี้ U lock จะถูกวางไว้บนตาราง Users หากคุณไม่ระบุตารางสำหรับการล็อค ตารางนั้นจะถูกกำหนดให้กับทุกตารางที่เข้าร่วมในแบบสอบถาม สิ่งสำคัญคือต้องทราบว่าการออกแบบนี้ใช้งานได้เฉพาะในการกำหนดค่าที่เปิดใช้งานโหมดการจัดการล็อคอัตโนมัติเท่านั้น



สารประกอบ– คำขอรองรับการเชื่อมต่อ ซ้าย/ขวา, เต็ม, ด้านใน,ซึ่งสอดคล้องกับการรวมใน SQL - LEFT/RIGHT JOIN, OUTER JOIN, INNER JOIN

อย่างไรก็ตาม เมื่อใช้เครื่องมือสร้างแบบสอบถาม คุณจะไม่สามารถทำได้ เข้าร่วมอย่างถูกต้องตัวสร้างจะสลับตาราง แต่ตัวดำเนินการจะอยู่ทางซ้ายเสมอ ด้วยเหตุนี้ คุณจะไม่เห็นการใช้สิทธิ์เข้าร่วมใน 1C

การเชื่อมต่อมีลักษณะดังนี้:

เลือก Table1.Link AS ลิงค์จาก Directory.Directory1 AS Table1 LEFT JOIN Directory.Directory2 AS Table2 BY Table1.Attributes = Table2.Attributes

ภาษาคิวรี 1C ไม่มีตัวดำเนินการสำหรับการเข้าร่วมผลิตภัณฑ์คาร์ทีเซียน (CROSS JOIN) อย่างไรก็ตาม การไม่มีตัวดำเนินการไม่ได้หมายความว่าภาษาคิวรีไม่รองรับการเชื่อมต่อดังกล่าว หากจำเป็น คุณสามารถเข้าร่วมตารางได้ดังนี้:

เลือก Table1.Link AS ลิงค์จาก Directory.Directory1 AS Table1 LEFT JOIN Directory.Directory2 AS Table2 BY TRUE

ดังที่เห็นได้จากตัวอย่าง มีการตั้งค่าคีย์การเชื่อมต่อแล้ว โดยความจริงนั่นคือแต่ละแถวของตารางหนึ่งจะสอดคล้องกับแถวของอีกตารางหนึ่ง ประเภทของการรวม (LEFT, RIGHT, FULL, INNER) ไม่สำคัญหากคุณมีแถวในทั้งสองตาราง แต่ถ้าไม่มีแถวในตารางใดตารางหนึ่ง (สมมติว่าตาราง) ผลลัพธ์จะแตกต่างออกไป เช่น เมื่อใช้ ภายในผลการเชื่อมต่อจะว่างเปล่า โดยใช้ ซ้ายขวาผลลัพธ์ของการ join จะเป็นหรือไม่ใช่ข้อมูล ขึ้นอยู่กับว่าเราจะ join ตารางไหน - มีข้อมูลหรือไม่ โดยใช้ เต็มข้อมูลจะเชื่อมต่ออยู่เสมอ (โดยปกติ มีเพียงตารางเดียวเท่านั้น เนื่องจากอีกตารางหนึ่งว่างเปล่า) การเลือกประเภทการเชื่อมต่อขึ้นอยู่กับงานแอปพลิเคชันเฉพาะ

คำแนะนำแบบภาพเล็กๆ น้อยๆ เกี่ยวกับวิธีการทำงานของการเชื่อมต่อประเภทต่างๆ:



ชอบ.ไม่เหมือนกับตัวดำเนินการ SQL ที่คล้ายกัน - LIKE เทมเพลตสำหรับ ชอบสามารถระบุได้โดยใช้อักขระพิเศษเพียงบางตัวเท่านั้น:

  • % (เปอร์เซ็นต์): ลำดับที่มีอักขระตามจำนวนเท่าใดก็ได้
  • _ (ขีดล่าง): อักขระหนึ่งตัว;
  • / - อักขระถัดไปควรตีความว่าเป็นอักขระปกติ

ผลลัพธ์ของซอฟต์แวร์อะนาล็อก SQL คือตัวดำเนินการ ROLLUP ตัวอย่างการใช้งานของโอเปอเรเตอร์ ผลลัพธ์:

เลือกผลิตภัณฑ์ ราคาตามราคา ผลิตภัณฑ์ ผลิตภัณฑ์ AS ผลิตภัณฑ์จากไดเรกทอรี ระบบการตั้งชื่อ AS ผลลัพธ์เฉลี่ยของผลิตภัณฑ์ (ราคา) ตามผลิตภัณฑ์

ผลลัพธ์จะเป็นดังนี้:

เตียง

9833,333

เหล็ก

ปากกา

นั่นคือ จะมีการเพิ่มบรรทัดเพิ่มเติมลงในผลลัพธ์ที่มีค่าของฟิลด์ที่ใช้จัดกลุ่มและค่าของฟังก์ชันการรวม

การทำงานกับคำขอแบบแบตช์

1C ช่วยให้คุณสามารถทำงานกับคำขอจำนวนมากได้ ในคำขอแบบกลุ่ม ข้อความคำขอจะถูกคั่นด้วยเครื่องหมายอัฒภาค (;) คำขอแบทช์ 1C ดำเนินการตามลำดับ ตัวอย่างข้อความคำขอแบทช์:

เลือก Users.Link AS Link, Users.Parent AS Parent, Users.Name AS ชื่อจาก Directory.Users AS Users;
เลือกตารางการทำงาน ผู้ใช้เป็นผู้ใช้ ตารางการทำงาน วันที่เป็นวันที่ ตารางการทำงาน ชั่วโมงการทำงาน เป็นเวลาทำงานจากข้อมูลการลงทะเบียน ตารางการทำงาน เป็นตารางการทำงาน

หากต้องการรับผลลัพธ์ของการสืบค้นทั้งหมดที่รวมอยู่ในแพ็คเกจ คุณต้องใช้เมธอด "ExecutePackage" ของออบเจ็กต์คำขอ แทน "Run" วิธีการนี้จะดำเนินการตามคำขอทั้งหมดตามลำดับ ผลลัพธ์การสืบค้นคืออาร์เรย์ของผลลัพธ์สำหรับแต่ละการสืบค้นในแพ็คเกจ และลำดับของตำแหน่งในอาร์เรย์จะเหมือนกับลำดับการสืบค้นในข้อความของแพ็คเกจ

เมื่อพิจารณาถึงภาษาคิวรี เป็นสิ่งที่ควรค่าแก่การกล่าวถึงคุณลักษณะเช่นตารางเสมือน ตารางเสมือนไม่มีอยู่ในฐานข้อมูล แต่เป็น wrapper ชนิดหนึ่งที่ดำเนินการบนฝั่ง DBMS เป็นแบบสอบถามโดยใช้แบบสอบถามย่อย ตัวอย่างแบบสอบถาม 1C โดยใช้ตารางเสมือน:

เลือก RegisterLiabilitiesTurnovers.Liability AS Liability จาก RegisterAccumulations.RegisterLiabilities.Turnover() AS RegisterLiabilitiesTurnovers

แบบสอบถามไปยัง DBMS ดังกล่าวจะมีลักษณะดังนี้:

เลือก ECT T1.FLD25931RRRRRERF FR OM (เลือก t2._fld25931rref เป็น FLD25931RRRRERF, CAST (SUM (T2._FLD25936) AS ตัวเลข (38, 8)) เป็น FLD25936TURNOVER_, CAST (SUM (SUM (T2.. LD25937) เป็นตัวเลข (38, 8)) AS Fld25937Turnover_ FR OM dbo._AccumRgTn25938 T2 WH ERE ((T2._Fld949 = @P1)) AND ((T2._Fld25936 @P2 หรือ T2._Fld25937 @P3)) จัดกลุ่มตาม T2._Fld25931RRef HAVING (นักแสดง (SUM( T2._Fld25) 936 ) AS NUMERIC(38, 8))) 0.0 หรือ (CAST(SUM(T2._Fld25937) AS NUMERIC(38, 8))) 0.0) T1>>>>

จะเห็นได้ว่าดูไม่เหมือน SQL เนื่องจากมีแบบสอบถามย่อยการจัดกลุ่ม โดยทั่วไปแล้ว ตารางเสมือนคือ "น้ำตาลเชิงวากยสัมพันธ์" ซึ่งโดยทั่วไปแล้วตารางจะถูกสร้างขึ้นเพื่อความสะดวกในการพัฒนาแบบสอบถาม เพื่อให้แบบสอบถามมีขนาดกะทัดรัดและอ่านง่ายขึ้น

เฉพาะเครื่องบันทึกเงินสดเท่านั้นที่มีตารางเสมือน แต่สามารถดูตารางเสมือนใดที่เครื่องบันทึกเงินสดได้ในตัวออกแบบคิวรี



เมื่อใช้ตารางเสมือน คุณต้องระบุเงื่อนไขการเลือกเสมอ มิฉะนั้นอาจเกิดปัญหาด้านประสิทธิภาพการทำงาน



ในเนื้อหาคำขอมีลักษณะดังนี้:

ทะเบียนการสะสม ทะเบียนความรับผิด เทิร์นโอเวอร์ (, การดำเนินการ = &การดำเนินการ) AS ทะเบียนความรับผิด เทิร์นโอเวอร์

เพื่อความสะดวกในการเขียนแบบสอบถามนั่นคือการสร้างข้อความแบบสอบถามใน 1C มีตัวสร้างที่สามารถเรียกผ่านเมนูบริบท (ปุ่มเมาส์ขวา):



ในตัวออกแบบคิวรี คุณสามารถดูรายการฟังก์ชันและตัวดำเนินการภาษาคิวรีที่รองรับทั้งหมดได้


ตัวสร้างแบบสอบถามเป็นเครื่องมือภาพที่มีความยืดหยุ่นสูงสำหรับการสร้างแบบสอบถามที่ซับซ้อน ใช้ได้เฉพาะในโหมดตัวกำหนดค่าเท่านั้น ในโหมดองค์กรจะมีสิ่งที่เรียกว่า "คอนโซลแบบสอบถาม" ซึ่งเป็นการประมวลผลภายนอกที่จัดส่งบนดิสก์ ITS สำหรับแอปพลิเคชันที่มีการจัดการ สามารถดาวน์โหลดคอนโซลแบบสอบถามได้จาก its.1c.ru

คำอธิบายการทำงานในตัวออกแบบคิวรีอยู่นอกเหนือขอบเขตของบทความนี้ ดังนั้นจึงไม่มีการกล่าวถึงในรายละเอียด

เหตุผลสำหรับประสิทธิภาพการสืบค้นที่ต่ำกว่าปกติ

ด้านล่างนี้คือรายการสาเหตุหลัก (แต่ไม่ใช่ทั้งหมด) ที่ทำให้การดำเนินการค้นหาช้า

  • การใช้การรวมกับแบบสอบถามย่อย

ไม่แนะนำให้ทำการเชื่อมต่อกับแบบสอบถามย่อย ควรแทนที่แบบสอบถามย่อยด้วยตารางชั่วคราว การต่อคิวรีย่อยอาจทำให้ประสิทธิภาพลดลงอย่างมาก และการดำเนินการคิวรีบน DBMS ที่แตกต่างกันอาจมีความเร็วที่แตกต่างกันอย่างมาก ความเร็วในการดำเนินการของการสืบค้นดังกล่าวยังมีความอ่อนไหวต่อสถิติใน DBMS อีกด้วย สาเหตุของลักษณะการทำงานนี้คือ เครื่องมือเพิ่มประสิทธิภาพ DBMS ไม่สามารถกำหนดแผนการดำเนินการแบบสอบถามที่ดีที่สุดได้อย่างถูกต้องเสมอไป เนื่องจากเครื่องมือเพิ่มประสิทธิภาพไม่ทราบอะไรเลยเกี่ยวกับจำนวนแถวที่แบบสอบถามย่อยจะกลับมาหลังจากดำเนินการ

  • การใช้ตารางเสมือนในการรวมแบบสอบถาม

ตารางเสมือนที่ระดับ DBMS จะดำเนินการเป็นแบบสอบถามย่อย ดังนั้นเหตุผลจึงเหมือนกับในย่อหน้าแรก

  • การใช้เงื่อนไขในแบบสอบถามที่ไม่เหมาะสมกับดัชนีที่มีอยู่

หากอยู่ในเงื่อนไขคำขอ (ในผู้ดำเนินการ ที่ไหนหรือเงื่อนไขตารางเสมือน) ใช้ฟิลด์ที่ไม่ได้รวมอยู่ในดัชนีทั้งหมด การสืบค้นนี้จะดำเนินการโดยใช้การสแกนตารางโครงสร้าง SQL หรือการสแกนดัชนี (ทั้งหมดหรือบางส่วน) สิ่งนี้จะส่งผลต่อไม่เพียงแต่เวลาในการดำเนินการแบบสอบถามเท่านั้น แต่ยังส่งผลต่อการล็อก S ที่มากเกินไปในแถวเพิ่มเติม ซึ่งอาจนำไปสู่การยกระดับการล็อก กล่าวคือ ตารางทั้งหมดจะถูกล็อก

  • การใช้ OR ในเงื่อนไขการสืบค้น

การใช้ตัวดำเนินการเชิงตรรกะ หรือในการออกแบบ ที่ไหนอาจส่งผลให้มีการสแกนตารางด้วย สิ่งนี้เกิดขึ้นเนื่องจาก DBMS ไม่สามารถใช้ดัชนีได้อย่างถูกต้อง แทน หรือคุณสามารถใช้การออกแบบได้ รวมทุกอย่าง

  • การรับข้อมูลผ่านจุดสำหรับฟิลด์ประเภทคอมโพสิต

ไม่แนะนำให้รับค่าผ่านจุด (ในการก่อสร้าง เลือกที่ไหน) เนื่องจากหากแอตทริบิวต์ของวัตถุกลายเป็นประเภทที่ซับซ้อน การรวมจะเกิดขึ้นกับแต่ละตารางที่รวมอยู่ในประเภทที่ซับซ้อนนี้ เป็นผลให้การสืบค้น DBMS จะซับซ้อนมากขึ้นอย่างมาก ซึ่งอาจป้องกันไม่ให้เครื่องมือเพิ่มประสิทธิภาพเลือกแผนการดำเนินการสืบค้นที่ถูกต้อง

บล็อกบริษัท 1C GOODWILL

แพลตฟอร์ม 1C Enterprise ช่วยให้คุณสามารถดำเนินการค้นหาหลายรายการตามลำดับในแต่ละครั้ง ใน 1C สิ่งนี้เรียกว่าแพ็คเกจคำขอ ภายในแพ็คเกจเดียว แต่ละคำขอจะถูกคั่นด้วยเครื่องหมายอัฒภาค

เพื่อให้บรรลุการดำเนินการค้นหาทีละขั้นตอนในแพ็คเกจ ตามกฎแล้ว ตารางชั่วคราวจะถูกสร้างขึ้น จากนั้นเงื่อนไขสำหรับการแบ่งปัน เช่น ตัวกรอง การรวม และการรวม จะถูกสร้างขึ้น ด้วยเหตุนี้จึงได้ผลลัพธ์สุดท้าย ตารางชั่วคราวที่ได้รับจากการสืบค้นใดๆ ในชุดงานจะยังคงมีอยู่จนกว่าจะสิ้นสุดชุดโดยรวม หรือจนกว่าจะมีการดำเนินการสืบค้นที่ทำลายตารางชั่วคราว

นอกจากนี้ การใช้แบบสอบถามแบบแบตช์และตารางชั่วคราวช่วยเพิ่มความสามารถในการอ่านส่วนของโค้ดนี้ทั้งหมดได้อย่างมาก การสืบค้นที่ซับซ้อนซึ่งมีการสืบค้นที่ซ้อนกันอาจเป็นเรื่องยากที่จะเข้าใจ อย่างไรก็ตาม หากคุณแบ่งการสืบค้นที่ซับซ้อนยาวออกเป็นหลาย ๆ และใช้ตารางชั่วคราว สิ่งนี้จะไม่เพียงปรับปรุงการรับรู้เท่านั้น แต่ในกรณีส่วนใหญ่ยังนำไปสู่ประสิทธิภาพที่เพิ่มขึ้นอีกด้วย

รายละเอียดที่สำคัญอีกประการหนึ่งที่สนับสนุนการสืบค้นแบบแบตช์ใน 1C ก็คือ ต่างจากการสืบค้นแบบซ้อน เราสามารถรับผลลัพธ์ของการสืบค้นแต่ละครั้งในชุดแบบแยกกัน

ตัวอย่างการสร้างแพ็คเกจคำขอในภาษา 1C

หากต้องการดูตัวอย่างวิธีสร้างแพ็คเกจแบบสอบถาม เราจะใช้ตัวออกแบบแบบสอบถาม ซึ่งเราจะเรียกจากคอนโซลแบบสอบถามเพื่อความชัดเจน ดังนั้นเราจึงสามารถเห็นผลลัพธ์ของการดำเนินการแพ็คเกจได้ทันที

มาสร้างคำขอแบทช์ง่ายๆ กัน ฉันแนะนำให้วางข้อความคำขอลงในคอนโซลทันที จากนั้นเปิด Constructor และดูว่าแพ็คเกจคำขอเกิดขึ้นอย่างไร เพิ่มคำขอใหม่ลงในคอนโซลและวางข้อความต่อไปนี้:

การเลี้ยงตนเอง ผู้ปกครอง

พึ่งตนเองได้ รหัส

พึ่งตนเองได้ รหัสเลือกด่วน

พึ่งตนเองได้ ชื่อ

ชนิดพึ่งตนเองได้

พึ่งตนเองได้ นอกงบดุล

การเลี้ยงตนเอง เชิงปริมาณ

ผังบัญชี พึ่งตนเอง AS พึ่งตนเอง

////////////////////////////////////////////////////////////////////////////////

ประเภทที่สนับสนุนตนเองหมายเลข Subconto.Line AS หมายเลขบรรทัด

ประเภทการสนับสนุนตนเองของ Subconto.ViewSubconto AS TypeSubconto,

Self-supportingTypesSubconto.TypeSubconto.Name AS ชื่อ

Self-supportingTypesSubconto.TypeSubconto.ValueType ASValueType,

ประเภทที่สนับสนุนตนเอง Subconto.OnlyTurnover AS OnlyTurnover,

Self-supportingTypesSubconto.Summary AS Summative

ผังบัญชี การพึ่งพาตนเอง ประเภทของบัญชีย่อย AS การบัญชีตนเอง ประเภทของบัญชีย่อย

เรียงตาม

ประเภทการพึ่งพาตนเองSubconto.NumberLines

สำหรับฉันดูเหมือนว่านี้:

ตอนนี้ไปที่ตัวออกแบบแบบสอบถาม ที่นี่เราจะสนใจแท็บ "ขอแพ็คเกจ":

อย่างที่คุณเห็น เรามีคำขอสองชุด เมื่อดับเบิลคลิกที่รายการใดรายการหนึ่ง คุณสามารถดำเนินการแก้ไขต่อไปได้:

คลิกปุ่ม "ตกลง" และลองดูผลลัพธ์ของคำขอแบทช์

มาตั้งค่าพารามิเตอร์ "บัญชี" กัน คุณสามารถเลือกบัญชีใดก็ได้จากผังบัญชี ตามที่คุณอาจเดาได้แล้ว แพ็คเกจคำขอนี้จะต้องได้รับคุณสมบัติบัญชี คลิก "เรียกใช้" และดูผลลัพธ์:

วิธีการ Run() และ RunBatch()

นอกเหนือจากวิธีการ Execute() ซึ่งจะดำเนินการคำขอทั้งหมดในแบตช์ทีละรายการและส่งคืนผลลัพธ์ของคำขอล่าสุด ใน 1C ยังมีวิธี ExecuteBatch() โดยจะส่งคืนอาร์เรย์ตัวอย่างของแต่ละคำขอในชุดงาน ในตัวอย่างข้างต้น นี่เป็นวิธีการที่แน่นอน

ArrayResults = Query.ExecuteBatch();

Selection1 = ArrayResults.Select();

ถ้า Select1.Next() แล้ว

//การดำเนินการกับการเลือก 1

สิ้นสุดถ้า;

SelectionViewsSubconto = ArrayResults.Select();

โพสต์ การทำงานกับคำขอแบทช์ใน 1C 8.3 และ 8.2 ปรากฏครั้งแรกในบล็อกบริษัท 1C GOODWILL

ตัวออกแบบแบบสอบถามใน 1C 8.3 และ 8.2 เป็นเครื่องมือการพัฒนาที่ทรงพลัง ช่วยให้คุณสามารถเขียนข้อความคำขอโดยใช้สภาพแวดล้อมภาพพิเศษ ดังนั้นในการสร้างคำขอ 1C ไม่จำเป็นต้องรู้ภาษาคิวรีในตัว แต่ก็เพียงพอที่จะนำทางอินเทอร์เฟซที่เรียบง่ายและใช้งานง่ายของนักออกแบบ

ตัวสร้างแบบสอบถามคือชุดของแท็บ ซึ่งแต่ละแท็บมีหน้าที่รับผิดชอบในส่วนของแบบสอบถามของตัวเอง เลยกรอกแท็บ ตารางและเขตข้อมูลเราเลือกตารางที่แบบสอบถาม 1C จะได้รับข้อมูลและฟิลด์ของตารางเหล่านี้ที่จำเป็นในการแก้ปัญหาเฉพาะ ต่อเติมเข้าในก่ออิฐ เงื่อนไขเรากำหนดเงื่อนไขในตารางที่เลือกเพื่อเลือกเฉพาะข้อมูลที่เราต้องการเป็นต้น

คำอธิบายของตัวออกแบบแบบสอบถามบนเว็บไซต์อย่างเป็นทางการ 1C 8: v8.1c.ru

ตารางและเขตข้อมูล ; ; ; ; ; แบบสอบถามที่ซ้อนกัน (อยู่ระหว่างการพัฒนา)

ในการเรียกตัวออกแบบแบบสอบถาม 1s 8 ในโค้ดโปรแกรมคุณต้อง:

  • สร้างคำขอใหม่
คำขอ = คำขอใหม่;
  • ตั้งค่าบรรทัดข้อความคำขอว่าง
คำขอข้อความ = "";
  • วางเคอร์เซอร์ของเมาส์ระหว่างเครื่องหมายคำพูดแล้วกดปุ่มเมาส์ขวา ในเมนูบริบทที่เปิดขึ้น ให้เลือกรายการ ตัวสร้างแบบสอบถามและตอบ ใช่สำหรับคำถามเกี่ยวกับการสร้างคำขอใหม่ หากข้อความคำขอถูกเขียนลงไปแล้ว คุณจะต้องคลิกที่ใดก็ได้ภายในข้อความนั้นแล้วโทรหา Constructor ;

มาดูแท็บหลักทั้งหมดของตัวสร้างคิวรีโดยใช้ตัวอย่างเล็กๆ น้อยๆ ของการเพิ่มความซับซ้อน วิธีการนี้จะช่วยให้โปรแกรมเมอร์ 1C มือใหม่สามารถศึกษาตัวสร้างและความสามารถทั้งหมดได้อย่างมีประสิทธิภาพมากขึ้น ตัวอย่าง เราจะใช้การกำหนดค่า การบัญชี 3.0

บทที่ 1. ตัวสร้างแบบสอบถามเป็นกรณีการใช้งานที่ง่ายที่สุด

งาน: เขียนคำขอไปยังไดเร็กทอรีระบบการตั้งชื่อ เลือกระบบการตั้งชื่อทั้งหมดของไดเร็กทอรี

แท็บใหม่: ตารางและเขตข้อมูล

กลไกใหม่: การดูและแก้ไขข้อความคำขอโดยใช้ปุ่ม "คำขอ"

เพื่อเริ่มสร้างคำขอ เรามาสร้างคำขอใหม่และเรียกตัวสร้าง (ดังที่เขียนไว้สองสามย่อหน้าด้านบน) หลังจากนี้ หน้าต่างตัวออกแบบจะเปิดขึ้นบนแท็บ ตารางและเขตข้อมูล

ส่วนทางทฤษฎีของบทเรียนหมายเลข 1

แท็บ ตารางและเขตข้อมูลประกอบด้วยสามส่วน:

ฐานข้อมูล. ส่วนนี้นำเสนอตารางฐานข้อมูลทั้งหมดที่สามารถใช้ในการสร้างแบบสอบถาม

ตาราง. ในส่วนนี้ จะมีการเลือกตารางที่จำเป็นสำหรับแบบสอบถามนี้ เพื่อย้ายพวกเขาออกจากส่วน ฐานข้อมูลจำเป็นต้อง:

  • หรือดับเบิลคลิกบนโต๊ะ
  • หรือใช้ปุ่ม ">" หรือ ">>"

ส่วนด้านบน ตารางมีหลายปุ่ม ส่วนใหญ่จะกล่าวถึงรายละเอียดเพิ่มเติมในบทเรียนต่อไปนี้ สำหรับตอนนี้ผมจะอธิบายเพียงสั้นๆเท่านั้น

  • สร้างแบบสอบถามย่อย(เส้นสีแดง). ออกแบบมาเพื่อสร้างแบบสอบถามย่อยใหม่
  • สร้างคำอธิบายตารางชั่วคราว(เส้นสีเหลือง). ช่วยให้คุณระบุชื่อของตารางชั่วคราวที่อยู่นอกแบบสอบถามนี้ นอกจากนี้ยังสามารถใช้เพื่อส่งตารางค่าไปยังแบบสอบถาม
  • เปลี่ยนองค์ประกอบปัจจุบัน(สายสีเขียว). ช่วยให้คุณสามารถข้ามไปยังแบบสอบถามย่อย ตารางชั่วคราว หรือคำอธิบายตารางชั่วคราวที่เลือก
  • ลบรายการปัจจุบัน(เส้นสีน้ำเงิน). ลบตารางที่เลือกออกจากตารางที่เลือก
  • เปลี่ยนโต๊ะ(เส้นสีน้ำเงิน). เปิดกล่องโต้ตอบเพื่อแทนที่ตารางที่เลือก มีประโยชน์หากคุณเลือกตารางเสมือนการลงทะเบียนผิด เนื่องจากการวางตำแหน่งเกิดขึ้นบนตารางที่เลือกในปัจจุบันในรายการ
  • ตัวเลือกตารางเสมือน(เส้นสีม่วง). เปิดพารามิเตอร์ของตารางรีจิสเตอร์เสมือน

เขตข้อมูล. ส่วนนี้เลือกเขตข้อมูลตารางจากส่วนก่อนหน้า ฟิลด์เหล่านี้จะเป็นคอลัมน์ของตารางหรือการเลือกที่ได้รับอันเป็นผลมาจากแบบสอบถาม มีความจำเป็นเป็นหลักเพื่อให้ได้เฉพาะข้อมูลที่จำเป็นในบางกรณีจากตารางที่เลือกเท่านั้น เพื่อที่จะย้ายพวกเขาออกจากส่วน ตารางที่จำเป็น:

  • หรือดับเบิลคลิกที่ฟิลด์
  • หรือใช้ปุ่ม ">" หรือ ">>"
  • คุณยังสามารถเพิ่มฟิลด์ใหม่ได้ด้วยตัวเอง โดยใช้นิพจน์ที่กำหนดเองจากฟิลด์ของตารางที่เลือกและฟังก์ชันภาษาคิวรี

ส่วนด้านบน เขตข้อมูลมีหลายปุ่ม การสร้างฟิลด์โดยใช้นิพจน์ที่กำหนดเองจะกล่าวถึงรายละเอียดเพิ่มเติมในบทเรียนต่อไปนี้ สำหรับตอนนี้ผมจะอธิบายเพียงสั้นๆเท่านั้น

  • เพิ่ม(สายสีเขียว). ออกแบบมาเพื่อเพิ่มฟิลด์ใหม่โดยใช้โปรแกรมแก้ไขนิพจน์อิสระ
  • เปลี่ยนองค์ประกอบปัจจุบัน(เส้นสีแดง). ช่วยให้คุณเปลี่ยนฟิลด์ที่เลือกโดยใช้โปรแกรมแก้ไข
  • ลบปัจจุบัน(เส้นสีน้ำเงิน). ลบฟิลด์ที่เลือกออกจากรายการ

ส่วนปฏิบัติของบทเรียนหมายเลข 1

เราได้จัดการกับทฤษฎีที่จำเป็นในการทำงานที่ให้ไว้ในบทเรียนนี้ให้สำเร็จ ฉันขอเตือนคุณว่ามันฟังดูเป็นอย่างไร: เขียนคำขอไปยังไดเร็กทอรีระบบการตั้งชื่อเลือกระบบการตั้งชื่อทั้งหมดของไดเร็กทอรี

มาเริ่มสร้างคำขอสำหรับรายการกันดีกว่า:

  • มาสร้างคำขอใหม่และเปิดตัวสร้างโดยใช้วิธีการที่ระบุไว้ในตอนต้นของบทเรียน
  • ในบทที่ ฐานข้อมูล,มาเปิดกระทู้กันดีกว่า ไดเรกทอรีและเราจะพบคำแนะนำที่นั่น ศัพท์;
  • เลือกและใช้ปุ่ม ">" เพื่อย้ายไปยังส่วนดังกล่าว ตาราง;
  • ในบทที่ ตารางเปิดไดเร็กทอรีระบบการตั้งชื่อโดยใช้ไอคอน "+"
  • ในรายการฟิลด์ที่เปิดขึ้น ให้ค้นหาฟิลด์ ลิงค์และย้ายไปยังส่วนนั้น เขตข้อมูลโดยใช้ปุ่ม ">"
  • คำขอรายการพร้อมแล้ว คลิกปุ่ม "ตกลง" ที่ด้านล่างของหน้าต่างตัวออกแบบ

เมื่อการสืบค้นของฉันซับซ้อนมากจนเกินขีดจำกัดความเข้าใจของฉัน ฉันจึงตัดสินใจใช้การสืบค้นแบบกลุ่ม

แต่ฉันต้องเผชิญกับความจริงที่ว่าฉันไม่รู้อะไรเกี่ยวกับพวกเขาเลย ปรากฎว่าทุกอย่างง่ายมาก ภายใน 5 นาที คุณจะสามารถใช้การสืบค้นแบบกลุ่มได้ เริ่มอ่าน.

เมื่อปรากฎว่าทุกอย่างง่ายมาก คุณเพียงแค่ต้องเขียนแบบสอบถามหลายรายการโดยคั่นด้วยเครื่องหมายอัฒภาค ผลลัพธ์จะถูกส่งกลับในคำขอสุดท้าย

คำขอแบบแบตช์ปรากฏเฉพาะในเวอร์ชัน 8.1.11.67.4

นี่คือข้อความคำขอ:

เลือก T1.Zn วางตัวอักษร VTB จาก (เลือก "A" เป็น Zn รวมทั้งหมดเลือก "B") เป็น T1;

เลือก T1.ZN วาง VTDIGITS จาก (เลือก "1" เป็น VN รวมทั้งหมดเลือก "2") เป็น T1;

เลือก TB.Zn, TC.Zn, TB.Zn+TC.Zn จากตัวอักษร VTB AS TB, หมายเลข VTC AS TC

การสืบค้นแบบกลุ่มได้รับการสนับสนุนในคอนโซลการสืบค้นปกติ

รูปภาพแสดงการดำเนินการตามคำขอตัวอย่าง:

และตอนนี้เล็กน้อยจากประสบการณ์ เหตุใดเราจึงต้องมีคำขอเป็นชุด?

ความจริงก็คือคุณสามารถใส่ผลลัพธ์ระดับกลางบางประเภทลงในตารางชั่วคราวได้ ซึ่งอาจจำเป็นต้องใช้ในการสืบค้นครั้งต่อไปหลายรายการ

ก่อนหน้านี้ เมื่อไม่มีตารางชั่วคราว ข้อความคิวรีจะต้องถูกทำซ้ำ

แน่นอนว่าคุณสามารถทำได้โดยไม่ต้องค้นหาเป็นกลุ่มโดยดำเนินการค้นหาหลายรายการตามลำดับและจัดการตารางที่ซ้อนกัน แต่จะสะดวกกว่าหากขอเป็นชุด คุณเพียงแค่เขียนแบบสอบถามและไม่คิดจะวางตารางชั่วคราว ทุกอย่างเกิดขึ้นด้วยตัวมันเอง

นอกจากนี้ หากใช้ระบบการจัดองค์ประกอบข้อมูล (DCS) ระบบจะเลือกฟิลด์ที่จำเป็นอย่างชาญฉลาดและลดแพ็คเกจการสืบค้นทั้งหมดให้เหลือน้อยที่สุด

หากคำขอมีวิธีการ คำขอ.Run()ตอนนี้ก็มีวิธีการแล้ว คำขอ ExecuteBatch()ซึ่งส่งคืนตารางทั้งหมดจากแพ็คเกจเป็นอาร์เรย์

การประกาศคำขอแบทช์บนเว็บไซต์ 1c อยู่ที่นี่: http://v8.1c.ru/overview/release_8_1_11/#Functional

เรื่องราวชีวิต

ให้ฉันอธิบายสิ่งที่กระตุ้นให้ฉันเริ่มคำขอแบบแบตช์

ลองจินตนาการว่ามีเอกสารอยู่ ซึ่งมีส่วนที่เป็นตาราง ในคอลัมน์ " ข้อผิดพลาด» ระบุว่ามีข้อผิดพลาดในการกรอกเอกสารหรือไม่ ในคอลัมน์ " ข้อความผิดพลาด» อาจมีหนึ่งประโยคขึ้นไปที่มีข้อความแสดงข้อผิดพลาด ประเภทของข้อผิดพลาดที่มีอยู่ในประโยคจะทราบล่วงหน้า

ดังนั้นเราจึงใส่รายการข้อผิดพลาดทั้งหมดลงในตาราง รหัสข้อผิดพลาด- ประกอบด้วยรหัสข้อผิดพลาดและสตริงย่อยการค้นหา

เราได้รับข้อผิดพลาดหนึ่งหรือสองข้อผิดพลาดขึ้นไปสำหรับแต่ละบรรทัด เพราะ อาจมีข้อผิดพลาดหลายประการในหนึ่งบรรทัด

แต่ข้อผิดพลาดอาจไม่ได้รับการยอมรับเช่น ธง " ข้อผิดพลาด" ย่อมาจาก แต่ข้อความแสดงข้อผิดพลาดไม่ได้ให้รหัสข้อผิดพลาดแก่เรา

เราทำการเข้าร่วมด้านซ้ายโดยที่รหัสข้อผิดพลาดเป็น NULL เราให้รหัสข้อผิดพลาด “ ข้อผิดพลาดอื่น ๆ» .

แต่ปัญหาคือมีรหัสข้อผิดพลาดประมาณ 200 รหัส การเชื่อมต่อด้านซ้ายจึงใช้งานได้นานมาก ฉันต้องแทนที่ด้วยการเชื่อมต่อภายในที่ลอยอยู่ แต่ในขณะเดียวกัน บรรทัดที่ไม่พบข้อผิดพลาดก็หายไป ฉันยังนึกไม่ออกว่าจะทำให้เส้นเหล่านี้กลายเป็นผลลัพธ์ได้อย่างไร

คำขอถูกเขียนขึ้นสำหรับระบบโครงร่างเช่น โดยหลักการแล้ว ไม่สามารถใช้ตารางค่าหรือตารางชั่วคราวได้ นี่คือจุดที่การสืบค้นแบบแบตช์มีประโยชน์

ฉันเพียงเชื่อมต่อทุกบรรทัดที่มีข้อผิดพลาดกับบรรทัดทั้งหมดที่พบข้อผิดพลาดอีกครั้งและยังคงเพิ่มประเภทข้อผิดพลาด "ข้อผิดพลาดอื่น ๆ"