คำถามติดแท็ก error-handling

4
วิธีหยุดการประมวลผลสคริปต์ SQL
ฉันกำลังทำงานกับสคริปต์ sql และฉันต้องการหยุดสคริปต์ต่อไปหากเงื่อนไขบางอย่างไม่เป็นที่พอใจ เมื่อฉันเป็น Google ฉันพบว่า RaisError ที่มีระดับความรุนแรง 20 ระดับจะยุติการใช้งาน แต่ด้วยเหตุผลบางอย่างฉันไม่สามารถใช้ตัวเลือกนั้น โปรดบอกฉันว่ามีทางเลือกอะไรบ้างที่จะหยุดการประมวลผลสคริปต์ SQL

2
Oracle PL / SQL มีรูทีน ASSERT มาตรฐานหรือไม่
ฉันต้องการใช้รูทีน ASSERT ที่ใช้งานได้คล้ายกับที่พบในภาษาอื่น ๆ เช่นโครงสร้าง (ไม่ว่าจะเป็นขั้นตอนไวยากรณ์ ... ) ASSERT( <condition>, <msg>) เช่นนั้นเมื่อ<condition>ผ่านในอาร์กิวเมนต์แรกเป็นเท็จข้อยกเว้นจะถูกยกขึ้นด้วย<msg>ข้อความอธิบายที่ระบุ ฉันรู้ว่านี่เป็นเรื่องเล็กน้อยที่จะต้องทำด้วยมือ แต่ฉันถามว่ามีมาตรฐานที่ได้รับจาก DBMS หรือไม่ ต้องเขียนหนึ่งของฉันเองหรือนำเข้าจากแพ็คเกจของบุคคลที่สามจะไม่สามารถทำได้เนื่องจากฉันต้องการให้พกพาได้อย่างสมบูรณ์และโปร่งใสสำหรับทุกโครงการที่ฉันกำลังทำอยู่

1
สร้างข้อยกเว้นด้วยบริบท
เมื่อ PostgreSQL มีข้อผิดพลาดจะมีบรรทัด "CONTEXT" เช่น: ERROR: INSERT has more target COLUMNS than expressions LINE 3: ... ^ QUERY: INSERT INTO ... CONTEXT: PL/pgSQL FUNCTION "XXXXX" line 4 at SQL statement แต่เมื่อฉันโยนข้อยกเว้นบรรทัดนี้ไม่ได้มี ฉันไม่พบวิธีเพิ่ม RAISE EXCEPTION 'blablabla' USING HINT = 'blablablabla'; เป็นไปได้ไหมที่จะเพิ่มบรรทัดนี้ในข้อยกเว้นของฉัน?

3
ERROR_STATE () ใน SQL Server คืออะไรและสามารถใช้งานได้อย่างไร?
ฉันอ่านว่าERROR_STATE()สามารถช่วยแยกแยะความแตกต่างระหว่างสถานะ / สถานที่ต่าง ๆ ในซอร์สโค้ดซึ่งเกิดข้อผิดพลาดประเภทเดียวกันได้ แต่มันไม่ชัดเจนสำหรับฉันว่ามันมีประโยชน์อย่างไร สถานะ MSDN: ERROR_STATE() ส่งคืนหมายเลขสถานะของข้อผิดพลาดที่ทำให้บล็อก CATCH ของโครงสร้าง TRY … CATCH ถูกเรียกใช้ สามารถนำไปใช้งานจริงได้อย่างไร? บางคนสามารถยกตัวอย่างให้ฉันคนที่ให้ไว้ในบทความอ้างอิงนี้ไม่ได้ช่วยอธิบายสิ่งต่าง ๆ ได้ดีสำหรับฉัน

2
วิธีรับบริบทข้อยกเว้นสำหรับข้อยกเว้นที่ยกขึ้นด้วยตนเองใน PL / pgSQL
ใน Postgres เราได้รับ "การติดตามสแต็ก" ของข้อยกเว้นโดยใช้รหัสนี้: EXCEPTION WHEN others THEN GET STACKED DIAGNOSTICS v_error_stack = PG_EXCEPTION_CONTEXT; มันใช้งานได้ดีสำหรับข้อยกเว้น "ธรรมชาติ" แต่ถ้าเราใช้ข้อยกเว้น RAISE EXCEPTION 'This is an error!'; ... จากนั้นไม่มีการติดตามสแต็ก ตามรายการส่งเมล์นี่อาจเป็นการจงใจแม้ว่าฉันจะทำไม่ได้สำหรับชีวิตของฉันก็หาสาเหตุ มันทำให้ผมอยากจะคิดหาวิธีอื่นที่จะโยนยกเว้นอื่น ๆ RAISEกว่าการใช้ ฉันเพิ่งจะเห็นบางสิ่งบางอย่างที่ชัดเจนหรือไม่? ไม่มีใครมีเคล็ดลับสำหรับเรื่องนี้? มีข้อยกเว้นที่ฉันสามารถให้ Postgres ขว้างได้ซึ่งจะมีสตริงที่ฉันเลือกไว้ดังนั้นฉันจะได้รับไม่เพียง แต่สตริงของฉันในข้อความแสดงข้อผิดพลาด แต่การติดตามสแต็กเต็มเช่นกัน? นี่คือตัวอย่างเต็มรูปแบบ: CREATE OR REPLACE FUNCTION error_test() RETURNS json AS $$ DECLARE v_error_stack text; …

3
วิธีบันทึกรายละเอียดข้อผิดพลาดเมื่อใช้ลอง / จับสำหรับคำสั่งสำรอง SQL แบบไดนามิก
เมื่อออกคำสั่งสำรองข้อมูลภายในโพรซีเดอร์ที่เก็บไว้ซึ่งใช้ try catch และ dynamic sql ข้อความแสดงข้อผิดพลาดทั่วไปมากเมื่อเปรียบเทียบกับการรันคำสั่ง backup โดยตรง ลอง / จับภายใน SP: begin try execute sp_executesql @sql; -- a backup command end try begin catch print ERROR_MESSAGE(); -- save to log, etc. end catch ผลลัพธ์ใน 50000: usp_Backup: 117: BACKUP DATABASE สิ้นสุดลงอย่างผิดปกติ ในขณะที่การออกคำสั่ง raw: backup DATABASE someDb to disk... ผลลัพธ์โดยละเอียดยิ่งขึ้น: …

2
รายการข้อผิดพลาดการยกเลิกแบทช์ในเซิร์ฟเวอร์ SQL
ใน SQL Server ถ้า XACT_ABORT ปิดอยู่ข้อผิดพลาดบางอย่างจะยุติคำสั่งปัจจุบัน (ตัวอย่างเช่นการจัดหาจำนวนพารามิเตอร์ที่ไม่ถูกต้องให้กับกระบวนงานที่เก็บไว้ซึ่งใช้พารามิเตอร์บางตัว) และข้อผิดพลาดบางอย่างจะยกเลิกชุดทั้งหมด (ตัวอย่างเช่น ขั้นตอนที่ไม่ใช้พารามิเตอร์) [อ้างอิง]: http://www.sommarskog.se/error-handling-I.html#scope-abortion สิ่งที่ฉันอยากรู้คือว่ามีรายการที่ชัดเจนของข้อผิดพลาดที่มีการยกเลิกชุดและคนที่มีคำสั่งยกเลิก
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.