函数的基本语法
CREATE OR REPLACE FUNCTION "AT"
(p1 IN NUMBER,p2 IN NUMBER)
RETURN VARCHAR2
/** AS和IS没区别 **/
AS
BEGIN
/** 创建局部变量写法 **/
DECLARE
res VARCHAR2(20);
BEGIN
res := 'First Test!';
RETURN res;
END;
END;
流程控制语句
CREATE OR REPLACE FUNCTION "AT"
(p1 IN NUMBER,p2 IN NUMBER)
RETURN VARCHAR2
AS BEGIN
DECLARE
res VARCHAR2(500);
BEGIN
res := 'First Test!';
/** if语句 **/
IF p1=0 THEN res := CONCAT(res,'p1==0;');
ELSE res := CONCAT(res,'p1!=0;');
END IF;
/** case...when... 类似于switch语句 **/
CASE p1
WHEN 0 THEN res := CONCAT(res,'p1==0;');
ELSE res := CONCAT(res,'p1!=0;');
END CASE;
/** LOOP基本结构,可以不使用别名,使用EXIT结束循环 **/
<<loop1>>
LOOP
--TODO STH
EXIT loop1 when 1>0;
END LOOP;
/** for循环 **/
DECLARE
BEGIN
FOR i IN 1..3 LOOP
--TODO STH
res := CONCAT(res,'');
END LOOP;
END;
/** 带参数的循环,EXIT...WHEN...类似于do...while...语句 **/
DECLARE
i NUMBER:=0;
BEGIN
<<loop2>>
LOOP
i := i + 1;
--TODO STH
EXIT loop2 when i>3;
END LOOP;
END;
/** 使用CONTINUE跳过本次循环 **/
DECLARE
i NUMBER:=0;
BEGIN
<<loop3>>
LOOP
i := i + 1;
IF i<3 THEN CONTINUE;
ELSE EXIT loop3;
END IF;
END LOOP;
END;
/** while...loop...语句,同其它语言的while循环 **/
DECLARE
i NUMBER:=0;
BEGIN
WHILE i<3
LOOP
i := i + 1;
--TODO STH
END LOOP;
END;
RETURN res;
END;
END;
Out参数的使用
/** 如果参数包含多个返回值,可以使用带out的函数 **/
CREATE OR REPLACE FUNCTION "AOUT"
(P1 OUT NUMBER,P2 OUT NUMBER)
RETURN NUMBER
AS BEGIN
P1:=1;
P2:=2;
RETURN 0;
END;
/** 带out的函数不方便在SELECT语句中直接使用,最好在存储过程或者其它自定义函数中加工一下 **/
CREATE OR REPLACE FUNCTION "BOUT"
RETURN NUMBER
AS BEGIN
DECLARE
RES1 NUMBER;RES2 NUMBER;P1 NUMBER;
BEGIN
P1 := AOUT(RES1,RES2);
RETURN RES1+RES2;
END;
END;
SELECT BOUT() FROM DUAL;