我很困惑,因为何时在代码中使用存储过程而不是嵌入式SQL
当我用Google搜索时,我发现了这些要点
请告诉我网络流量与它有什么关系?
答案 0 :(得分:5)
SP的另一个主要优势:您可以更改它们(修改错误,扩展),而无需更改您的应用程序代码......还有另一层分离,这可能是有益的。
还有:安全性。如果您将SProcs用于所有内容,则所有调用者在数据库权限方面需要EXECUTE
对这些SProc的权限 - 他们不需要对表的直接读/写访问权限。
答案 1 :(得分:3)
它可以减少网络流量,因为您将单个命令发送到存储过程而不是一行一行的SQL语句。
另一个好处是,由于预编译,查询本身的性能优于嵌入式SQL。
答案 2 :(得分:2)
他们只需将所需数据返回给客户端即可减少网络流量。
或转过来;可能浪费网络流量的设计/编码实践是从数据库中选择一组数据,将其返回给客户端并在某些数据集上进行处理。显然,如果您正在处理某些数据集,从流量角度来看,最好不要向客户端发送未处理的数据
答案 3 :(得分:1)
如果您的数据库服务器和运行嵌入式SQL的服务器/客户端是分开的,它将减少网络流量。
它减少了网络流量,因为存储过程是在数据库服务器上处理的;对于在单独的机器上运行的嵌入式SQL,必须通过网络处理数据库访问,从而增加流量。
如果您的嵌入式SQL和数据库位于同一台计算机上,则它对网络流量没有影响。一个例子是一台机器上的LAMP堆栈。
答案 4 :(得分:0)
我首先会质疑存储过程...
与实际的编程语言代码不同,它们是:
如果您有一个特定于数据库的操作(例如,用于维护数据库完整性的事务内操作),或者保持您的过程非常原子和简单,那么您可能会考虑它们。
建议在预先指定“高性能”时注意。它往往导致糟糕的选择而牺牲良好的设计,它会比你想象的更快地咬你。
使用存储过程自担风险(来自曾经去过那里且永远不想回去的人)。我的建议是像瘟疫一样避免它们。
答案 5 :(得分:0)
取决于。
我认为这不是您的情况,因为您将问题标记为“ plsql”,“SQL”,“商店程序”。 Pl / Sql中嵌入式SQL的概念如下:
嵌入式SQL语句包含DDL,DML和事务控制 程序语言程序中的政治家。它们与。一起使用 Oracle预编译器。嵌入式SQL是一种方法来整合 程序语言应用程序中的SQL。 另一种方法是使用过程API,如开放式数据库连接(ODBC)或Java数据库连接(JDBC)。
在这种情况下,有许多重要原因。 最重要的是:
简短的回答可能是,在PL / SQL存储过程中编写高效代码来访问“Oracle数据库”中的大量数据比在任何其他语言中更容易。这是因为它严格地集成在Oracle数据库中。
请先阅读手册:Advantages of Pl/sql stored procedures
pl / sql和Oracle数据库的具体特征,只是为了写一些:
使用自主交易来独立工作单位的优势
db中的DML,事务管理和异常处理程序
在SQL中调用sql函数**
打包游标
流媒体表功能 。具有CURSOR表达式的表函数使您能够在单个SQL语句中通过多个转换来流式传输数据。
确定性功能
使用dbms_SQL API 和本机动态SQL(着名的第四种方法)进行复杂的动态sql操作。
所有模块化原因(您已经提到过): 1封装计算 2简化外部sql中使用的子查询 3在同一个sql中组合标量和聚合值 4写一次,使用很多。
<强>等等... 强>
答案 6 :(得分:0)
可能需要存储过程才能从应用程序代码获得所需的性能。嵌入式SQL的最大问题是,所有业务逻辑通常都进入应用程序代码。这可能是非常低效的。例如,开发人员将开始进行客户端联接:他们调用数据库以获取其他表记录的一组ID值,然后一次查询每个表中的一条记录以检索所需的数据。现在,使用存储过程一次到数据库的往返操作可以完成数百次或几千次带有嵌入式sql的数据库往返。每次到数据库的往返都要花费很多时间,更不用说必须对每个查询进行编译,从而极大地增加了数据库服务器的负载。
如果您的应用程序是少量用户的少量应用程序,则可以使用。具有大量用户的大容量应用程序甚至可能迅速使大型数据库服务器超载,并导致严重的性能问题,甚至到应用程序停止工作为止。