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;
  • 相关阅读:
    Mycat读写分离+高可用笔记
    MyCAT基础安装笔记
    C# Winform中DataGridView的DataGridViewCheckBoxColumn CheckBox选中判断
    C# winform DataTable 批量数据处理 增、删、改 .
    选中CheckBoxList的值放到TextBox中,再次选中从textBox中删除
    dede后台删除文章后台还有分页显示解决方法
    dedecms数据库表说明大全
    织梦自增函数[field:global name=autoindex/]常见用法
    http协议的状态码——400,401,403,404,500,502,503,301,302等常见网页错误代码
    web.config设置之system.webServer 详细介绍,为网站设置默认文档
  • 原文地址:https://www.cnblogs.com/XueTing/p/13867944.html
Copyright © 2011-2022 走看看