为什么阿里巴巴禁止使用存储过程?
Java之间
共 2983字,需浏览 6分钟
·
2021-06-16 11:49
1、在外包干了三年,我废了..… 不吹不黑! 2、用鸿蒙跑了个 hello world 3、还在写大量 if 来判断?试试用一个规则执行器来替代它 4、Spring Boot中的线程池,你真的会用么? 5、重磅推荐几个接私活的脚手架利器!
我觉得存储过程挺好用的,为什么你不建议用?
我的新需求,自然需要复用这三个存储过程,否则:
若每一处都写一次抓取数据的业务逻辑代码,若业务逻辑发生变化,难以追查和维护所有读取Job,Certification,Disclosure的SQL。
CREATE PROCEDURE [dbo].[GetJobs]
(
@PersonId int,
@OrganizaitionId int
)
AS
BEGIN
SELECT JobId,JobName,JobType FROM Job WHERE PersonId = @PersonId AND OrganizaitionId = @OrganizaitionId
END
GetJobs
返回结果集的count。count(*)
的计数操作:CREATE PROCEDURE [dbo].[MyProc]
(
@PersonId int,
@OrganizaitionId int,
)
AS
BEGIN
CREATE TABLE #Temp(
PersonId int,
OrganizaitionId int
)
INSERT INTO #Temp EXEC dbo.GetJobs
@PersonId = @PersonId,
@ParentOrgId = @ParentOrgId
SELECT COUNT(*) FROM #Temp
END
MyProc
中的临时表结构也需要随之变化。这是令人难以接受的。MyProc
中的INSERT INTO换为SELECT INTO呢?很遗憾,答案是不行。SQL本身并不支持这种用法。GetJobs
加output
参数?本例中因为GetJobs已被其他多处代码或SQL scripts调用,所以对现有现有存储过程进行改动会有不小风险。Keep in mind that compared to languages such as C# and Java, Transact-SQL is poorly equipped for code reuse, why solutions in T‑SQL to reuse code are clumsier.
最近热文阅读:
1、面试官:说一下JDK/Dubbo/Spring 三种 SPI 机制,谁更好? 2、在外包干了三年,我废了..… 不吹不黑! 3、还在写大量 if 来判断?试试用一个规则执行器来替代它 4、重磅推荐几个接私活的脚手架利器! 5、MySQL究竟是怎么执行的?看完终于不纠结了 6、25种代码坏味道总结+优化示例 7、如何优雅处理重复请求/并发请求? 8、使用 Redis 实现一个轻量级的搜索引擎 9、比MySQL快801倍,OLAP两大新秀ClickHouse和Doris到底怎么选? 10、从 0 到 1 手把手教你制作酷炫可视化大屏 关注公众号,你想要的Java都在这里
评论