• oracle系列2:pl/sql


    一、简介:

    pl/sql是面向过程语言与sql语言的结合,它在sql语言中扩充了面向过程的程序结构,如变量和类型、控制语句、过程和函数、对象类型和方法等,实现将过程结构与sql的无缝集成,从而为用户提供了一种功能强大的结构化程序设计语言。

    二、pl/sql的组成:

    1、数据定义语言(DDL):用于执行数据库任务,对数据库及其中的各种对象进行创建、删除、修改等操作

    语句 功能
    create 创建数据库或数据库对象
    alter 修改数据库或数据库对象
    drop 删除数据库或数据库对象

    2、数据操作语言(DML):用于操作数据表中的数据,如查询、修改、增加等操作

    语句 功能
    select 检索表或视图中的数据
    insert 插入数据到表或视图中
    update 修改表或视图中的数据
    delete 删除表或视图中的数据

    3、数据控制语言(DDL):用于安全管理,确定哪些用户可以查看或修改数据库中的数据

    语句 功能
    grant 授予权限
    revoke 收回权限

    三、使用pl/sql的好处:

    有利于客户/服务器环境应用的运行。对于客户/服务器环境来说,真正的瓶颈在网络上。无论网络的传输速度有多快,只要客户端与服务器进行大量的数据交换,应用运行的效率肯定会受到影响。如果使用pl/sql进行编程,将这种具有大量数据处理的应用放在服务器端执行,就可以节省数据在网络中的传输时间。

    四、pl/sql编程案例:

    1、检查学生表中的某个记录是否存在,存在就更新,如果不存在就插入记录

    /*定义变量*/
    declare
        xh varchar2(6):='123456';
        xm varchar2(8):='张三';
        zxf number(2):=45;
    
    /*逻辑块*/
    begin
        /*更新学生表*/
        update xsb set xsb.xm=xm,xsb.zxf=zxf where xh='123456';
        /*检查记录是否存在,如果不存在就插入记录*/
        if sql%notfount then
            insert into xsb values(xh,xm,zxf);
        end if;
    end

    2、如果“计算机基础”课程的平均成绩高于75分,则输出“平均成绩高于75分”,否则输出“平均成绩低于75分”

    declare
        v_avg number(4,2);
    
    begin
        select avg(score) into v_avg
        from xsb,cjb,kcb
        where xsb.id=cjb.xid and cjb.id=kcb.cid 
        and kcb.name="计算机基础";
    
        if v_avg>75 then
            dbms_output.put_line('平均成绩高于75');
        else 
            dbms_output.put_line('平均成绩低于75');
        end if;
    
    end;

    3、求10的阶乘

    //1、用for循环求10的阶乘
    
    declare
        n number:=1;
        i number;
    
    begin
        for i in 2..10
            loop
              n:=n*i;
            end loop;
         dbms_output.put_line(to_char(n));   
    end;            
    
    
    //2、用wile循环求10的阶乘
    
    declare
        n number:=1;
        i number;
    
    begin
        while i<=10
         loop
            n:=n*i;
            i:=i+1;
         end loop;
         dbms_output.put_line(to_char(n));   
    end;           
    
    
    //3、用loop循环求10的阶乘
    
    declare
        n number:=1;
        i number:=2;
    
    begin
        loop
            n:=n*i;
            i:=i+1;
            if i>10   then
                 exit;
            end if;
        end loop;
        dbms_output.put_line(to_char(n)); 
    end;                        

    五、在pl/sql中自定义函数

    参数的三种模式:

    in:表示该参数是输入给函数的参数

    out:表示该参数在函数中赋值,并可以传给函数调用程序

    inout:表示该参数既可以传值也可以赋值

    1、创建函数,根据课程id计算学生的平均成绩

    create or replace function abc(cid in char) //参数模式为in,则表示该参数是输入给函数的参数
        return number; //返回值类型是number型
    as
        avger number; //定义返回值变量
    
    begin
        select avg(成绩) into avger
        from cjb where cjb.cid=cid 
        group by cjb.cid;
        return(avger);
    end;

    2、调用函数

    declare
        cid char:='20180205';
    
    begin
        abc(cid);    //调用函数
    end;

    3、删除函数

    drop function abc;
  • 相关阅读:
    MobileIMSDK连接后频繁掉线重连,提示会话超时失效,对方非正常退出或网络故障
    Android+SpringBoot+Vue+高德地图实现后台查看车辆实时位置功能
    Vue中集成高德地图API实现定位与自定义样式信息窗体
    Java中对接钉钉API获取数据流程
    Java中集成极光推送实现给Android提送消息通知(附代码下载)
    Android中集成极光推送实现推送消息通知与根据别名指定推送附示例代码下载
    PostGresSQL简介与Windows上的安装教程
    信息系统项目管理师-知识产权、项目收尾、标准规范核心知识点思维脑图
    信息系统项目管理师-项目成熟度模型、量化项目管理核心知识点思维脑图
    信息系统项目管理师-招投标法、政府采购法核心知识点思维脑图
  • 原文地址:https://www.cnblogs.com/XueTing/p/13867944.html
Copyright © 2020-2023  润新知