• pl/sql(三)


    --pl/sql3
    
    DECLARE
    -- 最基本的pl/sql 代码块
    -- student;
    s student%ROWTYPE;
    BEGIN  
    select *
    into    s --返回的是一个单独的实例
    from student
    where sno='s001';
    --开始
    --在一个表里面有一个输出函数v
    DBMS_OUTPUT.PUT_LINE('学生姓名:'||s.sname);  --换行打印
    DBMS_OUTPUT.PUT_LINE('学生性别:'||s.ssex);  --换行打印
    DBMS_OUTPUT.PUT_LINE('学生年龄:'||s.sage);  --换行打印
    DBMS_OUTPUT.PUT_LINE('学生学号:'||s.sage);  --换行打印
    END;   
    /
    
    
    --异常
    
    DECLARE
    a number(10,0);
    BEGIN
    a:=100/0;
    DBMS_OUTPUT.PUT_LINE('a='||a);  --换行打印
    END;   
    /
    
    --有错误 : 除数不能位0
    --如果我想正常运行 遇到除数为0 的时候我自动的处理和告警
    
    
    -- 内置的异常处理
    
    DECLARE
    a number(10,0);
    BEGIN
    select id into a from sss;
    a:=100/0;
    DBMS_OUTPUT.PUT_LINE('a='||a);  --换行打印
    
    --可以添加异常
    EXCEPTION  --异常处理
        WHEN ZERO_DIVIDE THEN
        DBMS_OUTPUT.PUT_LINE('当前遇到除数为0的异常,此处执行的是异常告警');  --换行打印
        
    END;   
    /
    
    
    
    --自定义的异常处理
    DECLARE
    a number(10,0);
    b number(10.0);
    b_is_zero exception;
    BEGIN
    b:=0;
    if b <= 0 THEN
     -- 做出异常告警
     RAISE b_is_zero;
    END if;
    a:=100/b;
    DBMS_OUTPUT.PUT_LINE('a='||a);  --换行打印
    
    --可以添加异常
    EXCEPTION  --异常处理
        WHEN  b_is_zero THEN
        DBMS_OUTPUT.PUT_LINE('当前的b=0');  --换行打印  
      --  ROLLBACK;
    
        WHEN ZERO_DIVIDE THEN
        DBMS_OUTPUT.PUT_LINE('当前遇到除数为0的异常,此处执行的是异常告警');  --换行打印
    END;   
    /
    
    
    DECLARE
    a number(10,0);
    b number(10.0);
    b_is_zero exception;
    test_exc exception;
    BEGIN
    b:=-1;
    
    a:=20;
    
    if (a*b)<= 0 THEN
     -- 做出异常告警
     RAISE test_exc;
    END if;
    DBMS_OUTPUT.PUT_LINE('a='||a);  --换行打印
    
    --可以添加异常
    EXCEPTION  --异常处理
        WHEN test_exc THEN
        DBMS_OUTPUT.PUT_LINE('当前ab的乘积是负数');
    
        WHEN  b_is_zero THEN
        DBMS_OUTPUT.PUT_LINE('当前的b=0');  --换行打印  
      --  ROLLBACK;
    
        WHEN ZERO_DIVIDE THEN
        DBMS_OUTPUT.PUT_LINE('当前遇到除数为0的异常,此处执行的是异常告警');  --换行打印
    END;   
    /
    
    
    
    --函数
    
    
    create table  --创建表
    
    /*
    
    y=f(x)
    y: 返回值
    x: 参数
    */
    
    -- function
    create  or replace function test(v_s_no in varchar2)
    return varchar2 is
    DECLARE 
    -- 最基本的pl/sql 代码块
    -- student;
    s student%ROWTYPE;
    string varchar2(1000);
    BEGIN  
    select *
    into    s --返回的是一个单独的实例
    from student
    where sno=v_s_no;
    --开始
    --在一个表里面有一个输出函数v
    -- DBMS_OUTPUT.PUT_LINE('学生姓名:'||s.sname);  --换行打印
    -- DBMS_OUTPUT.PUT_LINE('学生性别:'||s.ssex);  --换行打印
    -- DBMS_OUTPUT.PUT_LINE('学生年龄:'||s.sage);  --换行打印
    -- DBMS_OUTPUT.PUT_LINE('学生学号:'||s.sage);  --换行打印
    
    string:='{
        "sites": [
        { "学生姓名:":"'
        ||s.sname||
        '" }, 
        { "学生性别:":"'
        ||s.ssex||
        '"  }, 
        { "学生年龄:":"
        '||s.sage||'
        " },
         { "学生学号:":"
         '||s.sage||'
         " }
        ]
    }';
    return string;
    END;   
    /
    
    
    --
    
    
    
    
    create or replace function  functionname( * )
    return returnname 
    
    
    
    /*
    or replace : 如果函数存在 就直接覆盖
    */
    create or replace function  function1(q in  number , f in number)
    return number 
    is
    BEGIN
        if q>10 THEN
        return (q*f);
        else
        return(100);
        end if;
    END;
    /
    
    -- 根据sage 算出学生的出生年份
    
    create or replace function  n_sage(sage in number)
    return number 
    is
    BEGIN
        return (2020-sage);
    END;
    /
    -- 使用函数  
    
    select * from student;
    
    select SNO,SNAME,SAGE,SSEX,n_sage(SAGE) from student;
    
    
    
    -- 删除函数 
     drop function functionname;
    
    drop function to_json;
    
    
    create or replace function  to_json(v_sno in varchar2)
    return varchar2 
    is
    -- 最基本的pl/sql 代码块
    -- student;
    s student%ROWTYPE;
    string varchar2(1000);
    BEGIN  
    select *
    into    s --返回的是一个单独的实例
    from student
    where sno=v_sno;
    --开始
    --在一个表里面有一个输出函数v
    DBMS_OUTPUT.PUT_LINE('学生姓名:'||s.sname);  --换行打印
    DBMS_OUTPUT.PUT_LINE('学生性别:'||s.ssex);  --换行打印
    DBMS_OUTPUT.PUT_LINE('学生年龄:'||s.sage);  --换行打印
    DBMS_OUTPUT.PUT_LINE('学生学号:'||s.sno);  --换行打印
    
    string:='{"student": [
        { "学生姓名:":"'||s.sname||'" }, 
        { "学生性别:":"'||s.ssex||'"  }, 
        { "学生年龄:":"'||s.sage||'" },
        { "学生学号:":"'||s.sno||'" }
        ]
    }';
    return string;
    END;  
    /
    /*
    create : 创建
    or replace  :如果遇到同名函数删除原来的函数重新创建
    function    : 函数的关键字
    to_json(v_sno in varchar2): 函数名(形参名称 in  形参的类型)
    
    
    return varchar2 : 返回值  返回值类型
    is
    -- 最基本的pl/sql 代码块
    -- student;
    s student%ROWTYPE;      : 创建了一共student的变量s
    string varchar2(1000);  : 创建了一共长度为1000 类型为vachar 的变量  string
    
    BEGIN                   : 开始
    select *
    into    s --返回的是一个单独的实例
    from student
    where sno=v_sno;
    --开始
    -- 执行的函数
    --where sno=v_sno;   : sno 是表的学号  v_sno 是传进来的学生学号
    
    
    --在一个表里面有一个输出函数v
    -- DBMS_OUTPUT.PUT_LINE('学生姓名:'||s.sname);  --换行打印
    -- DBMS_OUTPUT.PUT_LINE('学生性别:'||s.ssex);  --换行打印
    -- DBMS_OUTPUT.PUT_LINE('学生年龄:'||s.sage);  --换行打印
    -- DBMS_OUTPUT.PUT_LINE('学生学号:'||s.sno);  --换行打印
    
    string:='{"student": [
        { "学生姓名:":"'||s.sname||'" }, 
        { "学生性别:":"'||s.ssex||'"  }, 
        { "学生年龄:":"'||s.sage||'" },
        { "学生学号:":"'||s.sno||'" }
        ]
    }';
    -- 拼接字符串变成 josn格式数据
    return string;
    --返回值
    END;  
    /
    
    */
    
    
    
    
    SET SERVEROUTPUT ON
    BEGIN
    DBMS_OUTPUT.PUT_LINE( to_json('s001'));
    end;
    /
    每个人都是在努力的路上,别因为别人的误解而放弃,,术业有专攻,如是而已。
  • 相关阅读:
    事务的原理 学习笔记
    JAVA并发-从缓存一致性说volatile 讲的很好
    【mysql】mysql有哪些权限
    spring data jpa mysql 悲观锁
    Mysterious Bacteria LightOJ
    Harmonic Number LightOJ
    Aladdin and the Flying Carpet LightOJ
    Pairs Forming LCM LightOJ
    Harmonic Number (II) LightOJ
    Goldbach`s Conjecture LightOJ
  • 原文地址:https://www.cnblogs.com/16699qq/p/13153514.html
Copyright © 2020-2023  润新知