檢測(cè)到您已登錄華為云國(guó)際站賬號(hào),為了您更好的體驗(yàn),建議您訪問(wèn)國(guó)際站服務(wù)網(wǎng)站 http://www.cqfng.cn/intl/zh-cn
不再顯示此消息
存儲(chǔ)過(guò)程(Procedure) 簡(jiǎn)介 存儲(chǔ)過(guò)程是預(yù)編譯并存儲(chǔ)在數(shù)據(jù)庫(kù)中的程序,由一組SQL語(yǔ)句組成,用于執(zhí)行一系列數(shù)據(jù)庫(kù)操作。存儲(chǔ)過(guò)程可以被多個(gè)應(yīng)用程序調(diào)用,從而提高代碼的復(fù)用性和維護(hù)性。 存儲(chǔ)過(guò)程的特點(diǎn): 復(fù)雜數(shù)據(jù)操作簡(jiǎn)化:執(zhí)行需要多步操作的復(fù)雜業(yè)務(wù)邏輯,如批量數(shù)據(jù)處理、數(shù)據(jù)轉(zhuǎn)換等。
bind_argument只能是值、變量或表達(dá)式,不能是表名、列名、數(shù)據(jù)類型等數(shù)據(jù)庫(kù)對(duì)象,即不支持使用bind_argument為動(dòng)態(tài)SQL語(yǔ)句傳遞模式對(duì)象。如果存儲(chǔ)過(guò)程需要通過(guò)聲明參數(shù)傳遞數(shù)據(jù)庫(kù)對(duì)象來(lái)構(gòu)造動(dòng)態(tài)SQL語(yǔ)句(常見(jiàn)于執(zhí)行DDL語(yǔ)句時(shí)),建議采用連接運(yùn)算符“||”拼接dynamic_select_clause;
訪問(wèn)對(duì)象 未指定SCHEMA的存儲(chǔ)過(guò)程將依據(jù)SEARCH_PATH的順序查找對(duì)象,可能導(dǎo)致訪問(wèn)到非預(yù)期對(duì)象。如果不同模式中存在同名表、存儲(chǔ)過(guò)程以及其他數(shù)據(jù)庫(kù)對(duì)象,未明確指定SCHEMA可能引發(fā)意外結(jié)果。因此,建議在存儲(chǔ)過(guò)程訪問(wèn)數(shù)據(jù)對(duì)象時(shí),始終明確指定SCHEMA。 示例: --創(chuàng)建兩個(gè)不同的schema。
訪問(wèn)對(duì)象 未指定SCHEMA的存儲(chǔ)過(guò)程將依據(jù)SEARCH_PATH的順序查找對(duì)象,可能導(dǎo)致訪問(wèn)到非預(yù)期對(duì)象。如果不同模式中存在同名表、存儲(chǔ)過(guò)程以及其他數(shù)據(jù)庫(kù)對(duì)象,未明確指定SCHEMA可能引發(fā)意外結(jié)果。因此,建議在存儲(chǔ)過(guò)程訪問(wèn)數(shù)據(jù)對(duì)象時(shí),始終明確指定SCHEMA。 示例: --創(chuàng)建兩個(gè)不同的schema。
數(shù)(默認(rèn))(輸入?yún)?shù)) 從調(diào)用環(huán)境候總想存儲(chǔ)過(guò)程傳遞參數(shù),不能給IN參數(shù)賦值,給此參數(shù)傳遞的值可以使常量、有值的變量、表達(dá)式等OUT參數(shù)(輸出參數(shù)) 用來(lái)從過(guò)程中返回值給調(diào)用者,不能將此參數(shù)的值付給另外一個(gè)值,不恩能夠是常量、表達(dá)式。在過(guò)程體內(nèi),必須給OUT賦值IN OUT(輸入輸出參數(shù))
function best_practices_for_procedure.proc1() DROP SCHEMA 避免在存儲(chǔ)過(guò)程的名稱、內(nèi)部變量名和數(shù)據(jù)類型名中使用SQL關(guān)鍵字,以確保在所有場(chǎng)景下都能正常運(yùn)行。 gaussdb=# CREATE SCHEMA best_practices_for_procedure;
動(dòng)態(tài)調(diào)用匿名塊 動(dòng)態(tài)調(diào)用匿名塊是指在動(dòng)態(tài)語(yǔ)句中執(zhí)行匿名塊,使用EXECUTE IMMEDIATE…USING語(yǔ)句后面帶IN、OUT來(lái)輸入、輸出參數(shù)。 語(yǔ)法 動(dòng)態(tài)調(diào)用匿名塊語(yǔ)法如圖1所示。 圖1 call_anonymous_block::= using_clause子句的語(yǔ)法如圖2所示。
在datastudio下,DBeaver 工具 在 GaussDB(DWS)8.1.3版本下,建存儲(chǔ)過(guò)程; 建成后打開(kāi),procedure變function 是什么原因? 過(guò)程語(yǔ)法檢查沒(méi)有問(wèn)題,按官方文檔上寫(xiě)的。
禁止在PL/SQL塊中使用連續(xù)的Tab,連續(xù)的Tab可能會(huì)造成在使用gsql工具帶“-r”參數(shù)執(zhí)行PL/SQL塊時(shí)出現(xiàn)異常。 PL/SQL塊分類 PL/SQL塊可以分為以下幾類: 匿名塊:動(dòng)態(tài)構(gòu)造,只能執(zhí)行一次。語(yǔ)法請(qǐng)參考匿名塊。 子程序:存儲(chǔ)在數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程、函數(shù)和操作符及高級(jí)包等。當(dāng)在數(shù)據(jù)庫(kù)上建立好后,可以在其他程序中調(diào)用它們。
OCEDURE時(shí),綁定出參。 僅支持匿名塊中調(diào)用SQL語(yǔ)句以及帶有out/inout參數(shù)的存儲(chǔ)過(guò)程綁定參數(shù),其余綁定參數(shù)場(chǎng)景皆不支持。例如:匿名塊中使用表達(dá)式以及cursor等、匿名塊中嵌套調(diào)用動(dòng)態(tài)語(yǔ)句。 打開(kāi)dynamic_sql_check參數(shù)時(shí),占位符個(gè)數(shù)與參數(shù)個(gè)數(shù)一致時(shí)使
bind_argument只能是值、變量或表達(dá)式,不能是表名、列名、數(shù)據(jù)類型等數(shù)據(jù)庫(kù)對(duì)象,即不支持使用bind_argument為動(dòng)態(tài)SQL語(yǔ)句傳遞模式對(duì)象。如果存儲(chǔ)過(guò)程需要通過(guò)聲明參數(shù)傳遞數(shù)據(jù)庫(kù)對(duì)象來(lái)構(gòu)造動(dòng)態(tài)SQL語(yǔ)句(常見(jiàn)于執(zhí)行DDL語(yǔ)句時(shí)),建議采用連接運(yùn)算符“||”拼接dynamic_select_clause;
begin insert @變量名2 select表中的列名 from 表名 ----指把表中的內(nèi)容加到新創(chuàng)建的函數(shù)表中 where 表中的另一個(gè)列名>@變量名1 insert @變量名2values(.......) end
選擇需要登錄的目標(biāo)數(shù)據(jù)庫(kù)實(shí)例,單擊操作列表中的“登錄”,登錄目標(biāo)數(shù)據(jù)庫(kù)實(shí)例。 在頂部導(dǎo)航欄選擇“庫(kù)管理”. 在“當(dāng)前所在庫(kù)”右側(cè)單擊“切換庫(kù)”,切換至目標(biāo)數(shù)據(jù)庫(kù)。 圖1 切換數(shù)據(jù)庫(kù) 在對(duì)象列表頁(yè)簽下選擇“存儲(chǔ)過(guò)程”。 在右側(cè)操作欄單擊“查看存儲(chǔ)過(guò)程詳情”。 圖2 查看存儲(chǔ)過(guò)程詳情 在查看存儲(chǔ)過(guò)程詳情彈框中,您可以查看創(chuàng)建存儲(chǔ)過(guò)程的SQL內(nèi)容。
復(fù)雜依賴 如果存儲(chǔ)過(guò)程或PACKAGE之間存在復(fù)雜的依賴關(guān)系,可能會(huì)在創(chuàng)建時(shí)遇到依賴對(duì)象尚未創(chuàng)建或初始化的情況,從而導(dǎo)致存儲(chǔ)過(guò)程編譯失敗。此外,當(dāng)某個(gè)對(duì)象被修改或重建時(shí),直接或間接依賴該對(duì)象的其他存儲(chǔ)過(guò)程和PACKAGE也會(huì)失效,需要重新編譯,這會(huì)影響系統(tǒng)性能。 建議避免在存儲(chǔ)過(guò)程和PA
Mysql 概述 環(huán)境準(zhǔn)備 使用場(chǎng)景 使用指南 配置項(xiàng)說(shuō)明 父主題: Mas-GO-SDK使用手冊(cè)
IMMUTABLE是存儲(chǔ)過(guò)程的一個(gè)屬性,用于聲明該存儲(chǔ)過(guò)程的結(jié)果僅依賴于輸入?yún)?shù),而不依賴于數(shù)據(jù)庫(kù)的當(dāng)前狀態(tài)。在某些場(chǎng)景下,使用 IMMUTABLE 屬性的存儲(chǔ)過(guò)程可能會(huì)被優(yōu)化為僅執(zhí)行一次,如果使用不當(dāng),可能會(huì)造成不符合預(yù)期的結(jié)果。 建議在使用 IMMUTABLE 屬性的存儲(chǔ)過(guò)程和函數(shù)時(shí),
'PROCEDURE' AND object_name LIKE '%存儲(chǔ)過(guò)程名%'; 2. 查詢存儲(chǔ)過(guò)程的源代碼 -- 查詢當(dāng)前用戶存儲(chǔ)過(guò)程的源代碼 SELECT text FROM user_source WHERE name = '存儲(chǔ)過(guò)程名' AND type = 'PROCEDURE' ORDER
bind_argument只能是值、變量或表達(dá)式,不能是表名、列名、數(shù)據(jù)類型等數(shù)據(jù)庫(kù)對(duì)象,即不支持使用bind_argument為動(dòng)態(tài)SQL語(yǔ)句傳遞模式對(duì)象。如果存儲(chǔ)過(guò)程需要通過(guò)聲明參數(shù)傳遞數(shù)據(jù)庫(kù)對(duì)象來(lái)構(gòu)造動(dòng)態(tài)SQL語(yǔ)句(常見(jiàn)于執(zhí)行DDL語(yǔ)句時(shí)),建議采用連接運(yùn)算符“||”拼接dynamic_select_clause;
bind_argument只能是值、變量或表達(dá)式,不能是表名、列名和數(shù)據(jù)類型等數(shù)據(jù)庫(kù)對(duì)象,即不支持使用bind_argument為動(dòng)態(tài)SQL語(yǔ)句傳遞模式對(duì)象。如果存儲(chǔ)過(guò)程需要通過(guò)聲明參數(shù)傳遞數(shù)據(jù)庫(kù)對(duì)象來(lái)構(gòu)造動(dòng)態(tài)SQL語(yǔ)句(常見(jiàn)于執(zhí)行DDL語(yǔ)句時(shí)),建議采用連接運(yùn)算符“||”拼接dynamic_select_clause;
事務(wù)管理 事務(wù) 自治事務(wù) 父主題: 存儲(chǔ)過(guò)程最佳實(shí)踐(集中式)