อัลกอริทึมสำหรับการจัดทำโค้ด SQL


11

ฉันต้องการเครื่องมือ (สำหรับใช้ในบ้าน) ที่จะฟอร์แมตโค้ด SQL (SQL Server / MySQL)
มีเครื่องมือของบุคคลที่สามที่หลากหลายและเว็บไซต์ออนไลน์ที่ทำ แต่ไม่ว่าฉันต้องการมันอย่างแน่นอน

ดังนั้นฉันต้องการเขียนเครื่องมือของตัวเองที่จะตอบสนองความต้องการของฉัน

คำถามแรกมีมาตรฐานหรืออนุสัญญาว่าควรจัดรูปแบบรหัส SQL อย่างไร (เครื่องมือที่ฉันลองฟอร์แมตมันแตกต่างกัน)

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

คำตอบ:


2

... มีมาตรฐานหรือแบบแผนสำหรับวิธีการจัดรูปแบบรหัส SQL หรือไม่?

มาตรฐานเลขที่ คุณสามารถใส่คำสั่ง SQL ทั้งหมดในหนึ่งบรรทัดตราบเท่าที่ตัวแยกวิเคราะห์ SQL เกี่ยวข้อง

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

ฉันเพิ่งใช้ชุดอักขระเฉพาะเพื่อบอกตำแหน่งที่จะแบ่งคำสั่ง SQL

นี่คือตัวอย่างหนึ่งจากตัวจัดรูปแบบ Java DB2 SQLที่ฉันเขียน โปรแกรม Java อื่นสร้างโค้ด Java SQL มาจากSYSIBMตารางโดยตรง

protected void prepareIndex00Select(String codeFacl)
        throws SQLException {
    StringBuffer sb = new StringBuffer();
    sb.append("SELECT CODE_FACL, SEQ_FACL, FILLER_TOF ");
    sb.append("    , CODE_TOF, NAME_FACL, NAME_LENGTH ");
    sb.append("    , CODE_FMB, ID_NCIC_ORI, NBR_PRINTER_PREFIX ");
    sb.append("    , ID_PERSONNEL_OFC, COMPLEX_CODE ");
    sb.append("    , PHS_CODE, DESIG_FACL_GRP, IND_DESIG_AUTH ");
    sb.append("    , CODE_FACL_I_T, INTKEY_FACL, IND_CDM_SENTENCING ");
    sb.append("    , MAL_FEM_IND, DEL_AFTER, IND_INMATES ");
    sb.append("    , VALUE_SO_CPU_STD, VALUE_SO_CPU_DAY ");
    sb.append("    , CODE_CAT, VALUE_DCN, XIDBKEY ");
    sb.append("    , FACL_FK_REGN ");
    sb.append("  FROM ");
    sb.append(creator);
    sb.append(".FACL ");
    sb.append("  WHERE CODE_FACL = ? ");
    if (additionalSQL != null) sb.append(additionalSQL);

    psIndex00 = connection.prepareStatement(sb.toString());
    psIndex00.setString(1, codeFacl);

}   // End prepareIndex00Select method

ผลิตภัณฑ์ของคุณ (ตัวจัดรูปแบบ) พร้อมใช้งานออนไลน์หรือดาวน์โหลดหรือไม่
jullins

@jullins: ไม่ฉันเขียนเพื่อพิสูจน์ว่าฉันสามารถเขียนโปรแกรม Java ที่เขียนคลาส Java รวมถึงการสร้าง SQL จากคอลัมน์ฐานข้อมูลและตารางดัชนี (SYSIBM) น่าเศร้าที่ไม่มีใครทำงานด้วยพบว่ามีประโยชน์ ฉันคิดว่าฉันสามารถใส่รหัสที่ไหนสักแห่งถ้าคุณต้องการ
Gilbert Le Blanc

ฉันจะขอบคุณมันฉันแค่อยากเห็นส่วนการจัดรูปแบบ
jullins

@jullins: ตอนนี้ฉันทำงานอยู่ดังนั้นฉันจึงไม่สามารถเข้าถึงที่เก็บข้อมูลสาธารณะได้ ฉันจะวางโค้ดไว้ที่สุดสัปดาห์นี้และแจ้งให้คุณทราบวิธีการเข้าถึง
Gilbert Le Blanc

แล้วรหัสล่ะ คุณวางมันไว้ที่อื่นได้ไหม
jullins

2

สายนิดหน่อยแค่เจอกับสิ่งนี้ขอโทษ

ตัวจัดรูปแบบ T-SQL ของ Poor Man เป็นตัวจัดรูปแบบของ T-SQL แบบโอเพ่นซอร์ส (ไลบรารี, ปลั๊กอิน ssms, ตัวจัดรูปแบบไฟล์บรรทัดคำสั่ง ฯลฯ ) - การใช้งานนั้นเป็นแบบแยกส่วนที่สมเหตุสมผลและไม่ควรยากที่จะใช้ เพื่อให้ตรงกับ T-SQL (ฉันยังไม่ได้ทำเพราะฉันไม่มีประสบการณ์หรือใช้งานกับ MySQL ในตอนนี้ดังนั้นจึงไม่ใช่การใช้เวลาของฉัน)

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

ตามที่ @Gilbert Le Blank ตอบแล้วไม่มีมาตรฐานแน่นอนในการจัดรูปแบบ SQL - แม้แต่ตัวจัดรูปแบบเชิงพาณิชย์ที่ออกมาพร้อมตัวเลือกต่าง ๆ ที่พวกเขามีให้ไม่รวมตัวในค่าเริ่มต้นเดียวกันหรือสนับสนุนรูปแบบเอาต์พุตเดียวกัน

ด้วยความเคารพในการเขียนเครื่องมือของคุณเองตั้งแต่ต้นฉันจะแนะนำถ้าคุณต้องการจัดการกับกรณีต่างๆอย่างน้อยที่สุดสำหรับ T-SQL, การจัดการแบตช์คำสั่งหลายคำสั่ง SQL ด้วย CTE WITH clauses, คำสั่ง MERGE, คำสั่งย่อยและ ตารางที่ได้รับ ฯลฯ กลายเป็นเรื่องยากมาก :)

ในกรณีที่เป็นความช่วยเหลือใด ๆ : http://www.architectshack.com/PoorMansTSqlFormatter.ashx

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.