zoukankan      html  css  js  c++  java
  • 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.
  • 相关阅读:
    【转载】SAP_ECC6.0_EHP4或SAP_ECC6.0_EHP5_基于Windows_Server_2008R2_和SQL_server_2008下的安装
    使用delphi 开发多层应用(二十四)KbmMW 的消息方式和创建WIB节点
    使用delphi 开发多层应用(二十三)KbmMW 的WIB
    实现KbmMw web server 支持https
    KbmMW 服务器架构简介
    Devexpress VCL Build v2014 vol 14.1.1 beta发布
    使用delphi 开发多层应用(二十二)使用kbmMW 的认证管理器
    KbmMW 4.50.00 测试版发布
    Basic4android v3.80 beta 发布
    KbmMW 认证管理器说明(转载)
  • 原文地址:https://www.cnblogs.com/arcer/p/3029754.html
Copyright © 2011-2022 走看看