Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何以干净且可维护的方式编写非常复杂的SQL?_Java_Sql_Oracle - Fatal编程技术网

Java 如何以干净且可维护的方式编写非常复杂的SQL?

Java 如何以干净且可维护的方式编写非常复杂的SQL?,java,sql,oracle,Java,Sql,Oracle,我参与了数据库迁移项目 我必须以可维护的方式编写非常复杂的SQL。前面的查询几乎是意大利面条 我想在数据库中创建一个视图,但我没有权限 所以我想的是根据数据库的查询结果创建一个桥接数据库 之后,我在桥接数据库中创建了视图 效率低吗?或者有什么好方法可以处理复杂的数据库查询吗?如果您不能创建视图,请查看CTE(公共表表达式,即with factoring子句)是否使内容更易于阅读和维护。举个简单的例子: 而不是 select ... from (select deptno from d

我参与了数据库迁移项目

我必须以可维护的方式编写非常复杂的SQL。前面的查询几乎是意大利面条

我想在数据库中创建一个视图,但我没有权限

所以我想的是根据数据库的查询结果创建一个桥接数据库

之后,我在桥接数据库中创建了视图


效率低吗?或者有什么好方法可以处理复杂的数据库查询吗?

如果您不能创建视图,请查看CTE(公共表表达式,即with factoring子句)是否使内容更易于阅读和维护。举个简单的例子:

而不是

select ...
from (select deptno
      from dept
     ) join ...
使用

因为它允许您使用相同的DEPTS CTE执行长查询所需的任意次数(而不是单独重复/写入多次)


您关于“桥接数据库”的想法要求使用数据库链接。对它们的操作通常比您自己的数据库中有数据时慢。更新速度可能非常慢



也许您最好让某人(DBA?)让您创建这些视图?

您是否要求获得创建视图的权限?有时DBA会很友好


假设您已经尝试过,您是否有创建临时表的权限?这可能是创建视图的一种变通方法。

如何以可维护的方式编写SQL是一个非常广泛的问题。这真的取决于你需要做什么。我的建议是记录/评论你在查询中所做的每一件小事。另外,在文件顶部添加一条注释,详细解释查询试图做什么以及如何做


正如其他用户所建议的,创建临时表是简化查询的一种好方法。首先,可以将查询分为几个阶段,并将每个阶段设计为实现最终目标的逻辑步骤。更重要的是,您可以查询临时表并查看每个阶段的结果,这使得修复错误变得更加容易

发布表格和查询的示例,如果您将问题保持为一般性的,那么这太复杂了,无法帮助您,
with depts as
  (select deptno
   from dept
  )
select ...
from depts d join ...