-- 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时跳出循环。
相关推荐
从给定的文件信息中,我们可以提炼出一系列与Oracle PL/SQL相关的知识点,涉及变量声明、数据查询、条件语句、异常处理以及数据库更新等核心概念。以下是对这些知识点的详细解析: ### 1. 变量声明与赋值 在PL/SQL...
通过练习PL/SQL题目,你可以加深对这些概念的理解,提升数据库编程技能。这些题目可能涵盖以上提到的所有知识点,从简单的变量操作到复杂的存储过程设计,从基本的SQL查询到涉及游标和异常处理的问题。通过解决这些...
在本练习资料中,你可能会遇到各种SQL和PL/SQL的练习题,涵盖了从基础到高级的各种场景。比如: 1. 数据查询:练习如何使用SELECT语句进行简单的查询和复杂的联接操作。 2. 数据操作:通过INSERT、UPDATE和DELETE...
从给定文件的标题、描述、标签以及部分内容中,可以...实际文档可能包含更深入的内容、更多示例和练习,以及更加详尽的解释和说明,用以帮助开发者理解PL/SQL的各个方面的知识,并指导他们在Oracle环境中进行有效开发。
PL/SQL是Oracle数据库系统中的过程式语言,它结合了SQL的数据操作能力与结构化编程语句,使得开发者能够创建复杂的数据处理逻辑和业务规则。本资料“PL/SQL入门到精通书的源代码”是一份针对初学者到高级用户的实践...
本书是一本逐步分解的,详尽的pl/sql编程教程,使用真实场景的试验、范例和练习来介绍读者所需的pl/sql编程技能,涵盖oracle 11g的最新特性。作者的写作手法源自于在哥伦比亚大学教授pl/sql编程技术的经验,深度...
《精通PL/SQL》这本书是针对Oracle数据库系统中PL/SQL编程语言的深度解析与实践指南,主要面向希望提升在Oracle环境下使用PL/SQL技能的专业人士。PL/SQL,全称为Procedural Language/Structured Query Language,是...
PL/SQL是Oracle数据库中的一个核心组件,全称为Procedural Language/Structured Query Language,即过程化结构化查询语言。它是SQL的扩展,允许开发者在SQL的基础上添加过程化编程元素,如循环、条件判断和子程序等...
《PL/SQL精通》这本书是针对Oracle数据库管理系统中PL/SQL编程语言的深入学习指南。...书中的实例和练习将帮助读者深入理解并熟练运用PL/SQL,从而在实际工作中更有效地处理数据和构建高效的应用。
通过阅读《Oracle PL/SQL》这本书,法语读者可以系统地学习到上述内容,并通过实例和练习提升自己的编程技能。这本书将帮助读者深入理解Oracle数据库的编程精髓,提升数据库管理与应用开发的能力。
Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据库操作能力和Procedural Language的编程结构,用于在Oracle数据库环境中创建复杂的应用...通过不断练习和深入理解,你将成为一名精通Oracle PL/SQL的专业开发者。
在学习PL/SQL的过程中,建议先从基础语法入手,理解如何声明和使用变量,逐步掌握流程控制和异常处理,然后深入学习存储过程、函数和触发器的编写,最后结合实际数据库操作,练习编写复杂的PL/SQL程序。"proc"可能是...
通过本书,读者不仅能够获得丰富的理论知识,还能通过大量的实例和练习来加深对PL/SQL的理解。无论你是初学者还是有经验的开发者,都能从中受益,提升在Oracle环境下的编程技能。 在阅读《Oracle PL/SQL by Example...
### Oracle PL/SQL测试题目与知识点解析 #### 一、选择题知识点解析 **1. Oracle数据库中为新创建的表分配的初始空间通常为多大?** - **知识点解析:** Oracle数据库为新创建的表分配的空间单位是“区”(Extent...
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编程技巧。 PL/SQL是Oracle数据库的内置编程语言,它是SQL的扩展,允许开发者编写复杂的事务处理逻辑、创建自定义函数和存储过程,以及实现数据库...