• Chapter 03 Writing Executable Statements 01


    Objectives

    After completing this lesson,you should be able to do the following:

    • Identify lexical units in a PL/SQL block.
    • Use build-in SQL functions in PL/SQL
    • Describe when implict conversions take place and when explict conversion have to be dealt with
    • Write nested blocks and qualify variables with labels
    • Write readable code with appropriate indentation
    • Use sequences in PL/SQL expressions.

    Agenda

    • Writting executable statements in a PL/SQL block
    • Writting nested blocks
    • Using operators and developing readable code.

    Lexical units in a PL/SQL Block

    Lexical units:

    • Are building blocks of any PL/SQL block.
    • Are sequences of characters including letters,numerals,tables spaces,returns,and symbols
    • Can be classified as:
      • Identifiers:v_fname,c_percent
      • Delimiters:;,+-
      • Literals:John,428,True
      • Comments:--,/**/

    PL/SQL Block Syntax and Guidelines

    • Using Literals
      • -Character and date literals must be enclosed in single quotation marks.
      • -Numbers can be simple values or in scientific notaion.
    v_name := 'Henderson';
    • Formatting Code:Statements can span several  lines.

    Commenting Code

    • Prefix single-line comments with two hyphens(--).
    • Place a block comment between the symbols /* and */.

    Example:

    DECLARE
    ...
    v_annual_sal NUMBER (9,2);
    BEGIN
        /*
            Compute the annual salary based on the monthly salary input from the user 
        */
        v_annual_sal := mothly_sal * 12;
    --The following line displays the annual salary
    DBMS_OUTPUT.PUT_LINE(v_annual_sal);
        
        
    END;
    /

    SQL Functions in PL/SQL

    • Available in procedural statements:
      • -Single-row functions
    • Not available in procedural statements:
      • -DECODE
      • -Group functions(MIN,SUM,MAX只针对SQL,不针对PL/SQL)

    SQL Functions in PL/SQL:Example

    • Get the length of a string:
    View Code
    DECLARE
            v_desc_size INTEGER(5);
            v_prod_description VARCHAR(70) := 'You can use this product with your radios for higher frequency';
    BEGIN
            --get the length of the string in prod description
            v_desc_size := LENGTH(v_prod_description);
    
            DBMS_OUTPUT.PUT_LINE('The size of the production is ' ||  v_desc_size);
    END;
    /
    
    SQL> @getlength.sql
    The size of the production is 62
    
    PL/SQL procedure successfully completed.
    • Get the number of months an employee has worked:
    View Code
    DECLARE
            v_tenure NUMBER(8,2);
    BEGIN
            SELECT MONTHS_BETWEEN(CURRENT_DATE,hire_date) INTO v_tenure
            FROM employees
            WHERE employee_id = 100;
    
            DBMS_OUTPUT.PUT_LINE('The number of months an employee has worked is ' || v_tenure);
    END;
    
    /
    
    SQL> @months_between.sql
    The number of months an employee has worked is 97.27
    
    PL/SQL procedure successfully completed.

    Using Sequences in PL/SQL Expressions

    • Starting in 11g:
    View Code
    DECLARE
            v_new_id NUMBER;
    BEGIN
            v_new_id :=EMPLOYEES_SEQ.NEXTVAL;
    
            DBMS_OUTPUT.PUT_LINE('Starting 11g,The Next Sequence is ' || v_new_id);
    END;
    /
    SQL> @starting_11g_sequence.sql
    Starting 11g,The Next Sequence is 211
    
    PL/SQL procedure successfully completed.
    View Code
    DECLARE
            v_new_id NUMBER := EMPLOYEES_SEQ.NEXTVAL;
    BEGIN
            DBMS_OUTPUT.PUT_LINE('SIMPLE METHOD TO GET THE NUMBER OF SEQUENCE ,THE NUMBER IS ' || v_new_id);
    END;
    /
    SQL> @starting_11g_sequence02.sql
    SIMPLE METHOD TO GET THE NUMBER OF SEQUENCE ,THE NUMBER IS 212
    
    PL/SQL procedure successfully completed.
    • Before 11g:
    View Code
    DECLARE
            v_new_id NUMBER;
    BEGIN
            SELECT EMPLOYEES_SEQ.NEXTVAL INTO v_new_id FROM DUAL;
    
            DBMS_OUTPUT.PUT_LINE('The next Sequence Num Is :' || v_new_id);
    END;
    /
    SQL> @before_11g_sequence.sql
    The next Sequence Num Is :210
    
    PL/SQL procedure successfully completed.

    Data Type Conversion

    • Converts data to comparable data types
    • Is of two types:
      • -Implicit conversion
      • -Explicit conversion
    • Functions:
      • -TO_CHAR
      • -TO_DATE
      • -TO_NUMBER
      • -TO_TIMESTAMP

    Data Type Conversion

    --implict data type conversion
    
    v_date_of_joining DATE := '02-Feb-2000';
    --error in data type conversion
    
    v_date_of_joining DATE := 'February 02,2000';
    --explicit data type conversion
    
    v_date_of_joining DATE := TO_DATE('February 02,2000','Month DD,YYYY');
    DECLARE
            a_number NUMBER;
    BEGIN
            a_number := '125';
            a_number := a_number + 3;
            DBMS_OUTPUT.PUT_LINE(to_char(a_number,'9999'));
    END;
    /
    SQL> @conversion.sql
    128
    
    PL/SQL procedure successfully completed.

    Nested Blocks

    PL/SQL blocks can be nested.

    • An executable section(BEGIN ...END) can contain nested blocks.
    • An exception section can contain nested blocks.

    View Code
    DECLARE
            v_outer_variable VARCHAR2(20) := 'GLOBAL VARIABLE';
    BEGIN
            DECLARE
                    v_inner_variable VARCHAR2(20) := 'LOCAL VARIABLE';
            BEGIN
                    DBMS_OUTPUT.PUT_LINE(v_inner_variable);
                    DBMS_OUTPUT.PUT_LINE(v_outer_variable);
            END;
    
            DBMS_OUTPUT.PUT_LINE(v_outer_variable);
    END;
    /
    SQL> @nested.sql
    LOCAL VARIABLE
    GLOBAL VARIABLE
    GLOBAL VARIABLE
    
    PL/SQL procedure successfully completed.
  • 相关阅读:
    透视分析
    仪表分析
    sql查询和预览界面,在预览界面选择图表最后进行导出数据和图表到excel
    可视化查询
    创建数据源
    Smartbi使用Oracle RAC数据库做知识库
    反应器(Reactor)模式
    Netty:EventLoopGroup
    ShuffleTest java 使用集合的方式进行排序
    MapTest java 核心编程
  • 原文地址:https://www.cnblogs.com/arcer/p/3029754.html
Copyright © 2020-2023  润新知