時間:2022-11-09 06:30:02 | 來源:信息時代
時間:2022-11-09 06:30:02 來源:信息時代
SQL持久存儲模塊 : 定義用來聲明和維護數(shù)據(jù)庫持久例程的SQL語句的語法和語義的標準。在SQL系列標準中SQL持久存儲模塊是系列標準的第四部分,國際標準的命名是Information Technology—Database Languages—SQL—Part 4:Persistent Stored Modules,通??s寫為SQL/PSM,其標準編號為ISO/IEC 9075-4。
最早的SQL語言是高度非過程化的查詢語言,然而隨著數(shù)據(jù)庫應(yīng)用的發(fā)展,用戶提出了在數(shù)據(jù)庫中定義和保存完成特定功能的自定義例程的需求。在1996年,SQL持久存儲模塊作為SQL92標準的增補部分完成并發(fā)布,稱為PSM-96。在后來的SQL99和SQL 2003中,SQL持久存儲模塊作為正式SQL標準的第四部分發(fā)布,并且將存儲例程的定義和調(diào)用語句移到了SQL標準的第二部分: SQL/基礎(chǔ)中。
在SQL持久存儲模塊中,主要定義和說明了以下內(nèi)容:
1.包含多語句的過程
在SQL持久存儲模塊中,成組的SQL語句能夠放在一起執(zhí)行,并且提供流程控制語句、局部變量和狀態(tài)處理語句。
用BEGIN和END包圍若干條語句,能夠?qū)⒍鄺l語句組成一個復(fù)合語句執(zhí)行。在復(fù)合語句中還允許聲明任何SQL數(shù)據(jù)類型的局部變量,這些變量和宿主語言中的變量不同,而是類似于數(shù)據(jù)庫中表的某個列。在復(fù)合語句中還允許聲明游標,來處理復(fù)合語句中某條查詢語句的結(jié)果。另外,在復(fù)合語句中還能夠定義處理錯誤和異常的狀態(tài)處理語句。
在復(fù)合語句的基礎(chǔ)上,實現(xiàn)用戶自定義例程的關(guān)鍵,是SQL持久存儲模塊提供了現(xiàn)代編程語言中才有的流程控制語句。SQL持久存儲模塊中提供的流程控制語句包括條件判斷語句—IF語句,條件分支語句—CASE語句,循環(huán)語句—LOOP語句、WHILE語句和REPEAT語句,以及專門用來處理查詢結(jié)果的帶游標循環(huán)語句—FOR語句。
例如:
PROCEDURE drop course
(IN student_id CHAR(6),
IN course_id CHAR(6),
OUT transcript_line CHAR(80))
BEGIN
DELETE FROM enrollments WHERE student=student_id
AND course=course_id;
INSERT INTO transcript
VALUES (student_id,CURRENT_DATE,
course_id‖`dropped`);
SET transcript_line=course_id‖`dropped`;
END;
FUNCTION courses(s_id)
RETURN CHAR VARING(80)
BEGIN
DECLARE S CHAR.VARYING(30)
FOR e AS SELECT*FROM enrollments
WHERE e.student=s_id
DO
IF s ``
THEN SET s=s‖`,`;
END IF;
SET s=s‖course;
END FOR;
RETURN s;
END:
2.存儲例程和模塊
在SQL持久存儲模塊中,過程、函數(shù)和模塊都能夠保存在SQL服務(wù)器中。
SQL持久存儲模塊允許定義的例程作為一個模式對象保存在數(shù)據(jù)庫中,就像一個表對象一樣。并給出了一系列的數(shù)據(jù)定義語句來定義和刪除這些存儲例程。SQL持久存儲模塊還允許對存儲例程進行權(quán)限管理,并支持同名不同參數(shù)的多態(tài)存儲例程。
在現(xiàn)代編程語言中作為編譯單位的模塊,也被引入到SQL語言中。SQL中的客戶模塊,用來包含一個或多個用戶定義的存儲例程。SQL持久存儲模塊也支持將模塊保存在數(shù)據(jù)庫中,并給出一系列數(shù)據(jù)定義語句來定義和刪除模塊以及進行權(quán)限管理。
3. 外部例程
在SQL持久存儲模塊中,用宿主語言寫的函數(shù)和過程,也能夠在SQL語言中被調(diào)用。
用宿主語言編寫的例程,提供一個供SQL語句調(diào)用使用的頭部,其中包括例程名和相關(guān)參數(shù)。該例程頭部將保存在數(shù)據(jù)庫中,其他SQL語句能夠像調(diào)用普通SQL例程一樣調(diào)用這些定義好的外部例程。
微信公眾號
版權(quán)所有? 億企邦 1997-2022 保留一切法律許可權(quán)利。