国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

PL/SQL 過程與函數

2019-11-08 20:46:35
字體:
來源:轉載
供稿:網友

過程和函數都是命名塊,可以一次定義,多次調用。函數和過程的使用顯著的改善了代碼的可重用性,增加了可維護性。

過程

過程是執行特定的任務(動作)的命名塊。過程封裝了業務邏輯,隨后在應用層和數據層都可調用之前已經定義的過程。

CREATE [OR REPLACE] PROCEDURE [schema.]name[( parameter [IN] [OUT] data_type[, parameter [IN] [OUT] data_type...] ) ][AUTHID DEFINER | CURRENT_USER]IS [--declarations statements]BEGIN --executable statements [ EXCEPTION ---exception handlers]END [name];

IS之前的部分叫做過程的頭部,即過程的簽名。

參數列表中參數的有三種模式,IN,OUT,INOUT。IN代表參數為只讀參數,如果在對該參數修改,編譯器將會報錯;OUT代表只寫參數,OUT參數用于返回數據到調用者,當過程執行時,無論之前OUT參數本來是什么值,它都會被初始化為對應類型的默認值;IN OUT表示參數為可讀可寫參數,過程內部可以讀取參數的值,也可以改變參數的值返回給調用者

AUTHID DEFINER | CURRENT_USER可選部分用于指定當前過程執行時是用過程所有者的權限還是執行時的當前用戶的權限

IS之后的部分為過程體,結構和匿名塊很相似。

調用方式:

BEGIN --no parameter procedure_name; --or procedure_name(); --with papameter procedure_name(parameter...);END;

Hello World

CREATE OR REPLACE PROCEDURE hello_place (place_in IN VARCHAR2)IS l_message VARCHAR2 (100);BEGIN l_message := 'Hello ' || place_in; DBMS_OUTPUT.put_line (l_message);END hello_place;

函數

函數用于計算然后返回一個值。函數和過程在結構上很類似,不同之處在于函數會通過RETURN返回值。在函數簽名部分,通過RETURN DATATYPE聲明返回的數據類型,在函數體中通過RETURN DATA返回結果DATA,類型為DATATYPE

CREATE [OR REPLACE] FUNCTION [schema.]name[( parameter [IN] [OUT] data_type[, parameter [IN] [OUT] data_type...] ) ]RETURN DATATYPE[AUTHID DEFINER | CURRENT_USER]IS [--declarations statements]BEGIN --executable statementsRETURN DATA; [ EXCEPTION ---exception handlers]END [name];

調用方式: 函數的調用方式和過程一樣,此外由于函數返回數據,所以可以用于賦值,也可以直接用于SQL中。

DECLARE variable RETURNDATATYPE;BEGIN variable := function_name(); variable := function_name(parameter...); INSERT INTO table VALUES (function_name(parameter...));END;

Hello World

CREATE OR REPLACE FUNCTION hello_message (place_in IN VARCHAR2) RETURN VARCHAR2ISBEGIN RETURN 'Hello ' || place_in;END hello_message;

命名

對變量的命名規則同樣適用于過程和函數以及其他數據庫對象。不同點在于對于不是用雙引號聲明的標識符,數據庫都是以大寫的形式處理對待的。

CREATE OR REPLACE PROCEDURE hello_worldISBEGIN DBMS_OUTPUT.put_line ('Hello World!');END hello_world;

上述過程在數據庫中的名字將是“HELLO_WORLD”,該過程可以被如下調用:

BEGIN hello_world; HELLO_WORLD; "HELLO_WORLD";END;

但卻不能被如此調用:

BEGIN "hello_world";END;
上一篇:Postgresql

下一篇:數據庫還原筆記

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 肥东县| 台山市| 中山市| 保靖县| 宁南县| 贵溪市| 巴里| 女性| 邹城市| 桃源县| 凤阳县| 勐海县| 苍南县| 泸西县| 武威市| 宝兴县| 越西县| 锦屏县| 报价| 黑水县| 清丰县| 连州市| 宜兰市| 武汉市| 云安县| 大足县| 同德县| 鹿泉市| 山东省| 肇源县| 临西县| 进贤县| 连山| 鹤峰县| 涿鹿县| 兴山县| 黄浦区| 阿克苏市| 东明县| 灌阳县| 沙田区|