Oracle數據類型,函數與存儲過程
字符串類型
固定長度:char nchar n 表示Unicode編碼
可變長度: varchar2 nvarchar2
數字類型:number(P,S)P:整數位數,S小數位數
integer 整數
BINARY_FLOAT 單浮點
BINARY_DOUBLE 雙浮點
FLOAT(N)浮點數 N表示精度
日期類型:DATE
TIMESTAMP
用戶定義函數是存儲在數據庫中的代碼塊,可以把值返回到調用程序。調用時如同
系統函數一樣,如max(value)函數,其中,value被稱為參數。函數參數有3種類型。
IN 參數類型:表示輸入給函數的參數。
OUT 參數類型:表示參數在函數中被賦值,可以傳給函數調用程序。
IN OUT參數類型:表示參數既可以傳值也可以被賦值。
1、語法格式:
SQL語法方式創建的語法格式為:
CREATE OR REPLACE FUNCTION function_name /*函數名稱*/
(
Parameter_name1,mode1 datatype1, /*參數定義部分*/
Parameter_name2,mode2 datatype2,
Parameter_name3,mode3 datatype3
…
)
RETURN return_datatype /*定義返回值類型*/
IS/AS
variable variableType; /*聲明變量*/
BEGIN
Function_body /*函數體部分*/
RETURN scalar_expression /*返回語句*/
END function_name;
說明:
function_name::用戶定義的函數名。函數名必須符合標示符的定義規則,對其所有者來說,該名在數據庫中是唯一的。
parameter:用戶定義的參數。用戶可以定義一個或多個參數。
mode:參數類型。
datatype:用戶定義參數的數據類型。
return_type::用戶返回值的數據類型。
函數返回scalar_expression表達式的值,function_body函數體由pl/sql語句構成。
實例:
create or replace function getName(uid in integer) return varchar2
as
username varchar2(10)
begin
select name into username from users where id=uid;
return(username);
end getName;
注意:
(1)如果函數沒有參數,那麼函數名後不應該要括號;在調用的時候也不需要參數名
(2)創建函數的時候end後面一定要記得寫函數名
--沒有參數的函數
create or replace function get_user return varchar2 is
v_user varchar2(50);
begin
select username into v_user from user_users;
return v_user;
end get_user;
存儲過程
Oracle存儲過程基本語法 存儲過程
1 CREATE OR REPLACE PROCEDURE 存儲過程名 (參數名 類型 參數數據類型,...)
2 IS
3 BEGIN
4 NULL;
5 END;
行1:
CREATE OR REPLACE PROCEDURE 是一個SQL語句通知Oracle數據庫去創建一個叫 做skeleton存儲過程, 如 果存在就覆蓋它;
行2:
IS關鍵詞表明後面將跟隨一個PL/SQL體。
行3:
BEGIN關鍵詞表明PL/SQL體的開始。
行4:
NULL PL/SQL語句表明什麼事都不做,這句不能刪去,因為PL/SQL體中至少需要有一句;
行5:
END關鍵詞表明PL/SQL體的結束
例如:
create or replace procedure pCountUsers(id integer,name varchar2)
as
begin
insert into users(id,name) values(id,name);
end ;
調用:call pCountUsers(2,'KK');
函數與存儲過程的區別:
1. 返回值的區別,函數有1個返回值,而存儲過程是通過參數返回的,可以有多個 或者沒有
2.調用的區別,函數可以在查詢語句中直接調用,而存儲過程必須單獨調用.
函數一般情況下是用來計算並返回一個計算結果而存儲過程一般是用來完成特定的數據操作(比如修改、插入數據 庫表或執行某些DDL語句等等)