在数据库中不进行永久性更改的情况下验证PL/SQL

在数据库中不进行永久性更改的情况下验证PL/SQL,sql,oracle,plsql,oracle-sqldeveloper,oracle19c,Sql,Oracle,Plsql,Oracle Sqldeveloper,Oracle19c,是否可以在不进行永久更改的情况下验证PL/SQL代码。 我知道一个人可以提交,然后回滚,但我正在寻找其他解决方案 例如,如果我写了一个过程,我想知道它是否能正确编译 我使用的是Oracle SQL Developer,没有看到任何选项可以执行此操作。您可以编译您的过程并检查它是否有效(不返回编译错误)。 但在这种情况下,Oracle只进行语法和语义分析 语法分析–Oracle验证关键字、对象名、运算符、分隔符等是否正确放置在SQL语句中。因此类似于select*foRm dual的查询将在验证

是否可以在不进行永久更改的情况下验证PL/SQL代码。
我知道一个人可以
提交
,然后
回滚
,但我正在寻找其他解决方案

例如,如果我写了一个过程,我想知道它是否能正确编译


我使用的是Oracle SQL Developer,没有看到任何选项可以执行此操作。

您可以编译您的过程并检查它是否有效(不返回编译错误)。 但在这种情况下,Oracle只进行语法和语义分析

  • 语法分析–Oracle验证关键字、对象名、运算符、分隔符等是否正确放置在SQL语句中。因此类似于
    select*foRm dual
    的查询将在验证期间失败。例如,我们可以得到如下错误:
    • ORA-00900:无效的SQL语句
    • ORA-00923:未在预期位置找到FROM关键字
    • ORA-00924:按关键字缺少
    • ORA-00933:SQL命令未正确结束
  • 语义分析–它验证对主机变量和数据库对象的引用是否有效(包括它们的授权)以及主机变量数据类型是否正确。例如,
    select*from nonexisting_table
    将使此验证失败
也就是说,在这些步骤中不会出现类似于
ORA-00979而不是group-by-expression
的错误,因为稍后在优化阶段会对它们进行Oracle处理

关于这方面的更多信息:

另一个答案是尝试editions功能,该功能已经存在一段时间了

否。将过程复制到另一个名称,即“test”到“test2”并编译test2,然后将其删除。commit和rollback是针对DML语句的,而不是pl/sql编译,并且对其没有影响?我很难想出一个原因,我会开发一个过程,但只想看看它是否会编译,而不是实际创建它。我能想到的唯一原因是,如果我在prod中编写代码,而不是在开发环境中编写代码。理论上,您可以将该过程转换为匿名块,并对其执行
dbms\u sql.parse
以查看其是否解析。我只是想弄明白你们为什么要这么做。@JustinCave也许他是在生产环境中开发的;)@KoenLostrie-在这种情况下,这是一个典型的XY问题不!不能回滚编译。此外,编译本身的行为类似于DDL语句。它提交,即使编译有错误。看见最好的选择是维护版本控制和备份。测试完成后,如果需要,您可以恢复数据并恢复过程。这是什么
版本功能