`
xiaoxiong_it
  • 浏览: 130096 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

PL/SQL练习

 
阅读更多
-- Created on 2014-7-9 by GANG 
--给last_name为‘Chen’的员工工资涨10%
DECLARE
  VC_LAST_NAME   EMPLOYEES.LAST_NAME%TYPE := 'Chen';
  V_SALARY       EMPLOYEES.SALARY%TYPE;
  V_AFERT_SALARY EMPLOYEES.SALARY%TYPE;
BEGIN
  SELECT SALARY
    INTO V_SALARY
    FROM EMPLOYEES
   WHERE LAST_NAME = VC_LAST_NAME;
  DBMS_OUTPUT.PUT_LINE('last_name为Chen的员工工资为:' || V_SALARY);
  V_SALARY := V_SALARY * 1.1;
  UPDATE EMPLOYEES SET SALARY = V_SALARY WHERE LAST_NAME = VC_LAST_NAME;

  IF SQL%FOUND THEN --如果一行或者多行数据被成功修改(增、删、改)返回TRUE;
    DBMS_OUTPUT.PUT_LINE('UPDATE语句已成功执行,共修改数据条数:  ' || SQL%ROWCOUNT); --SQL%ROWCOUNT 返回被DML语句修改的记录行数;
  END IF;

  SELECT SALARY
    INTO V_AFERT_SALARY
    FROM EMPLOYEES
   WHERE LAST_NAME = VC_LAST_NAME;

  DBMS_OUTPUT.PUT_LINE('last_name为Chen的员工工资涨后为:' || V_AFERT_SALARY);
  COMMIT;
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('没有找到last_name为Chen的员工工资,请检查!');
  WHEN TOO_MANY_ROWS THEN
    DBMS_OUTPUT.PUT_LINE('存在多条last_name为Chen的员工,请检查!');
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(SQLCODE || '---' || SQLERRM);
END;

 输出结果:

last_name为Chen的员工工资为:15979.48
UPDATE语句已成功执行,共修改数据条数:  1
last_name为Chen的员工工资涨后为:17577.43

 

 

-- Created on 2014-7-9 by GANG 
--打印出员工编号为200的员工姓名
DECLARE
  C_EMPLOYEE_ID CONSTANT EMPLOYEES.EMPLOYEE_ID%TYPE := 200; --CONSTANT修饰常量,值是不可改变的。
  V_FIRST_NAME EMPLOYEES.FIRST_NAME%TYPE;
  V_LAST_NAME  EMPLOYEES.LAST_NAME%TYPE;
BEGIN
    SELECT FIRST_NAME, LAST_NAME
      INTO V_FIRST_NAME, V_LAST_NAME
      FROM EMPLOYEES
     WHERE EMPLOYEE_ID = C_EMPLOYEE_ID;

  DBMS_OUTPUT.PUT_LINE('员工编号为' || C_EMPLOYEE_ID || '的员工姓名为: ' ||
                       V_FIRST_NAME || ' ' || V_LAST_NAME);

EXCEPTION
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('不存在员工编号为' || C_EMPLOYEE_ID || '的员工信息。');
  WHEN TOO_MANY_ROWS THEN
    DBMS_OUTPUT.PUT_LINE('存在多条员工编号为' || C_EMPLOYEE_ID || '的员工信息。');
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(SQLCODE || '---' || SQLERRM);
END;

 输出结果:

员工编号为200的员工姓名为: Jennifer Whalen

 

 

 

 

记录类型练习:

-- Created on 2014-7-9 by GANG 
--练习记录类型
--创建一个图书记录类型(书号,书名),显示结果为:书号:1100 书名:VB.Net
DECLARE
  -- Local variables here;
  TYPE BOOK_RECORD IS RECORD( --定义记录类型
    T_BOOK_ID   NUMBER := 1100, --记录成员
    T_BOOK_NAME VARCHAR2(20) := 'VB.Net');
  V_BOOK_RECORD BOOK_RECORD; --声明接收数据的变量 

  TYPE EMPLOYEE_RECORD IS RECORD( --定义记录类型
    T_EMPLOYEE_ID EMPLOYEES.EMPLOYEE_ID%TYPE, --记录成员
    T_SALARY      EMPLOYEES.SALARY%TYPE);
  V_EMPLOYEE_RECORD EMPLOYEE_RECORD; --声明接收数据的变量

  VC_LAST_NAME EMPLOYEES.LAST_NAME%TYPE := 'Chen';

  --%ROWTYPE返回一个记录类型,这个记录类型中域类型与定义该记录的表中各列的类型相同。
  V_EMPLOYEE_RECORD_TABLE EMPLOYEES%ROWTYPE;

BEGIN
  -- Test statements here
  DBMS_OUTPUT.PUT_LINE('创建图书记录类型(书号,书名)为: 书号:' || V_BOOK_RECORD.T_BOOK_ID ||
                       ' 书名:' || V_BOOK_RECORD.T_BOOK_NAME);

  --在select into语句中使用plsql记录。
  --如果选择列表包含的多个列和表达式,并且使用标量接收数据,就需要定义多个标量,
  --如果使用plsql记录接收数据就只需要定义一个记录变量即可,从而简化了数据的处理。                     
  SELECT EMPLOYEE_ID, SALARY
    INTO V_EMPLOYEE_RECORD
    FROM EMPLOYEES
   WHERE LAST_NAME = VC_LAST_NAME;

  DBMS_OUTPUT.PUT_LINE('员工姓名为' || VC_LAST_NAME || '的员工ID为:' ||
                       V_EMPLOYEE_RECORD.T_EMPLOYEE_ID || ',员工工资为:' ||
                       V_EMPLOYEE_RECORD.T_SALARY);

  SELECT *
    INTO V_EMPLOYEE_RECORD_TABLE
    FROM EMPLOYEES
   WHERE EMPLOYEE_ID = 200;

  DBMS_OUTPUT.PUT_LINE(V_EMPLOYEE_RECORD_TABLE.EMPLOYEE_ID || '-' ||
                       V_EMPLOYEE_RECORD_TABLE.FIRST_NAME || '-' ||
                       V_EMPLOYEE_RECORD_TABLE.LAST_NAME || '-' ||
                       V_EMPLOYEE_RECORD_TABLE.SALARY);

EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(SQLCODE || '---' || SQLERRM);
  
END;

 输出结果:

创建图书记录类型(书号,书名)为: 书号:1100 书名:VB.Net
员工姓名为Chen的员工ID为:110,员工工资为:15979.48
200-Jennifer-Whalen-4400

 

 

 

显示7788号员工的员工号,姓名,工资

-- Created on 2014-7-10 by GANG 
--显示7788号员工的员工号,姓名,工资
declare 
  -- Local variables here
  v_empno emp.empno%TYPE:=7788;
  v_ename emp.ename%TYPE;
  v_sal emp.sal%TYPE;
begin
  SELECT ename, sal 
  INTO v_ename,v_sal 
  FROM emp 
  WHERE empno=v_empno;
  
  DBMS_OUTPUT.PUT_LINE('7788号员工的员工号:'||v_empno||',姓名:'||v_ename||',工资:'||v_sal); 
  
  EXCEPTION
    WHEN no_data_found THEN 
      DBMS_OUTPUT.PUT_LINE('不存在7788号员工'); 
    WHEN too_many_rows THEN
      DBMS_OUTPUT.PUT_LINE('存在多条7788号员工数据'); 
    WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE(SQLCODE ||'--'||SQLERRM); 
end;

 输出结果:

7788号员工的员工号:7788,姓名:SCOTT,工资:3000

 

 可变数据练习:

-- Created on 2014-7-10 by GANG 
--可变数组练习
--格式:TYPE  type_name IS VARRAY (maximum_size) OF element_type [NOT NULL] 
--  type_name是新可变长数组类型的类型名。
--  maximum_size是一个指定可变数组中元素最大数目的整数。
--  element_type是一个PL/SQL标量、记录或对象类。
--  NOT NULL子串表示集合中的每一个元素都必须有值
--例如: type numberlist is varray(10) of number(5);
--       type recordlist is varray(5)  of dept%rowtype;

DECLARE
  TYPE STRINGS IS VARRAY(6) OF VARCHAR2(10);
  V_STRING_LIST STRINGS := STRINGS('aa', 'bb', 'cc', 'dd', 'ee'); --初始化
  I             INTEGER := 1;
BEGIN

  V_STRING_LIST.EXTEND; --数组末尾添加一个元素
  V_STRING_LIST(6) := 'extended';
  V_STRING_LIST.TRIM; --数组末尾删除一个元素。
  DBMS_OUTPUT.PUT_LINE('strings可变数组的长度为:' || V_STRING_LIST.COUNT);
  /*LOOP --简单循环,必须以子句EXIT WHEN 结束循环
    DBMS_OUTPUT.PUT_LINE('strings可变数组的第' || I || '位的值为:' || V_STRING_LIST(I));
    I := I + 1;
    EXIT WHEN I > V_STRING_LIST.COUNT;--EXIT WHEN 子句是必须的,否则循环将无法停止。
  END LOOP;*/

  /*WHILE i<=V_STRING_LIST.count LOOP --WHILE循环,可以使用EXIT WHEN 结束循环
    DBMS_OUTPUT.PUT_LINE('strings可变数组的第' || I || '位的值为:' || V_STRING_LIST(I));
    I := I + 1;
  END LOOP;*/

  FOR I IN 1 .. V_STRING_LIST.COUNT LOOP
    --FOR循环,‘1 .. V_STRING_LIST.COUNT’是FOR循环的范围。
    DBMS_OUTPUT.PUT_LINE('strings可变数组的第' || I || '位的值为:' ||
                         V_STRING_LIST(I));
  END LOOP;

EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(SQLCODE || '--' || SQLERRM);
END;

 

输出结果:

strings可变数组的长度为:5
strings可变数组的第1位的值为:aa
strings可变数组的第2位的值为:bb
strings可变数组的第3位的值为:cc
strings可变数组的第4位的值为:dd
strings可变数组的第5位的值为:ee

 

 

GOTO练习:

-- Created on 2014-7-11 by GANG 
-- GOTO语句
-- GOTO   label;
-- <<label>> /*标号是用<< >>括起来的标识符 */ 
DECLARE
  -- Local variables here
  -- I INTEGER;
BEGIN

  FOR I IN 1 .. 10 LOOP
    DBMS_OUTPUT.PUT_LINE('当前i值为:' || I);
    IF I > 5 THEN
      GOTO ENDOFLOOP;
    END IF;
  END LOOP;

  <<ENDOFLOOP>>
  DBMS_OUTPUT.PUT_LINE('当i大于5时跳出循环。');
EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(SQLCODE || '--' || SQLERRM);
END;

 

输出结果:

当前i值为:1
当前i值为:2
当前i值为:3
当前i值为:4
当前i值为:5
当前i值为:6
当i大于5时跳出循环。

 

分享到:
评论

相关推荐

    PL/SQL 练习

    从给定的文件信息中,我们可以提炼出一系列与Oracle PL/SQL相关的知识点,涉及变量声明、数据查询、条件语句、异常处理以及数据库更新等核心概念。以下是对这些知识点的详细解析: ### 1. 变量声明与赋值 在PL/SQL...

    pl/sql 练习题.

    通过练习PL/SQL题目,你可以加深对这些概念的理解,提升数据库编程技能。这些题目可能涵盖以上提到的所有知识点,从简单的变量操作到复杂的存储过程设计,从基本的SQL查询到涉及游标和异常处理的问题。通过解决这些...

    Oracle SQL PL/SQL 练习资料

    在本练习资料中,你可能会遇到各种SQL和PL/SQL的练习题,涵盖了从基础到高级的各种场景。比如: 1. 数据查询:练习如何使用SELECT语句进行简单的查询和复杂的联接操作。 2. 数据操作:通过INSERT、UPDATE和DELETE...

    PL/SQL开发文档1

    从给定文件的标题、描述、标签以及部分内容中,可以...实际文档可能包含更深入的内容、更多示例和练习,以及更加详尽的解释和说明,用以帮助开发者理解PL/SQL的各个方面的知识,并指导他们在Oracle环境中进行有效开发。

    PL/SQL入门到精通书的源代码

    PL/SQL是Oracle数据库系统中的过程式语言,它结合了SQL的数据操作能力与结构化编程语句,使得开发者能够创建复杂的数据处理逻辑和业务规则。本资料“PL/SQL入门到精通书的源代码”是一份针对初学者到高级用户的实践...

    oracle pl/sql 实例精解(中文原书第4版)

    本书是一本逐步分解的,详尽的pl/sql编程教程,使用真实场景的试验、范例和练习来介绍读者所需的pl/sql编程技能,涵盖oracle 11g的最新特性。作者的写作手法源自于在哥伦比亚大学教授pl/sql编程技术的经验,深度...

    精通pl/sql

    《精通PL/SQL》这本书是针对Oracle数据库系统中PL/SQL编程语言的深度解析与实践指南,主要面向希望提升在Oracle环境下使用PL/SQL技能的专业人士。PL/SQL,全称为Procedural Language/Structured Query Language,是...

    pl/sql例题代码pl/sql例题代码pl/sql例题代码

    PL/SQL是Oracle数据库中的一个核心组件,全称为Procedural Language/Structured Query Language,即过程化结构化查询语言。它是SQL的扩展,允许开发者在SQL的基础上添加过程化编程元素,如循环、条件判断和子程序等...

    pl/sql精通

    《PL/SQL精通》这本书是针对Oracle数据库管理系统中PL/SQL编程语言的深入学习指南。...书中的实例和练习将帮助读者深入理解并熟练运用PL/SQL,从而在实际工作中更有效地处理数据和构建高效的应用。

    oracle_oracle_oraclepl/sql_

    通过阅读《Oracle PL/SQL》这本书,法语读者可以系统地学习到上述内容,并通过实例和练习提升自己的编程技能。这本书将帮助读者深入理解Oracle数据库的编程精髓,提升数据库管理与应用开发的能力。

    oracle pl/sql实例精讲student数据库模式数据和表脚本

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据库操作能力和Procedural Language的编程结构,用于在Oracle数据库环境中创建复杂的应用...通过不断练习和深入理解,你将成为一名精通Oracle PL/SQL的专业开发者。

    PL/SQL学习资料

    在学习PL/SQL的过程中,建议先从基础语法入手,理解如何声明和使用变量,逐步掌握流程控制和异常处理,然后深入学习存储过程、函数和触发器的编写,最后结合实际数据库操作,练习编写复杂的PL/SQL程序。"proc"可能是...

    Oracle PL/SQL by Example(4th Edition)

    通过本书,读者不仅能够获得丰富的理论知识,还能通过大量的实例和练习来加深对PL/SQL的理解。无论你是初学者还是有经验的开发者,都能从中受益,提升在Oracle环境下的编程技能。 在阅读《Oracle PL/SQL by Example...

    oracle PL/SQL测试题目和详细答案

    ### Oracle PL/SQL测试题目与知识点解析 #### 一、选择题知识点解析 **1. Oracle数据库中为新创建的表分配的初始空间通常为多大?** - **知识点解析:** Oracle数据库为新创建的表分配的空间单位是“区”(Extent...

    PL/SQL 的函数与存储过程练习

    PL/SQL 的函数与存储过程练习 PL/SQL 的函数与存储过程练习

    pl/sql小练习,很难得哦,有式样

    在这个"pl/sql小练习"项目中,你将有机会深入理解并实践PL/SQL的用法。 1. PL/SQL基础: PL/SQL是由PL(过程语言)和SQL组成,它允许你在单一的环境中编写存储过程、函数、触发器等。PL/SQL的结构通常包括声明部分...

    Oracle数据库SQL和PL/SQL实例教程

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统之一,SQL(结构化查询语言)是与所有关系数据库进行交互的标准语言,而PL/SQL是Oracle数据库特有的编程语言,它扩展了SQL的功能,使得数据库管理、开发和维护...

    Oracle PL/SQL程序设计(第5版)源代码

    这本书的源代码提供了丰富的示例和练习,帮助读者理解和掌握PL/SQL编程技巧。 PL/SQL是Oracle数据库的内置编程语言,它是SQL的扩展,允许开发者编写复杂的事务处理逻辑、创建自定义函数和存储过程,以及实现数据库...

Global site tag (gtag.js) - Google Analytics