Oracle中的随机函数与自定义函数

文章介绍了在Oracle数据库中如何使用DBMS_RANDOM包生成随机数,包括RAND替代方法,以及如何创建和运用自定义函数,提供了多个实例,如生成随机数、随机字符串以及根据条件返回不同结果。此外,还讨论了自定义函数的OUT参数用法。
摘要由CSDN通过智能技术生成

目录

一、随机函数

1.语法格式:

2.使用DBMS_RANDOM包中的函数生成随机数:

二、自定义函数

1.语法格式:

2.自定义函数运用实例

3.自定义函数--有out输出情况


一、随机函数

指可以产生随机数的函数,它是可以产生随机的数字或者字符串;

1.语法格式:

①RAND()

可以产生0到1之间的随机数;

②dbms_random.value(数1(小),数2(大))

生成数1-数2之间的随机数,默认生成小数;

③dbms_random.string('格式',数)

u

大写字母

l

小写字母

a

字母

x

大写字母和数字
p可打印字符

生成随机字符串;

注意:

、Oracle 11g中没有RAND函数,可以使用DBMS_RANDOM包中的函数来生成随机数。

、DBMS_RANDOM包提供了多种随机数生成函数,比如:

  • DBMS_RANDOM.VALUE:返回一个0到1之间的随机数。
  • DBMS_RANDOM.RANDOM:返回一个0到N之间的整数随机数,其中N需要作为参数传递。
  • DBMS_RANDOM.STRING:返回一个由指定字符集中的字符组成的随机字符串,可以指定字符串的长度和字符集。

2.使用DBMS_RANDOM包中的函数生成随机数:

①生成一个0到1之间的随机数:

SELECT DBMS_RANDOM.VALUE AS random_number FROM DUAL;

②生成一个0到100之间的整数随机数:

SELECT FLOOR(DBMS_RANDOM.VALUE(0, 101)) AS random_number FROM DUAL;

③生成一个由10个字符组成的随机字符串,字符集为大写字母和数字:

SELECT DBMS_RANDOM.STRING('U', 10) AS random_string FROM DUAL;

④随机打印5个(大小写)字母/字符/数字 

SELECT dbms_random.value(100,0) a,
       dbms_random.string('u',5) b,  --随机打印5个大写字母
       dbms_random.string('l',5) c,  --随机打印5个小写字母
       dbms_random.string('a',5) d,  --随机打印5个字母
       dbms_random.string('x',5) e,  --随机打印5个大写字母和数字
       dbms_random.string('p',5) f   --随机打印5个可打印字符
FROM dual;

⑥生成一个1-100的随机数

如果这个数大于95,返回1等奖;如果这个数大于85,返回2等奖;如果这个数大于70,返回3等奖;否则返回谢谢惠顾。

declare
v1 number:=dbms_random.value(1,100);
begin
  if v1>95 then dbms_output.put_line('1等奖');
  elsif v1>85 then dbms_output.put_line('2等奖');
  elsif v1>70 then dbms_output.put_line('3等奖');
 else dbms_output.put_line('谢谢惠顾');
end if;
end;

 ⑦使用RAND函数

可以运用在需要产生随机数的场合下,例如在测试、模拟等场合下使用。比如可以使用RAND()函数产生一个0到100之间的随机整数:

SELECT FLOOR(RAND() * 100) AS random_number;

总结:

、DBMS_RANDOM包中的随机数生成函数是基于伪随机数生成算法实现的,因此生成的随机数并不是真正的随机数,而是在一定程度上的伪随机数。

、rand函数是MySQL和PHP中的函数,用于生成随机数。在MySQL中,rand函数可以在任何版本中使用。在PHP中,rand函数可以在PHP 4和PHP 5中使用。其他数据库系统(如Oracle、SQL Server等)中没有rand函数,它们使用不同的方式来生成随机数。

二、自定义函数

指用户自己定义的函数,可以根据自己的需求来编写函数。

1.语法格式:

CREATE FUNCTION function_name (parameters) --function_name为函数名;parameters为函数参数
RETURNS return_type                        --return_type为返回值类型
AS 
BEGIN 
function_body;                             --function_body为函数体
END;

--详细描述理解:
create or replace function             --or replace 覆盖
函数名(参数 [in]|out|in out 类型...)    --不写默认是in,后面加类型不写长度
return  返回类型
is|as 
[声明变量;]
begin
  要执行的语句; 
  return 值|变量;
[exception]
  [要执行的语句;] 
end;

2.自定义函数运用实例

自定义函数可以运用在需要根据用户自己的需求编写函数的场合下使用。

例如:

①制作一个函数mysign

输入一个数,如果大于0返回1;如果小于0返回-1;如果等于0返回0;

create or replace function mysign(v  number) --参数v是要外界输入的,不用赋值   
return number 
is
begin
  if v>0 then return 1;
  elsif v<0 then return -1;
  elsif v=0 then return 0;
  end if;
end;

调用函数:

和系统函数的调用方法一样;

select sign(100),mysign('100'),mysign(-10)
from dual;

②再制作一个函数,输入一个数,要求返回他的相反数:

create or replace function xfs(v number) 
return number 
is
begin
  return -v;
end;

调用函数:

select xfs(-0),xfs(0)
from dual;

③再制作一个函数表示π(没有参数):

create or replace function π 
return number is
begin
  return acos(-1);          --acos(-1) 在数据库里代表π
end;

调用函数:

select π,acos(-1)
from dual;

--比如求半径是3的圆的周长和面积
select 2*π*3 周长,π*power(3,2) 面积
from dual;

④要求创建一个函数,当输入一个员工编号时能够返回员工工资:

create or replace function rs1 (v number) 
return number is
v_sal number;     --声明变量
begin
  select sal into v_sal from emp where empno=v;
  return v_sal;
end;

--调用函数:
select rs1(7788) from dual;

3.自定义函数--有out输出情况

比如:

①要求当输入员工编号时输出员工工资,并返回职位:

create or replace function rs2 (v_empno number,v_sal out number)
return varchar2 
is
v_job varchar2(20);
begin
  select sal,job into v_sal,v_job from emp where empno=v_empno;
return v_job;
end;

调用函数:

因为函数创建时有out输出,函数调用就不能和系统函数调用方法一样,此时需要采用pl/sql调用;

declare
v1 number;
v2 varchar2(20);
begin
  v2:=rs2(7788,v1);                  --返回值:=函数名(参数1,参数2)
  dbms_output.put_line(v1||' '||v2);
end;

②要求自定义一个函数,输入员工姓名,输出员工工资,最后返回员工的部门编号:

create or replace function  rs3(v_name varchar2,v_sal out number)
return number 
is
v_deptno number;
begin
  select sal,deptno into v_sal,v_deptno 
  from emp 
  where ename=v_name;
return v_deptno;
end;

函数调用:

declare
v_deptno number;
v_sal number;
begin
  v_deptno:=rs3('KING',v_sal);
  dbms_output.put_line(v_sal||' '||v_deptno);
end;

自定义函数总结:

  • ·有out一般不用函数
  • ·函数一般不包含DML
  • ·函数不能包含DDL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

树贤森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值