{"id":223,"date":"2010-07-16T03:12:47","date_gmt":"2010-07-16T08:12:47","guid":{"rendered":"http:\/\/www.dpriver.com\/blog\/?page_id=223"},"modified":"2024-06-10T02:11:26","modified_gmt":"2024-06-10T07:11:26","slug":"vendor-specific-offline-sql-syntax-check","status":"publish","type":"page","link":"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/vendor-specific-offline-sql-syntax-check\/","title":{"rendered":"vendor-specific offline SQL syntax check"},"content":{"rendered":"<p>SQL syntax check can be done without being connected to the database server and syntax errors can be found before executing SQL on your production database server. Database supports the following:\u00a0 Oracle(PLSQL), SQL Server, MySQL, DB2 and Access.<\/p>\n<p>Download this demo: <a href=\"http:\/\/www.dpriver.com\/gsp\/demos\/java\/checksyntax\/checksyntax.java\">Java version<\/a>, <a href=\"http:\/\/www.dpriver.com\/gsp\/demos\/csharp\/syntaxcheck\/syntaxcheck.zip\">C# version<\/a><\/p>\n\n\n<pre class=\"wp-block-code\"><code>package demos.checksyntax;\r\n\r\n\/**\r\n * This demo illustrate how to use general sql parser to check syntax of SQL script.\r\n * You can download more demos from official site: http:\/\/www.sqlparser.com \r\n *\/\r\n\r\nimport gudusoft.gsqlparser.*;\r\n\r\nimport java.io.File;\r\nimport java.util.ArrayList;\r\nimport java.util.Arrays;\r\nimport java.util.List;\r\n\r\n\r\npublic class checksyntax {\r\n\r\n    private static  File&#91;] listFiles( File sqlFiles )\r\n    {\r\n        List&lt;File> children = new ArrayList&lt;File>( );\r\n        if ( sqlFiles != null )\r\n            listFiles( sqlFiles, children );\r\n        return children.toArray( new File&#91;0] );\r\n    }\r\n\r\n    private static void listFiles( File rootFile, List&lt;File> children )\r\n    {\r\n        if ( rootFile.isFile( ) )\r\n            children.add( rootFile );\r\n        else\r\n        {\r\n            File&#91;] files = rootFile.listFiles( );\r\n            for ( int i = 0; i &lt; files.length; i++ )\r\n            {\r\n                listFiles( files&#91;i], children );\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n     public static void main(String args&#91;])\r\n    {\r\n        long t = System.currentTimeMillis();\r\n\r\n        if (args.length &lt; 1){\r\n            System.out.println(\"Usage: java checksyntax &#91;\/f &lt;path_to_sql_file>] &#91;\/d &lt;path_to_directory_includes_sql_files>] &#91;\/t &lt;database type>]\");\r\n            return;\r\n        }\r\n\r\n\r\n        File sqlFiles = null;\r\n\r\n        List&lt;String> argList = Arrays.asList(args);\r\n\r\n        if ( argList.indexOf( \"\/f\" ) != -1\r\n                &amp;&amp; argList.size( ) > argList.indexOf( \"\/f\" ) + 1 )\r\n        {\r\n            sqlFiles = new File( args&#91;argList.indexOf( \"\/f\" ) + 1] );\r\n            if ( !sqlFiles.exists( ) || !sqlFiles.isFile( ) )\r\n            {\r\n                System.out.println( sqlFiles + \" is not a valid file.\" );\r\n                return;\r\n            }\r\n        }\r\n        else if ( argList.indexOf( \"\/d\" ) != -1\r\n                &amp;&amp; argList.size( ) > argList.indexOf( \"\/d\" ) + 1 )\r\n        {\r\n            sqlFiles = new File( args&#91;argList.indexOf( \"\/d\" ) + 1] );\r\n            if ( !sqlFiles.exists( ) || !sqlFiles.isDirectory( ) )\r\n            {\r\n                System.out.println( sqlFiles + \" is not a valid directory.\" );\r\n                return;\r\n            }\r\n        }\r\n        else\r\n        {\r\n            System.out.println( \"Please specify a sql file path or directory path.\" );\r\n            return;\r\n        }\r\n\r\n        EDbVendor vendor = EDbVendor.dbvoracle;\r\n\r\n        int index = argList.indexOf( \"\/t\" );\r\n\r\n        if ( index != -1 &amp;&amp; args.length > index + 1 )\r\n        {\r\n\r\n            vendor = TGSqlParser.getDBVendorByName(args&#91;index + 1]);\r\n\r\n        }\r\n\r\n\r\n        File&#91;] children = listFiles( sqlFiles );\r\n\r\n        int total_sql_files = 0, error_sql_flies=0;\r\n\r\n        TGSqlParser sqlparser = new TGSqlParser(vendor);\r\n\r\n        for ( int i = 0; i &lt; children.length; i++ )\r\n        {\r\n            File child = children&#91;i];\r\n            if ( child.isDirectory( ) )\r\n                continue;\r\n            \/\/String content = SQLUtil.getFileContent(child);\r\n            if (child.getAbsolutePath().endsWith(\".sql\")){\r\n                total_sql_files++;\r\n                sqlparser.sqlfilename  = child.getAbsolutePath();\r\n\r\n                int ret = sqlparser.parse();\r\n                if (ret != 0){\r\n                    error_sql_flies++;\r\n                    System.out.println(child.getAbsolutePath()+ System.getProperty(\"line.separator\")+sqlparser.getErrormessage());\r\n                    System.out.println(\"\");\r\n                }\r\n            }\r\n        }\r\n\r\n\r\n        System.out.println(\"Time Escaped: \"+ (System.currentTimeMillis() - t) +\",file processed: \"+total_sql_files+\",syntax errors:\"+error_sql_flies );\r\n        if (error_sql_flies > 0){\r\n            System.out.println(\"Selected SQL dialect: \"+vendor.toString());\r\n        }\r\n    }\r\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>SQL syntax check can be done without being connected to the database server and syntax errors can be found before executing SQL on your production database server. Database supports the following:\u00a0 Oracle(PLSQL), SQL Server, MySQL, DB2 and Access. Download this demo: Java version, C# version<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":235,"menu_order":0,"comment_status":"closed","ping_status":"open","template":"","meta":[],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":5}},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Help you to make better use of General SQL Parser<\/title>\n<meta name=\"description\" content=\"Oracle(PLSQL), SQL Server, MySQL, DB2 and Access offline SQL syntax check\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/vendor-specific-offline-sql-syntax-check\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Help you to make better use of General SQL Parser\" \/>\n<meta property=\"og:description\" content=\"Oracle(PLSQL), SQL Server, MySQL, DB2 and Access offline SQL syntax check\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/vendor-specific-offline-sql-syntax-check\/\" \/>\n<meta property=\"og:site_name\" content=\"SQL and Data Blog\" \/>\n<meta property=\"article:modified_time\" content=\"2024-06-10T07:11:26+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/#organization\",\"name\":\"SQL and Data Blog\",\"url\":\"https:\/\/www.dpriver.com\/blog\/\",\"sameAs\":[],\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/07\/sqlpp-character.png\",\"contentUrl\":\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/07\/sqlpp-character.png\",\"width\":251,\"height\":72,\"caption\":\"SQL and Data Blog\"},\"image\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/#website\",\"url\":\"https:\/\/www.dpriver.com\/blog\/\",\"name\":\"SQL and Data Blog\",\"description\":\"SQL related blog for database professional\",\"publisher\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dpriver.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/vendor-specific-offline-sql-syntax-check\/\",\"url\":\"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/vendor-specific-offline-sql-syntax-check\/\",\"name\":\"Help you to make better use of General SQL Parser\",\"isPartOf\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/#website\"},\"datePublished\":\"2010-07-16T08:12:47+00:00\",\"dateModified\":\"2024-06-10T07:11:26+00:00\",\"description\":\"Oracle(PLSQL), SQL Server, MySQL, DB2 and Access offline SQL syntax check\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/vendor-specific-offline-sql-syntax-check\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/vendor-specific-offline-sql-syntax-check\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/vendor-specific-offline-sql-syntax-check\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.dpriver.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"List of demos illustrate how to use general sql parser\",\"item\":\"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"vendor-specific offline SQL syntax check\"}]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Help you to make better use of General SQL Parser","description":"Oracle(PLSQL), SQL Server, MySQL, DB2 and Access offline SQL syntax check","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/vendor-specific-offline-sql-syntax-check\/","og_locale":"en_US","og_type":"article","og_title":"Help you to make better use of General SQL Parser","og_description":"Oracle(PLSQL), SQL Server, MySQL, DB2 and Access offline SQL syntax check","og_url":"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/vendor-specific-offline-sql-syntax-check\/","og_site_name":"SQL and Data Blog","article_modified_time":"2024-06-10T07:11:26+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Organization","@id":"https:\/\/www.dpriver.com\/blog\/#organization","name":"SQL and Data Blog","url":"https:\/\/www.dpriver.com\/blog\/","sameAs":[],"logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dpriver.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/07\/sqlpp-character.png","contentUrl":"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/07\/sqlpp-character.png","width":251,"height":72,"caption":"SQL and Data Blog"},"image":{"@id":"https:\/\/www.dpriver.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"WebSite","@id":"https:\/\/www.dpriver.com\/blog\/#website","url":"https:\/\/www.dpriver.com\/blog\/","name":"SQL and Data Blog","description":"SQL related blog for database professional","publisher":{"@id":"https:\/\/www.dpriver.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dpriver.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/vendor-specific-offline-sql-syntax-check\/","url":"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/vendor-specific-offline-sql-syntax-check\/","name":"Help you to make better use of General SQL Parser","isPartOf":{"@id":"https:\/\/www.dpriver.com\/blog\/#website"},"datePublished":"2010-07-16T08:12:47+00:00","dateModified":"2024-06-10T07:11:26+00:00","description":"Oracle(PLSQL), SQL Server, MySQL, DB2 and Access offline SQL syntax check","breadcrumb":{"@id":"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/vendor-specific-offline-sql-syntax-check\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/vendor-specific-offline-sql-syntax-check\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/vendor-specific-offline-sql-syntax-check\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.dpriver.com\/blog\/"},{"@type":"ListItem","position":2,"name":"List of demos illustrate how to use general sql parser","item":"https:\/\/www.dpriver.com\/blog\/list-of-demos-illustrate-how-to-use-general-sql-parser\/"},{"@type":"ListItem","position":3,"name":"vendor-specific offline SQL syntax check"}]}]}},"_links":{"self":[{"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/pages\/223"}],"collection":[{"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/comments?post=223"}],"version-history":[{"count":22,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/pages\/223\/revisions"}],"predecessor-version":[{"id":3107,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/pages\/223\/revisions\/3107"}],"up":[{"embeddable":true,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/pages\/235"}],"wp:attachment":[{"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/media?parent=223"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}