zoukankan      html  css  js  c++  java
  • PL/SQL控制语句和介绍

    ----------------------------PL/SQL的组成------------------------------------------------------------
    PL/SQL块由3部分组成:声明部分、执行部分、异常处理部分
    [declare]
    --声明部分:在此声明PL/SQL用到的变量、类型及游标,以及局部的存储过程和函数
    begin
    --执行部分:过程及SQL语句,即程序的主要部分,不可省略
    [exception]
    --异常处理部分:错误处理
    end;
    ----------------------------PL/SQL变量和常量的声明--------------------------------------------------
    变量:variable_name?data_type[(size)][:=?init_value];
    --variable_name表示变量名称
    --data_type表示变量的SQL或PL/SQL数据类型
    --size指定变量的范围。
    --init_value指定变量的初始值

    --常量:variable_name?CONSTANT?data_type?:=?value;(注意常量必须赋初始值)

    ----------------------------PL/SQL变量赋值----------------------------------------------------------
    方法一:通过select?into?给变量赋值,查询结果只返回一条数据并赋值到变量中保存,返回多条或零条数据则报错。
    DECLARE
       v_ename VARCHAR2(20);
       v_rate NUMBER(7,2);
       v_no?number;
       c_rate_incr CONSTANT NUMBER(7,2):=1.10;
    BEGIN
       SELECT ename,sal*c_rate_incr INTO v_ename,v_rate FROM emp
        WHERE empno=7369;
       --方法二:通过赋值操作符":="给变量赋值myseq.nextval取的是索引值11g的新特性
       v_ename:='SCOTT';
       v_no:=myseq.nextval;
    END;
    ---------------------------PL/SQL中标识符定义的要求和限制:-----------------------------------------
    1)标识符名称不能超过30个字符。
    2)第一个字符必须是字母。
    3)不区分大小写。
    4)不能用”-”减号。
    5)不能用SQL的保留字。
    程序变量 v_开头
    程序常量 c_
    游标变量 cursor_
    异常标志 e_
    --------------------------PL/SQL中编码规则----------------------------------------------------------
    (1)利用缩进排列展现逻辑结构。保留字后出现的列开始缩进三个空格,如declare下面声明变量行。
    (2)利用大小写增强可读性。保留字统一大写;?应用程序专用名称或标识符统一小写。
    (3)格式化单独语句。每行至多写一条语句;?声明语句中尽量保持声明的数据类型近变量名,而不是与数据类型对齐。
    (4)格式化SQL语句。右对齐DML语句的子句中的保留字。

    --------------------------注释-----------------------------------------------------------------------
    1)使用双“-”减号加注释,只在一行有效,如:
      v_sal?NUMBER(12,2);?--人员的工资变量
    2)使用“/*?*/”来加一行或多行注释,建议使用如下方式
    /*
    ||在注释首行只放斜线星号,标志注释开始
    ||,然后注释块每一行以双垂直线开头,突出后面的注释内容。可以不写,但为了可读性
    */
    -------------------------PL/SQL数据类型--------------------------------------------------------------
    1.标量数据类型,包含单个值,没有内部组件。包括数字、字符、布尔值和日期时间值。
    --例如:CHAR,VARCHAR2,DATE,BOOLEAN等......
    2.LOB(Large?OBject)数据类型,用于存储大的数据对象的类型,主要支持BFILE、BLOB、CLOB、NCLOB类型。
    3.属性类型,属性用于引用变量或数据库列的数据类型,以及表示表中一行的记录类型。
    1)%TYPE
    --定义一个变量,其数据类型与已经定义的某个数据变量(尤其是表的一列)的数据类型一致。
    2)%ROWTYPE
    --返回一个记录类型,其数据类型和数据库表的数据结构一致。
    用法:
    DECLARE
       v_empno emp.empno%TYPE:=7369;
       v_rec emp%ROWTYPE;
    BEGIN
      SELECT * INTO v_rec FROM emp
      WHERE empno=v_empno;
      DBMS_OUTPUT.PUT_LINE('姓名:'|| v_rec.ename||'工资:'||v_rec.sal);--输出一行,只在PL/SQL块中
    END;
    -----------------------PL/SQL控制语句----------------------------------------------------------------
    1.条件控制,用于根据条件执行一系列语句。条件控制包括IF语句和CASE语句。
    -----------1)IF语句语法:

    IF?<布尔表达式>?THEN --if
    ???--PL/SQL和SQL语句
    END?IF;
    --例子:
    BEGIN
       IF 1=1 THEN
       DBMS_OUTPUT.PUT_LINE('猪猪');
       END IF;
    END;
      -------------
    IF?<布尔表达式>?THEN --if-else
    --PL/SQL和SQL语句
    ELSE
    --其他语句
    END?IF;
    --例子:
    BEGIN
       IF 1=2 THEN
       DBMS_OUTPUT.PUT_LINE('猪猪');
       ELSE
       DBMS_OUTPUT.PUT_LINE('狗狗');
       END IF;
    END;
      -------------
    IF?<布尔表达式>?THEN --if-else?if-else
    --PL/SQL和SQL语句
    ELSIF?<其他表达式>?THEN --?这里是elsif?而不是elseif,注意!!!
    --其他语句
    ELSIF?<其他表达式>?THEN
    --其他语句
    ELSE
    --其他语句
    END?IF;
    --例子:
    BEGIN
       IF 1=2 THEN
       DBMS_OUTPUT.PUT_LINE('王可可');
       ELSIF 1=3 THEN
       DBMS_OUTPUT.PUT_LINE('是');
       ELSE
       DBMS_OUTPUT.PUT_LINE('碧池');
       END IF;
    END;

    -----------2)CASE语句语法:

    --格式一
      CASE?条件表达式
    WHEN?条件表达式结果1?THEN?语句段1
    WHEN?条件表达式结果2?THEN?语句段2
    .....
    WHEN?条件表达式结果n?THEN?语句段n
    [ELSE?语句段]
    END?CASE;
    --例子:
    DECLARE
       v_char VARCHAR2(20);
    BEGIN
       CASE 'l'
       WHEN 'A'
       THEN v_char:='优秀';
       WHEN 'B'
       THEN v_char:='良好';
       WHEN 'C'
       THEN v_char:='差劲';
       ELSE
       v_char:='无语';
       END CASE;
        DBMS_OUTPUT.PUT_LINE(v_char);
    END;
    --格式二
    CASE
    WHEN?条件表达式1?THEN?语句段1
    WHEN?条件表达式2?THEN?语句段2
    .....
    WHEN?条件表达式n?THEN?语句段n
    [ELSE?语句段]
    END?CASE;
    --例子:
    DECLARE
       v_char VARCHAR2(20);
    BEGIN
       CASE
       WHEN 1>2
       THEN v_char:='优秀';
       WHEN 1<2
       THEN v_char:='良好';
       WHEN 1>8
       THEN v_char:='差劲';
       ELSE
       v_char:='无语';
       END CASE;
        DBMS_OUTPUT.PUT_LINE(v_char);
    END;

    2.循环控制,用于重复执行的系列语句。包括LOOP和EXIT语句,使用EXIT语句可以立即退出循环;?使用EXIT?WHEN
    语句可以根据条件结束循环。有3种类型循环,包括LOOP循环、WHILE循环、FOR循环。

    ----------1)LOOP循环语法:
    LOOP
    要执行的语句;
    EXIT?WHEN?<条件语句>??--条件满足,退出循环语句
    END?LOOP;
    --例子:
    DECLARE
       v_count NUMBER:=0;
    BEGIN
       LOOP
       v_count:=v_count+1;
       DBMS_OUTPUT.PUT_LINE(v_count);
       EXIT WHEN v_count=5;
       END LOOP;
    END;

    ----------2)WHILE循环语法:
    WHILE?<布尔表达式>?LOOP
    要执行的语句;
    END?LOOP;
    --例子:
    DECLARE
       v_count NUMBER:=0;
    BEGIN
       WHILE v_count<5 LOOP
       v_count:=v_count+1;
       DBMS_OUTPUT.PUT_LINE(v_count);
       END LOOP;
    END;

    ----------3)FOR循环语法:
    FOR?循环计数器?IN?[REVERSE]?下限?....?上限?LOOP
    要执行的语句;
    END?LOOP;?
    例子:
    DECLARE
       v_num NUMBER:=1;
    BEGIN
    FOR v_num IN REVERSE 1..10 LOOP   --reverse由大到小
       DBMS_OUTPUT.PUT_LINE(v_num);
       END LOOP;
    END;

    3.顺序控制,用于按顺序执行语句。顺序控制包括NULL语句和GOTO语句。GOTO语句不推荐使。
    NULL语句:是一个可执行语句,相当于一个占位符或不执行任何操作的空语句,可以便某些语句变得有意义,提高程
    序的可读性,保证其他语句结构的完整性和正确性。
    --例子:
    DECLARE
       v_count NUMBER :=5;
    BEGIN
       DBMS_OUTPUT.PUT_LINE('当前值为:'||v_count);
       IF v_count >= 10 THEN
         NULL;
       ELSE
         v_count := v_count +10;
       DBMS_OUTPUT.PUT_LINE('改变值为:'||v_count);
       END IF;
    END;

  • 相关阅读:
    体检前注意事项
    SSO之CAS单点登录详细搭建教程
    如何通过session控制单点登录
    谈谈防止Ajax重复点击提交
    js判断是移动端还是pc端
    HttpClient通过GET和POST获取网页内容
    HttpClient 4.x 执行网站登录并抓取网页的代码
    360每日自动签到,领取积分 (java httpclient4.x)
    Java @override报错的解决方法
    无开发经验,初学python
  • 原文地址:https://www.cnblogs.com/liuzhiw/p/8093823.html
Copyright © 2011-2022 走看看