ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

PL/SQL函数和过程、包、游标

2021-09-24 11:33:47  阅读:169  来源: 互联网

标签:begin end create number 游标 SQL return replace PL


PL/SQL函数过程示例

函数尽量不用in,out,in out

根据三角形的三边长返回面积

create or replace function calcTriangleArea(a number, b number, c number)
  return number is
  p number := (a + b + c) / 2;
  s number;
begin
  s := round(sqrt(p * (p - a) * (p - b) * (p - c)), 2);
  return s;
end;

根据雇员ID返回其部门名称

create or replace function getDeptName(v_empno emp.empno%type)
  return varchar2 is
  v_deptname dept.dname%type;
begin
  select dname
    into v_deptname
    from dept d
   where exists (select 0
            from emp e
           where e.deptno = d.deptno
             and e.empno = v_empno);
  return v_deptname;
end;

返回一个由大小写字母组成的,长度为6-10位的随机字符串

create or replace function grs return varchar2 is
  l number := trunc(dbms_random.value(6, 11));
begin
  return dbms_random.string('A', l); --A表示生成大小写字母,l表示长度
end;

根据指定参数输出斐波那契数列对应项上的数值

create or replace function fibonacii(n pls_integer) return pls_integer is
  fib_1 pls_integer := 0;
  fib_2 pls_integer := 1;
  rlt   pls_integer;
begin
  case
    when n = 1 then
      rlt := fib_1;
    when n = 2 then
      rlt := fib_2;
    else
      rlt := fibonacii(n - 2) + fibonacii(n - 1);
  end case;
  return rlt;
end;

过程

根据三角形的两边及其夹角计算出周长和面积

create or replace procedure calcTriangleAreaGirth(a   number,
                                                  b   number,
                                                  ang number) is
  rad number;
  c   number;
  s   number;
  g   number;
begin
  rad := ang / 180 * (asin(1) * 2);
  c   := sqrt(a ** 2 + b ** 2 - 2 * a * b * cos(rad));
  g   := round(a + b + c, 2);
  s   := round(a * b * sin(rad) / 2, 2);
  dbms_output.put_line('Area:' || to_char(s) || '  Girth:' || to_char(g));
end;

begin
calcTriangleAreaGirth(3,4,90);
end;

为指定dept_no的部门的雇员增加20%薪水

create or replace procedure raiseSal(v_deptno emp.deptno%type) is
begin
  update emp set sal = sal * (1 + 0.2) where emp.deptno = v_deptno;
  dbms_output.put_line(to_char(SQL%ROWCOUNT) || '名雇员的薪水已上涨20%');
end;

begin
raiseSal(10);
end;

列出指定日期(默认当前日期)所在月份的所有日期

create or replace procedure listDay(d date default sysdate) is
  v_first_day date := trunc(d, 'mm');
  v_last_day  date := trunc(last_day(d));
begin
  for i in 0 .. (v_last_day - v_first_day) loop
    dbms_output.put_line(v_first_day + i);
  end loop;
end;

begin
listDay;
end;

begin
listDay(date'2014-02-01');
end;

in 接收,不可改变

out 输出,可改变,不可接受

in out 可接受,可改变,可输出

链接中有in,out,in out的用法说明

版权声明:下面链接为xldmx原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

链接:https://blog.csdn.net/xldmx/article/details/102477241

 

 

 

 

 

 

 

 

 

 

 

 

标签:begin,end,create,number,游标,SQL,return,replace,PL
来源: https://www.cnblogs.com/lag1/p/15329526.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有