网易云歌单

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;

 

posted @ 2017-12-23 16:52  给我唆一口  阅读(440)  评论(0编辑  收藏  举报