zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    PAT (Advanced Level) Practice 1100 Mars Numbers (20分)
    PAT (Advanced Level) Practice 1107 Social Clusters (30分) (并查集)
    PAT (Advanced Level) Practice 1105 Spiral Matrix (25分)
    PAT (Advanced Level) Practice 1104 Sum of Number Segments (20分)
    PAT (Advanced Level) Practice 1111 Online Map (30分) (两次迪杰斯特拉混合)
    PAT (Advanced Level) Practice 1110 Complete Binary Tree (25分) (完全二叉树的判断+分享致命婴幼儿错误)
    PAT (Advanced Level) Practice 1109 Group Photo (25分)
    PAT (Advanced Level) Practice 1108 Finding Average (20分)
    P6225 [eJOI2019]异或橙子 树状数组 异或 位运算
    P4124 [CQOI2016]手机号码 数位DP
  • 原文地址:https://www.cnblogs.com/XueTing/p/13867944.html
Copyright © 2011-2022 走看看