• 五、PL/SQL循环、游标、函数和过程


    --PL/SQL基础知识学习
    --一、PL/SQL语句块,基础语法格式
    DECLARE
      --变量声明列表
      info varchar(25); --变量声明
      stu_unm integer := 15;
    BEGIN
      --语句块
      info := 'soulsjie'; --变量的赋值
      DBMS_OUTPUT.put('HELLO WORLD!'); --输出不换行
      DBMS_OUTPUT.put_line(info || stu_unm); --输出换行 ||为字符串的连接符
      --异常处理块
    END;
    
    
    --1.循环
    --1.1for循环
    DECLARE
    i INTEGER :=1;
    j INTEGER :=10;
    BEGIN
      FOR S IN i .. j LOOP
       DBMS_OUTPUT.put_line('序号是'||S);
        END LOOP;
    END;
    
    
    --1.2if语句
    DECLARE
    chengji integer;
    BEGIN
      chengji :=&temp;
      DBMS_OUTPUT.put_line('您输入的成绩是:'||chengji);
      IF chengji>90 THEN  --注意不需要';’号
        DBMS_OUTPUT.put_line('优秀');
        ELSIF chengji>=60 THEN  --注意不是ELSEIF
          DBMS_OUTPUT.put_line('及格');
          ELSE
            DBMS_OUTPUT.put_line('不及格');
            END IF;
    END;
    
    
    --1.3while循环
    DECLARE
    chengji integer :=10;
    BEGIN
      WHILE chengji>0 LOOP
        DBMS_OUTPUT.put_line(chengji);
        chengji :=chengji-1;
        END LOOP;
    END;
    
    
    --1.4do whlie 循环
    DECLARE
    i INTEGER :=12; 
    BEGIN 
      LOOP 
         DBMS_OUTPUT.put_line(i);
         i:=i-1;
         EXIT WHEN i=0;
        END LOOP;
      END;
      
      
    --1.5case 语句
    DECLARE 
    i VARCHAR(20);
    BEGIN 
       i :='&temp';
        CASE i
        WHEN 'y' THEN DBMS_OUTPUT.put_line('您选择了是');
        WHEN 'n' THEN DBMS_OUTPUT.put_line('您选择了否');
        ELSE DBMS_OUTPUT.put_line('默认项');
        END case;
      END;
      
       SELECT I.STU_ID 学号,
              (CASE I.STU_SEX
                WHEN '男' THEN
                 '1'
                 WHEN '女' THEN
                   '0'
                ELSE
                  '未知'
              END)
         FROM STU_INFO I;
         
         
    --1.6 GOTO 语句
    --创建节点,跳转到指定节点
    DECLARE 
    BEGIN 
      <<a>>
      DBMS_OUTPUT.put_line('A');
      goto c;
      <<b>>
      DBMS_OUTPUT.put_line('B');
      <<c>>
      DBMS_OUTPUT.put_line('C');
      END;
      
      
      --2.SELECT INTO 的用法。统计学生信息表中的学生总数
      --select into 将查询到的结果赋给变量
      DECLARE 
      TEMP INTEGER;
      us_name VARCHAR(20);
      BEGIN 
       SELECT COUNT(*) INTO TEMP FROM (SELECT DISTINCT STU_ID FROM STU_INFO);--查询学生信息记录条总数
       DBMS_OUTPUT.put_line('总记录条数有'||TEMP||'条');
       SELECT I.STU_NAME INTO us_name FROM STU_INFO I WHERE I.STU_ID='180301';--查询指定账号的学生姓名
       DBMS_OUTPUT.put_line('姓名是:'||us_name);
      END;
      
      
       --3.cursor 利用游标读取数据  遍历一个记录集
       --%ISOPEN(游标是否已经打开)   /%FOUND(遍历到数据)   /%NOTFOUND(未遍历到数据)    /%ROWCOUNT(遍历到数据的记录条数)
       DECLARE 
       CURSOR youbiao1 IS SELECT * FROM STU_INFO I WHERE I.STU_SEX='男'; --a.创建一个游标 
       temp youbiao1%rowtype;--b.创建一个变量  记录每行内容
       BEGIN 
         IF NOT youbiao1%ISOPEN THEN OPEN youbiao1;--c.若该游标未打开则打开该游标
           DBMS_OUTPUT.put_line('游标已被打开');
         END IF;
         LOOP --d.利用循环让游标读取数据
           FETCH youbiao1 INTO temp;
            EXIT WHEN youbiao1%NOTFOUND;--e.当记录读取完毕跳出循环
            DBMS_OUTPUT.put_line(temp.STU_NAME);
           END LOOP;
           CLOSE youbiao1;--f.关闭游标
            DBMS_OUTPUT.put_line('游标已关闭');
         END;
         
         
         --4.异常处理
         DECLARE
         aa INTEGER; 
         BEGIN 
           aa:=1/0;--函数执行
           EXCEPTION WHEN OTHERS THEN--异常处理块
              DBMS_OUTPUT.put_line('出现异常!');
           END;
           
    --二、函数的创建和使用
    /*基本格式 
    CREATE [OR REPLACE] FUNCTION FUN_NAME [(参数1 参数类型, 参数2 参数类型, 参数n 参数类型)] 
    RETURN 返回值类型
    IS
    BEGIN 
      函数体
      RETURN 具体的返回值;
      END FUN_NAME;
    */
    --创建无参数函数
    CREATE OR REPLACE FUNCTION F_WUCANSHU RETURN INTEGER
    IS 
    BEGIN 
      RETURN 3+6;
      END F_WUCANSHU;
    SELECT F_WUCANSHU FROM DUAL;--函数的调用
    
    
    --创建有参函数
    CREATE OR REPLACE FUNCTION F_YOUCANSHU(num1 INTEGER,num2 INTEGER) RETURN INTEGER
    IS
    BEGIN 
      RETURN (num1*num2);
      END F_YOUCANSHU;
    SELECT F_YOUCANSHU(&数字1,&数字2) 乘积是 FROM DUAL;--调用有参函数
    
    
    --创建函数 按照用户输入的学生学号查询该学生的姓名信息
    CREATE OR REPLACE FUNCTION F_SEARCH_NAME(stu_id VARCHAR) RETURN VARCHAR 
    --注意参数的声明不带长度,如:(stu_id VARCHAR)
    IS
    temp VARCHAR(20);
    stu VARCHAR(20);
    BEGIN
      stu:=stu_id;
      SELECT DISTINCT STU_NAME INTO temp FROM STU_INFO WHERE STU_ID=stu;--将查询到的学号保存到变量temp中
      RETURN temp;--将结果返回
      END F_SEARCH_NAME;
    SELECT F_SEARCH_NAME('&请输入要查询的学号') 查询结果 FROM DUAL;
    
    --三、过程的创建和使用
    --完成数据库中特定的任务,可以永久保存在数据库中供其他程序使用
    --3.1过程创建的基本格式
    /*CREATE [OR REPLACE] PROCEDURE PRO_NAME 
    [参数名 IN 参数类型, ... 参数N IN 参数N的类型]
    IS
    BEGIN 
      //过程要执行的代码体
      END;
    */
    CREATE OR REPLACE PROCEDURE insert_stuinfo(
    stu_id IN VARCHAR,--注意在声明参数的类型时不加长度 与函数的参数声明(canshu VARCHAR)不同
    stu_name IN VARCHAR,
    stu_class IN VARCHAR,
    stu_sex IN VARCHAR
    )
    IS
    BEGIN 
      INSERT INTO STU_INFO VALUES(stu_id,stu_name,stu_class,stu_sex);--过程要执行的SQL语句块
      END;
    CALL insert_stuinfo('jie','jie','jie','jie');--存储过程的调用
    
  • 相关阅读:
    【渗透测试】hydra使用小结
    Git/SQL/正则表达式的在线练习平台
    加密算法的前世今生
    Linux的进程、线程、文件描述符是什么
    一文看懂 session 和 cookie
    Linux 文件目录都是什么鬼?
    Linux shell 的实用小技巧
    关于 Linux shell 你必须知道的
    我用四个命令概括了 Git 的所有套路
    如何寻找最长回文子串
  • 原文地址:https://www.cnblogs.com/soulsjie/p/8297648.html
Copyright © 2020-2023  润新知