我的应用程序中有很多单行select查询,其中包含跨越5-6个表的多个连接。这些查询是使用字符串生成器根据来自表单等的输入的许多条件生成的。但是,我的团队领导碰巧是一名sql开发人员,他要求我将这些单行查询转换为存储过程。
将单行select查询转换为后端并作为SP执行所有的if和else是否有任何优势。
发布于 2012-11-12 20:26:57
将所有sql部分放在存储过程中的一个优点是,您可以将查询放在一个位置,即数据库中,这样可以更容易地更改或修改,而无需在应用层或前端层进行大量更改。
除了DBA或SQL之外,如果SQL存储在数据库过程中,develoeprs还可以对SQL进行微调。您可以将所有函数/存储过程放在一个包中,这在性能和组织对象方面会更好(类似于在Java中创建包的方式)。当然,在包中,您可以限制对其对象的直接访问。
这更多的是团队或部门的政策,无论是在前端还是在数据库本身中保留sql部分,当然就像@Gimby提到的那样,许多人可能有不同的观点。
更新1
如果你有一个select语句返回一些东西,如果你有一个函数,如果你有INSERT/UPDATE/DELETE或类似的东西,比如发送电子邮件或其他业务规则,那么使用一个过程,并通过传递参数从前端调用它们。
发布于 2012-11-12 20:21:39
我担心这个问题会导致基于许多不同个人观点的许多不同答案。
在我看来,您在这里讨论的业务逻辑在任何情况下都属于应用层。但我认识一大群甲骨文开发者,他们全心全意不同意我的观点。
发布于 2012-11-12 20:44:53
如果您在java中使用PreparedStatement,那么java查询和存储过程在性能上没有太大区别。(如果您在java中使用use语句,那么您就有问题)。
但是存储过程是组织和重用sql代码的好方法。您可以将它们分组到包中,您可以在不进行java编译的情况下更改它们,您的DBA或SQL专业人员可以对它们进行调优。
https://stackoverflow.com/questions/13343231
复制相似问题