• PL/SQL第一课(学习笔记)



    PL/SQL(Procedural Language/SQL) 是在标准SQL的基础山增加了过程化处理的语言
    Oracle客户端工具访问Oracle服务器的操作语言
    Oracle对SQL的扩充


    PL/SQL程序结构

    PL/SQL块
    1申明部分:DECLARE
    2执行部分:BEGIN
    3异常处理:EXCEPTION


    1-helloworld.sql
    --输出语句
    DECLARE
        v_Num NUMBERL;--定义
        v_Str VARCHAR2(20);--定义
    BEGIN
        v_Num := 2+3;--赋值
        DBMS_OUTPUT.PUT_LINE('v_Num = '||v_Num);--显示
    END

    sql> set serveroutput on --不写则执行脚本不显示在控制台上
    sql> @ 1-helloworld.sql --执行地址要写正确,在什么目录就写在什么目录下。
    dbms_output.put_line();


    标量类型

    NUMBER(3,-3) 1234     结果等于1000
    小数点向前三位,然后四舍五入。
    NUMBER(3,-1) 1234     结果等于1230

    BINARY_INTEGER

    DECLARE
        v_id NUMBER(7);
        v_fname VARCHAR(25);
        V_salary NUMBER(11,2);
    BEGIN
        SELECT id,first_name,salary
        INTO v_id,v_fname,v_salary
        FROM s_emp
        WHERE id = 1;
        
        DBMS_OUTPUT.PUT_LINE(v_id||' '|| v_fname||' '|| v_salary);
    END

    DECLARE
        v_FirstName students.fist_name%TYPE;
    上面表示,数据类型始终于表里面的该段数据的类型相同。

    RECORD类型
    建立类型
    CREATE
        TYPE t_emp IS RECORD(
        id s_emp.id%TYPE
        )

    %ROWTYPE
    v_emp s_emp%ROWTYPE
    如上则表示 v_emp 与s_emp 保持完全一致。
    =====================================
    id fist_name dept_id salary
    测试
    1、使用RECORD
    DECLARE
        TYPE t_emp IS RECORD(
            id s_emp.id%TYPE,
            fist_name s_emp.fist_name%TYPE,
            dept_id s_emp.dept_id%TYPE,
            salary s_emp.salary%TYPE    
        );
        v_emp t_emp;
    BEGIN
        SELECT id ,fisrt_name ,dept_id ,salary
        INTO v_emp
        FROM s_emp;
        DBMS_OUTPUT.PUT_LINE(v_emp.id ||' '||v_emp.first_name ||' '|| v_emp.dept_id||' '|| v_emp.salary);
    END
    2、使用%ROWTYPE

    DECLARE
        v_emp s_emp%ROWTYPE
    BEGIN
        SELECT * INTO v_emp
        FROM s_emp;
        DBMS_OUTPUT.PUT_LINE(v_emp.id||' '||v_emp.first_name||' '|| v_emp.dept_id||' '||v_emp.salary);
    END

    3、

    **************************************************************************************************************
    变量的作用域与可见性
    虽然我知道,我 理解,但是上课我还是没听懂 她到底怎么讲解的

    条件语句
    IF THEN ELSE END IF
    IF BOOLEN_EXPRESSION1 THEN
    ....
    ELSIF BOOLEN_EXPRESSION2 THEN
    ...
    ELSIF ...
    ELSE
    ...
    ENDIF;

    题目:查询工资提成,大于1500的提成20%,大于1000小于1500的提成10%,小于1000的提成5%

    DECLARE
        ID s_emp.id%TYPE :=1,
        salary s_emp.SALARY%TYPE,
        getchash s_emp.SALARY%Type,
    BEING
        salary := SELECT SALARY FROM s_emp WHERE s_emp.id = ID;
        IF salary >=1500 THEN
        getchasH =salary * 0.15
        ELSIF salary >1000 THEN
        getchasH =salary * 0.1
        ELSE
        getchash =salary * 0.05
        END IF
        DBMS_OUTPUT.PUTLINE('id = '||id||' getcash = '||getchash);
    END

    练习:
    1、从s_emp中找ID为1-5的员工保存在table类型变量里
    DECLARE
        TYPE t_emp IS TABLE OF s_emp%ROWTYPE
            INDEX BY BINNARY_INTEGEH;
        v_emp t_emp;
        num NUMBER(1):=1;
    BEGIN
        LOOP
        SELECT *
        INTO v_emp    (num)
        FROM s_emp
        WHERE ID = num
        num :=num +1;
        IF num >=5 THEN
        EXIT;
        END IF;
        END LOOP;
    END
    2、while
        从table类型变量里取出5名员工信息并输出。
    BEGIN
        WHERE num <6 LOOP
        DBMS_OUTPUT_PUTLINE(v_emp(num).id||' '||v_emp(num).salary)
        END LOOP;
    END


  • 相关阅读:
    浅谈对java中锁的理解
    Spring 4 支持的 Java 8 特性
    【转】Java线程面试题 Top 50
    JVM知识点总览-中高级Java工程师面试必备
    [LeetCode] 195. Tenth Line 第十行
    [LeetCode] 281. Zigzag Iterator 之字形迭代器
    [LeetCode] 324. Wiggle Sort II 摆动排序 II
    [LeetCode] 280. Wiggle Sort 摆动排序
    [LeetCode] 167. Fraction to Recurring Decimal 分数转循环小数
    [LeetCode] 187. Repeated DNA Sequences 求重复的DNA序列
  • 原文地址:https://www.cnblogs.com/itgmhujia/p/1266523.html
Copyright © 2020-2023  润新知