為什么阿里巴巴禁止使用存儲過程?
1、在外包干了三年,我廢了..… 不吹不黑! 2、用鴻蒙跑了個 hello world 3、還在寫大量 if 來判斷?試試用一個規(guī)則執(zhí)行器來替代它 4、Spring Boot中的線程池,你真的會用么? 5、重磅推薦幾個接私活的腳手架利器!
我覺得存儲過程挺好用的,為什么你不建議用?
我的新需求,自然需要復用這三個存儲過程,否則:
若每一處都寫一次抓取數(shù)據(jù)的業(yè)務邏輯代碼,若業(yè)務邏輯發(fā)生變化,難以追查和維護所有讀取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(*)的計數(shù)操作: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參數(shù)?本例中因為GetJobs已被其他多處代碼或SQL scripts調(diào)用,所以對現(xiàn)有現(xiàn)有存儲過程進行改動會有不小風險。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 來判斷?試試用一個規(guī)則執(zhí)行器來替代它 4、重磅推薦幾個接私活的腳手架利器! 5、MySQL究竟是怎么執(zhí)行的?看完終于不糾結了 6、25種代碼壞味道總結+優(yōu)化示例 7、如何優(yōu)雅處理重復請求/并發(fā)請求? 8、使用 Redis 實現(xiàn)一個輕量級的搜索引擎 9、比MySQL快801倍,OLAP兩大新秀ClickHouse和Doris到底怎么選? 10、從 0 到 1 手把手教你制作酷炫可視化大屏 關注公眾號,你想要的Java都在這里
評論
圖片
表情
