• Oracle总结之plsql编程(基础八)


    原创作品,转自请注明出处:https://www.cnblogs.com/sunshine5683/p/10328524.html

    一、函数

        1、函数是可以返回一个特定的数据,函数的创建中必须包含return子句。

        2、函数创建:

        create function sp_function2(spname varchar2) return number  is salaries  number(7,3);

        begin 

        ----执行部分

        select sal*10+nvl(comm,0)*10 into salaries from emp where ename=spname;

        return salares;

        end;


        3、在sqlplus中调用函数

        var xhq_salaries number

        call sp_function2('SCOTT') into :xhq_salaries;

        

    二、包

        1、包是用于逻辑上组合过程和函数的,可以使用create package命令创建一个包。

        如:

        create package sp_package is

            procedure update_sal(name varchar2,newsal number);

            function sp_function2(name varchar2) return number;

        end;

        

    2、创建包体

        create or replace package body sp_package is

    procedure update_sal(name varchar2,newsal number) is

    begin

    update emp set sal=newsal where ename=name;

    end;

    function sp_function2(name varchar2) return number is

    salaries number;

    begin

    select sal into salaries from emp where ename=name;

    return salaries;

    end;

    end;  

    3、调用包的函数或过程

    exec sp_package.update_sal('SMITH',120);


    三、plsql变量

    1、标量类型(scalar)

    标量包含许多类型,此处介绍常用类型就可以

    如:

    定义一个边长字符串: v_ename varchar2(20);

    定义一个小数 ,范围-99.99~99.99:    v_sal  number(4,2);

    定义一个小数并给一个初始值: v_sal2  number(6,2):=1111.11

    例子:

    输入员工号,输出员工工资,姓名,个人所得税(税率为0.01)

    declare

    c_tax_rate number(3,2):=0.01;

    v_ename varchar2(10);

    v_sal number(7,2);

    v_tax_sal number(7,2);

    begin

    select ename,sal into v_ename,v_sal from emp where empno=&no;

    --计算所得税

    v_tax_sal:=v_sal*c_tax_rate;

    dbms_output.put_line('姓名为:'||v_ename||'工资:'||v_sal || '所得税:'||v_tax_sal);

    end;


    上面报错原因是定义v_ename  varchar(5),但实际上返回的值大于定义的,所以报错,改成v_ename varchar(10),问题解决,正常执行。

    标量使用%type类型:表面。列名%type

    如上面:v_ename  emp.ename%type;这样定以后就会匹配大小,不会存在上述缓冲太小的错误,也不至于定义太大浪费空间。

    2、复合类型(即plsql记录)

    类似于高级语言中的结构体,使用:记录变量.记录成员.

    3、复合类型之plsql表,相当于高级语言中的数组,区别是下标可以为负数,而在高级语言中是不可以为负数的。

    4、参照变量:是指用于存放数值指针的变量,通过参照变量,可以使得应用程序共享相同对象,从而降低占用的空间,在编写plsql程序时,可以使用游标变量和对象变量两种参照变量,简单是用的最多的是游标变量。

        使用游标变量时,不需要指定相应的select语句,但是使用又表示,需要指定select语句。

        实例如下:

        declare
      type sp_emp_cursor is ref cursor;
      test_cursor sp_emp_cursor;
      --定义变量
      v_ename emp.ename%type;
      v_sal emp.sal%type;
       begin
       --吧test_cursor和一个select结合
       open test_cursor for select ename,sal from emp where deptno=&no;
       --循环取出查询出的数据
       --循环取出查询出的数据
      loop
        fetch test_cursor into v_ename,v_sal;
        exit when test_cursor%notfound;
        dbms_output.put_line('姓名:'||v_ename||'工资:'||v_sal);
       end loop;
       --关闭游标
       close test_cursor;
       end;


  • 相关阅读:
    记一次 css样式的使用
    Vue -- element
    Ubuntu系统 ,鼠标双击搜索框内容 ,内容会被自动删除
    MetInfo Password Reset Poisoning By Host Header Attack
    wechall writeup
    SQL常用语句
    PHP Tips
    PHP版本差异备忘录
    Docker入门
    JetBrains系列软件用法
  • 原文地址:https://www.cnblogs.com/sunshine5683/p/10328524.html
Copyright © 2020-2023  润新知