存储函数
创建
CREATE [OR REPLACE FUNCTION 函数名(参数1,参数2...)]
RETURN 数据类型---数据类型不能带精度/不能被约束
AS|IS
变量名 变量类型;
...
BEGIN
PLSQL结构体
RETURN 变量名
EXCEPTION
异常结构体
END[函数名]
函数的关键词为FUNCTION;
函数没有输出参数,只有一个返回值类型,
这个返回值类型要使用RETURN关键词单独声明,没有名字,没有长度;
程序中要使用RETURN关键词指明待返回结果,
这个待返回结果要与声明的返回值类型一致。
----查询每位员工的名字及工龄
SELECT ENAME,TO_CHAR(SYSDATE,'YYYY')-TO_CHAR(HIREDATE,'YYYY') FROM EMP;
CREATE OR REPLACE FUNCTION F_HIREDATE( ----创建一个函数
I_HIREDATE DATE ---函数中的参数 ,方便调用
)
RETURN NUMBER ----NUMBER为数据类型,不能返回其他的东西
IS
-----这里可以声明变量(这个不需要)
BEGIN
---返回这个语句的结果,这个语句可以是变量,语句等
RETURN TO_CHAR(SYSDATE,'YYYY')-TO_CHAR(I_HIREDATE,'YYYY');
END F_HIREDATE;
/
CREATE OR REPLACE FUNCTION F_HIREDATE(
I_HIREDATE DATE
)
RETURN NUMBER
IS
----声明一个变量,用于存放想要的结果
V_YEAR NUMBER(10);
BEGIN
----得到想要的结果,把结果赋值给变量
SELECT TO_CHAR(SYSDATE,'YYYY')-TO_CHAR(I_HIREDATE,'YYYY') INTO V_YEAR FROM DUAL;
----返回变量的值
RETURN V_YEAR;
END F_HIREDATE;
调用
调用函数,跟原来的调用函数书写方式一样
SELECT ENAME,F_HIREDATE(HIREDATE) FROM EMP;
创建一个函数,调用时输入薪资和奖金,返回年收入
CREATE OR REPLACE FUNCTION F_NSR(
I_SAL NUMBER,
I_COMM NUMBER
)
RETURN NUMBER
IS
V_NSR NUMBER;
BEGIN
SELECT (I_SAL+