zoukankan      html  css  js  c++  java
  • PL/SQL基础1(笔记)

    --基本结构
    DECLARE
    --变量声明部分:在此声明PL/SQL用到的变量,类型,游标,以及局部的存储过程和函数
    BEGIN
    --执行部分:过程及SQL语句,即程序的主要部分
    EXCEPTION
    --执行异常部分:异常处理
    END;
    --PL/SQL基本规范:全部的保留字,roacle的内置函数,程序包以及用户自定义的数据类型都用大写
    --PL/SQL基本规范::每行只写一条语句,逗号后以及运算符的前后都应加空格
    --PL/SQL基本规范::要使用有意义的名称命名:
    --PL/SQL基本规范:使用"_"的连接方式,而不是使用大小写混合的方式
    --PL/SQL基本规范:变量前最好加上前缀,以表示方变量的数据类型,作用范围等
    --1.定义变量时,建议用v_作为前缀:v_ename
    --2.定义常量时,建议用c_作为前缀:c_rate
    --3.定义异常时,建议用e_作为前缀:e_error

    --根据用户输入的商品ID来查商品库存

    DECLARE
    V_ID NUMBER := &V_ID; --用户输入商品ID
    V_STOCKCOUNT NUMBER; ---库存量
    BEGIN
    SELECT STOCKCOUNT INTO V_STOCKCOUNT FROM ES_PRODUCT WHERE ID = V_ID;
    DBMS_OUTPUT.PUT_LINE('库存量:' || V_STOCKCOUNT);
    
    END;

    ------升级变量的类型和表中的字段类型相同 变量名 名表.字段名%TYPE 来声明

    DECLARE
    V_ID ES_PRODUCT.ID%TYPE := &ID; --用户输入商品编号
    V_NAME ES_PRODUCT.NAME%TYPE; --变量名称与商品表的名称字段类型相同
    V_PRICE ES_PRODUCT.PRICE%TYPE; --变量价格与商品表的价格字段类型相同
    V_SALEDATE ES_PRODUCT.SALEDATE%TYPE; --变量上架日期与商品表的上架日期字段类型相同
    V_STOCKCOUNT ES_PRODUCT.STOCKCOUNT%TYPE; --变量库存量与商品表的库存量字段类型相同
    BEGIN
    SELECT NAME, PRICE, SALEDATE, STOCKCOUNT
    INTO V_NAME, V_PRICE, V_SALEDATE, V_STOCKCOUNT
    FROM ES_PRODUCT
    WHERE ID = V_ID;
    DBMS_OUTPUT.PUT_LINE('商品名称 :' || V_NAME || ' 商品价格 :' || V_PRICe || ' 商品上架时间 :' ||
    V_SALEDATE || ' 商品库存 :' || V_STOCKCOUNT);
    
    END;

    --升级使用一个变量来代表一个表中的一行字段 变量名  表名%ROWTYPE

    --调用时使用 变量名.字段 来用 

    DECLARE
    v_es_pro es_product%ROWTYPE ; --声明一个变量,表示表中完整行字段变量
    v_id es_product.id%TYPE:=&ID; -----用户输入商品编号
    BEGIN
    SELECT NAME,price,saledate,stockcount INTO
    v_es_pro.name,v_es_pro.price,v_es_pro.saledate,v_es_pro.stockcount
    FROM es_product
    WHERE ID=v_id;
    DBMS_OUTPUT.PUT_LINE('商品名称 :' || v_es_pro.name || ' 商品价格 :' ||v_es_pro.price || ' 商品上架时间 :' ||
    v_es_pro.saledate|| ' 商品库存 :' || v_es_pro.stockcount);
    END;

    --控制语句
    IF <布尔表达式> THEN
    PL/SQL 语句
    END IF

    IF <布尔表达式> THEN
    PL/SQL 语句
    ELSE
    其他语句
    END IF
    IF <布尔表达式> THEN
    PL/SQL 语句
    ELSIF<布尔表达式> THEN
    其他语句
    ELSIF<布尔表达式> THEN
    其他语句
    ELSE
    其他语句
    END IF
    --根据用户输入的商品ID来查商品库存

    DECLARE
    V_ID ES_PRODUCT.ID%TYPE := &V_ID; --用户输入商品ID
    V_STOCKCOUNT ES_PRODUCT.STOCKCOUNT%TYPE; ---库存量
    BEGIN
    SELECT STOCKCOUNT INTO V_STOCKCOUNT FROM ES_PRODUCT WHERE ID = V_ID;
    DBMS_OUTPUT.PUT_LINE('库存量:'||V_STOCKCOUNT);
    --判断库存量是否正常
    IF V_STOCKCOUNT > 0 THEN
    --更新库存,一次买一个减掉一个
    UPDATE ES_PRODUCT SET STOCKCOUNT = STOCKCOUNT - 1
    --更新指定的,不然会全部更新
    WHERE ID=v_id;
    --提出数据操作
    COMMIT;
    DBMS_OUTPUT.PUT_LINE('库存更新成功');
    ELSIF V_STOCKCOUNT = 0 THEN
    DBMS_OUTPUT.PUT_LINE('库存量是0,没有库存了');
    ELSE
    DBMS_OUTPUT.PUT_LINE('库存异常');
    END IF;
    END;

    --根据订单的状态输出对应状态

    SELECT * FROM es_order;
    DECLARE
    V_ID ES_ORDER.ID%TYPE := &ID; --用户输入查询的订单编号
    V_STATUS ES_ORDER.STATUS%TYPE; --订单状态
    V_STANTUSNAME VARCHAR2(20);
    BEGIN
    SELECT STATUS INTO V_STATUS FROM ES_ORDER WHERE ID = V_ID;
    IF V_STATUS = 1 THEN
    V_STANTUSNAME := '已提交';
    ELSIF V_STATUS = 2 THEN
    V_STANTUSNAME := '已付款';
    ELSIF V_STATUS = 3 THEN
    V_STANTUSNAME := '已发货';
    ELSIF V_STATUS = 4 THEN
    V_STANTUSNAME := '已完成';
    ELSE
    V_STANTUSNAME := '未知状态';
    END IF;
    DBMS_OUTPUT.PUT_LINE(V_STANTUSNAME);
    END;

    CASE语法:
    格式一:
    CASE 条件表达式
    WHEN 条件表达式结果1 THEN
    语句段1
    WHEN 条件表达式结果2 THEN
    语句段2
    ....
    [ELSE 语句段]
    END CASE;
    格式二:
    CASE
    WHEN 条件表达式1 THEN
    语句段1
    WHEN 条件表达式2 THEN
    语句段2
    ....
    [ELSE 语句段]
    END CASE;
    --根据用户输入的商品ID来查商品库存用CASE来完成
    --格式一

    DECLARE
    V_ID ES_ORDER.ID%TYPE := &ID; --用户输入查询的订单编号
    V_STATUS ES_ORDER.STATUS%TYPE; --订单状态
    V_STANTUSNAME VARCHAR2(20);
    BEGIN
    SELECT STATUS INTO V_STATUS FROM ES_ORDER WHERE ID = V_ID;
    CASE V_STATUS
    WHEN 1 THEN
    V_STANTUSNAME := '已提交';
    WHEN 2 THEN
    V_STANTUSNAME := '已付款';
    WHEN 3 THEN
    V_STANTUSNAME := '已发货';
    WHEN 4 THEN
    V_STANTUSNAME := '已完成';
    ELSE
    V_STANTUSNAME := '未知状态';
    END CASE;
    DBMS_OUTPUT.PUT_LINE(V_STANTUSNAME);
    END;

    --格式二

    DECLARE
    V_ID ES_ORDER.ID%TYPE := &ID; --用户输入查询的订单编号
    V_STATUS ES_ORDER.STATUS%TYPE; --订单状态
    V_STANTUSNAME VARCHAR2(20);
    BEGIN
    SELECT STATUS INTO V_STATUS FROM ES_ORDER WHERE ID = V_ID;
    CASE 
    WHEN V_STATUS=1 THEN
    V_STANTUSNAME := '已提交';
    WHEN V_STATUS=2 THEN
    V_STANTUSNAME := '已付款';
    WHEN V_STATUS=3 THEN
    V_STANTUSNAME := '已发货';
    WHEN V_STATUS=4 THEN
    V_STANTUSNAME := '已完成';
    ELSE
    V_STANTUSNAME := '未知状态';
    END CASE;
    DBMS_OUTPUT.PUT_LINE(V_STANTUSNAME);
    END;

    --循环共有3种
    LOOP语法:
    LOOP
    要执行的语句;
    EXIT WHEN <条件语句>---条件满足,退出循环语句
    END LOOP;

    WHILE循环语法:
    WHILE<布尔表达式>LOOP
    要执行的语句;
    END LOOP;

    FOR循环语法;
    FOR 循环计数器 IN [REVERSE]下限...上限LOOP
    要执行的语句;
    END LOOP;
    在FOR循环中循环一次,变量自动加1,使用REVERSE,循环变量自动减1,也可以使用EXIT来退出循环

    SELECT * FROM es_sort;
    ID,sortname,fatherid三个字段
    --使用LOOP来添加3条记录

    DECLARE
    V_ID ES_SORT.ID%TYPE := 5; --为变量赋初始值
    V_SORTNAME ES_SORT.SORTNAME%TYPE := '类别'; --指定变量类型并赋初始值
    V_FATHERID ES_SORT.FATHERID%TYPE := 0;
    BEGIN
    LOOP
    INSERT INTO ES_SORT VALUES (V_ID, V_SORTNAME || V_ID, V_FATHERID);
    V_ID := V_ID + 1;
    --退出条件
    EXIT WHEN V_ID = 9;
    END LOOP;
    COMMIT;
    dbms_output.put_line('插入成功');
    END;


    --使用FOR循环来完成,知道循环次数时用FOR

    DECLARE
    V_ID ES_SORT.ID%TYPE ; --为变量赋类型
    V_SORTNAME ES_SORT.SORTNAME%TYPE := '类别'; --指定变量类型并赋初始值
    V_FATHERID ES_SORT.FATHERID%TYPE := 0;
    BEGIN
    FOR v_id IN 9..13 LOOP
    INSERT INTO ES_SORT VALUES (V_ID, V_SORTNAME || V_ID, V_FATHERID);
    END LOOP;
    COMMIT;
    dbms_output.put_line('插入成功');
    END;

    SELECT * FROM es_sort;
    --使用WHILE来完成,不知道循次数时用

    DECLARE
    V_ID ES_SORT.ID%TYPE:=14 ; --为变量赋类型和初值
    V_SORTNAME ES_SORT.SORTNAME%TYPE := '类别'; --指定变量类型并赋初始值
    V_FATHERID ES_SORT.FATHERID%TYPE := 0;
    BEGIN
    WHILE v_id>= 14 AND v_id<=20 LOOP
    INSERT INTO ES_SORT VALUES (V_ID, V_SORTNAME || V_ID, V_FATHERID);
    --变量增加
    v_id:=v_id+1;
    END LOOP;
    COMMIT;
    dbms_output.put_line('插入成功');
    END;
    SELECT * FROM es_sort;

    --输出1-100之间能被3整除的数字

    DECLARE
    V_I NUMBER;
    BEGIN
    FOR V_I IN 1 .. 100 LOOP
    IF (MOD(V_I, 3) = 0) THEN
    DBMS_OUTPUT.PUT_LINE(V_I);
    END IF;
    END LOOP;
    END;
  • 相关阅读:
    Django的mysql配置
    解决mysql问题
    angular(3)服务 --注入---自定义模块--单页面应用
    GIT常用命令整理
    Angular(2)
    Angular(1)
    响应式布局 Bootstrap(01)
    Ajax (一)
    (转)经济学中的风险和不确定性的区别是什么?
    JQuery
  • 原文地址:https://www.cnblogs.com/liunanjava/p/4205011.html
Copyright © 2011-2022 走看看