我应该在运行 Statement.executeUpdate 方法之前从 SQL/PLSQL 文件内容中删除注释吗

Posted

技术标签:

【中文标题】我应该在运行 Statement.executeUpdate 方法之前从 SQL/PLSQL 文件内容中删除注释吗【英文标题】:Should I strip comments from SQL/PLSQL file contents before running Statement.executeUpdate method 【发布时间】:2019-12-04 11:43:38 【问题描述】:

我有一个程序,它采用一组 sql/plsql 文件,主要包含 DDL,并在打开与数据库的连接后执行其内容。

try (Connection connection = DriverManager.getConnection(jdbcUrl, username, passwd)) 
    if (connection != null) 
        for (String sqlFile : sqlFiles) 
            Statement statement = connection.createStatement();
            List<String> sqls = readFile(sqlFile);
            for (String sql : sqls) 
                statement.executeUpdate(sql);
            
        
    
 catch (SQLException ex) 


// readFile(String fileName) returns the list of queries separated by "/" for .plsql and ";" for .sql files


我在 *** 中看到了很多关于如何删除单行和多行 cmets 的问题。但是,当我使用包含 cmets(多行和单行)的文件进行测试时,我没有遇到任何问题,并且脚本正在正确执行。

那么,我可以在执行 Statememt.executeUpdate() 方法之前将 cmets 保存在 sql 字符串中吗?即使它现在可以很好地处理测试数据,我以后还会遇到问题吗?

【问题讨论】:

如果它有效,为什么你认为它无效?另外,您是在谈论评论+查询还是查询中的评论,还是孤立的评论?我希望第一个可以正常工作(对于大多数数据库系统,如果不是全部的话),我不太确定最后一个。 不需要移除 cmets,Oracle 可以毫无问题地处理它 【参考方案1】:

您不必从脚本中删除 cmets,只需确保您已正确注释所有应避免失败的内容。

如果您需要更多信息,这里有一些关于 cmets 的优秀 Oracle 文档:

https://docs.oracle.com/cd/B12037_01/server.101/b10759/sql_elements006.htm#BEGIN

【讨论】:

以上是关于我应该在运行 Statement.executeUpdate 方法之前从 SQL/PLSQL 文件内容中删除注释吗的主要内容,如果未能解决你的问题,请参考以下文章

我应该在 __main__.py 中使用啥形式的导入,然后我应该如何运行项目?

GitLab Runner 应该在哪里实际运行?

长时间运行的任务,我应该在另一个线程或另一个进程中运行它们吗? [复制]

C# 脚本在不应该运行时运行执行行

在 VS 中运行单元测试与调试单元测试时,我应该期待啥区别?

我应该担心过多的、非运行的 Docker 容器吗?