注意:下面的中括号仅是为了突出关键地方,在实际语法中并没有中括号,切记切记!
没有参数的自定义函数
语法:
create or replace function [自定义函数名]
return [数据类型]
is
[自定义变量名] [数据类型];
begin
select [字段名] into [自定义变量名] from [表名];
return [自定义变量名];
end;
/
执行完上面的代码后,则会提示:“函数已创建”
那么再执行下面代码:
SQL> var [变量名] [数据类型]
SQL> exec :[变量名]:=[自定义函数名];
执行完后则会提示:PL/SQL 过程已成功完成
这时则需再完成最后一句代码则可看到我们的结果:
SQL> print [变量名];
以上则是代码
那么我们写个demo
我们在DOS环境下以语法:sqlplus scott/[口令(即密码)]
在scott用户下我们知道他有dept、EMP、bonus、salgrade等表
而user_users为他的系统表
首先我们查询一下user_users表
select * from user_users;
发现此表下的username字段下的值为scott
那么我们以user_users系统表为例创建一个自定义函数
create or replace function test
return varchar2
is
name varchar2(50);
begin
select username into name from user_users;
return name;
end;
/
再接着就是:
SQL> var username varchar2(50)
SQL> exec :username:=test;
SQL> print username;
那么结果显示为
USERNAME
-------------------------------------------
SCOTT
上面为无参的自定义函数,接下来再写个有参的自定义函数
那么刚才说了scott用户有dept表,我们则以此为例
create or replace function test2(num number)
return varchar2
is
name varchar2(50);
begin
select dname into name from dept where deptno=num;
return name;
exception
when no_data_found then
raise_application_error(-20001, '你输入的ID无效!');
end;
/
再接着就是:
SQL> var name varchar2(50)
SQL> exec :name:=test2(10);
SQL> print name;
那么结果显示为
NAME
-------------------------------------------
ACCOUNTING