PLSQL编程语言基础Part01

(1)PLSQL语言简介

(2)PLSQL程序结构

(3)词法单元

(4)数据类型,变量与常量

(5)PL/SQL语句,PL/SQL结构

1、PLSQL语言简介:

(1)PLSQL在普通SQL语言基础上增加了编程语言特点

(2)把数据操作和查询组织在PL/SQL代码的过程性单元中

(3)通过逻辑判断,循环,等操作实现复杂的功能或计算

2、PLSQL程序结构

(1)PL/SQL块的组成

一个完整的PL/SQL块由三部分组成:

DECLARE

--声明部分,主要用于声明变量常量,数据类型,游标异常处理名称以及本地子程序定义等

BEGIN

--可执行部分,是PL/SQL块的功能实现部分,该部分通过变量赋值流程控制,数据查询,数据操纵,数据定义,事务控制,游标处理等实现块的功能

EXCEPTION

--处理执行过程中出现的异常

END

(2)PL/SQL块的执行:

PL/SQL块的执行通过“/”执行

(3)注意事项:

执行部分是必须的,声明和异常部分是可选的,可以在一个块的执行部分或异常处理部分嵌套其他PL/SQL块,所有PL/SQL块都是以end;结束,

(4)PL/SQL块的分类

匿名块、命名块

匿名块(执行一次的块,动态生成,执行一次,不能由其他应用程序调用)

命名块(一次编译可多次执行的PL/SQL程序,包括函数,存储过程,包、触发器等,它们编译后放置在服务器中,由应用程序或系统在特定条件下调用执行)

3、词法单元:

字符集、标识(zhi)符、分隔符、常量值、注释

(1)字符集:PL/SQL字符集不区分大小写,但是由单引号引起来的字符串和格式化后的日期除外

(2)标识符:用于定义PL/SQL变量,常量,异常,游标名称,游标变量,参数,子程序名称,和其他的程序单元名称等。

标识符以字母开头,后可跟字母,数字,$, #,或者是下划线,最大长度为30个字符,且所有字符均为有效

(3)分隔符:字符串连接符  ||

 

(4)常量值:

字符型,布尔型,数字型,日期型

(5)注释:

单行注释   --

多行注释  /**/

4、数据类型,变量与常量

数据类型

 

变量与常量的定义:

(1)每行只能定义一个常量或者变量

(2)加上关键字constant,表示定义的是一个常量,必须为它赋初值

(3)定义变量时使用了no null关键字,则必须为它赋初值

(4)变量没有赋初值时默认为null

(5)使用default或者”:=”运算符进行变量初始化

注意:

要在SQL *PLUS环境中看到dbms.output.put_line方法的输出结果,必须将环境变量设置成set serveroutput on;

5、PL/SQL语句

(1)PL/SQL执行采用早期绑定,即在编译阶段进行绑定,识别程序中标识符的位置,

检查用户权限,数据库对象等信息,因此,在PL/SQL语句中只允许出现:

--select

--DML(UPDATE/DELETE/INSERT)

--事务控制语句(commit,rollback,savepoint)

注意:DDL语句不能直接使用

(2)select…..into….

使用select….into语句可以将查询到的结果存储到一个某种数据类型的变量中

6、实例练习:

1、编写PL/SQL语句块,使用scott用户下的emp表,根据输入的员工号查询该员工的姓名和工资并输出,如果员工号不正确,则给出提示。

DECLARE
  V_EMPNO SCOTT.EMP.EMPNO%TYPE;
  V_SAL SCOTT.EMP.SAL%TYPE;
  V_ENAME SCOTT.EMP.ENAME%TYPE;
BEGIN
  V_EMPNO :=&X;
  SELECT SCOTT.EMP.ENAME,SCOTT.EMP.SAL INTO V_ENAME,V_SAL
  FROM SCOTT.EMP
  WHERE SCOTT.EMP.EMPNO=V_EMPNO;
  DBMS_OUTPUT.PUT_LINE(chr(10)||'员工姓名:'||V_ENAME||chr(10)||'员工工资:'||V_SAL);
EXCEPTION
  WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('查找不到数据!');
END;
/

2、编写PL/SQL语句块,使用scott用户下的emp表,根据输入的员工号查询该员工的所在部门,所在部门平均工资,总人数并输出,如果员工号不正确,则给出提示。

DECLARE
  V_EMPNO SCOTT.EMP.EMPNO%TYPE;
  V_SAL SCOTT.EMP.SAL%TYPE;
  V_SUM NUMBER(4);
  V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
BEGIN
  BEGIN
    V_EMPNO:=&x;
    SELECT SCOTT.EMP.DEPTNO INTO V_DEPTNO
    FROM SCOTT.EMP
    WHERE SCOTT.EMP.EMPNO=V_EMPNO;
  END;
    SELECT AVG(SCOTT.EMP.SAL),COUNT(SCOTT.EMP.DEPTNO) INTO V_SAL,V_SUM
    FROM SCOTT.EMP
    WHERE SCOTT.EMP.DEPTNO = V_DEPTNO;
    DBMS_OUTPUT.PUT_LINE(chr(10)||'所在部门:'||V_DEPTNO||chr(10)||'平均工资:'||V_SAL||chr(10)||'总人数:'||V_SUM);
EXCEPTION
  WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('查找不到数据!');
END;
/

/*--------------查询结果带部门名称,使用了SCOTT用户下的DEPT表-------------------------*/

DECLARE
  V_DNAME SCOTT.DEPT.DNAME%TYPE;
  V_EMPNO SCOTT.EMP.EMPNO%TYPE;
  V_SAL SCOTT.EMP.SAL%TYPE;
  V_SUM NUMBER(4);
  V_DEPTNO SCOTT.EMP.DEPTNO%TYPE;
BEGIN
  BEGIN
    V_EMPNO:=&x;
    SELECT SCOTT.EMP.DEPTNO INTO V_DEPTNO
    FROM SCOTT.EMP
    WHERE SCOTT.EMP.EMPNO=V_EMPNO;
  END;
    SELECT AVG(SCOTT.EMP.SAL),COUNT(SCOTT.EMP.DEPTNO) INTO V_SAL,V_SUM
    FROM SCOTT.EMP
    WHERE SCOTT.EMP.DEPTNO = V_DEPTNO;
  BEGIN  
    SELECT SCOTT.DEPT.DNAME INTO V_DNAME
    FROM SCOTT.DEPT
    WHERE SCOTT.DEPT.DEPTNO=V_DEPTNO;
  END;
    DBMS_OUTPUT.PUT_LINE(chr(10)||'所在部门号:'||V_DEPTNO||chr(10)||'所在部门名称:'||V_DNAME||chr(10)||'平均工资:'||V_SAL||chr(10)||'总人数:'||V_SUM);
EXCEPTION
  WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('查找不到数据!');
END;
/

 

feihu分享到:

          

You may also like...

Scroll Up