/*
=============================================================================
pl/sql编程
=============================================================================
*/
--pl/sql块的结构
declare
--声明部门:在此声明pl/sql用到的变量、类型以及游标,以及局部的存储过程和函数
begin
--执行部分:过程及sql语句,即程序的组成部分
exception
--异常处理部分:错误处理
end;
--例子
create table toys
(
id number(20),
name varchar2(50),
price number(5,2),
sal_date date
)
insert into toys values(1,'张三',525,sysdate)
insert into toys values(2,'李四',525,'2016-05-06');
select * from toys;
declare
v_name varchar2(20);
v_price number;
begin
select name,price into v_name,v_price from toys where id=1;
dbms_output.put_line('名字:'||v_name||',价格'||v_price);
end;
10
/*
type和rowtype
-------------------------------------------------
*/
declare
-- v_name varchar2(25);
-- v_name1 toys.name%type; --返回一个
v_name1 toys%rowtype; --返回多个
e_ronull exception;--声明异常
begin
select * into v_name1 from toys where id=1;
dbms_output.put_line('名字:'||v_name1.name);
exception
when dlp_val_on_index then
dbms_output.put_line('将重复键插入id列');
end;
--税点
declare
v_start constant number:=3500; --声明常量
begin
--sql语句
end
--常量和变量的声明
变量名称 pl/sql的数据类型(大小):=init_value;
eg:variable_name constant data_type:=value;
--应用实例
declare
v_ename varchar2(20);
v_rate number(7,2);
c_rate_incr constant number(7,2):=1.10;
begin
--方法一:通过select into 赋值
select ename,sal* c_rate_incr into v_ename,v_rate from employee where empno='7788';
--方法二:通过赋值操作符“:=”给变量赋值
v_ename:='scott';
end;
--使用序列赋值
v_no:=emp_seq.nextval;
----------------------实例2---------------------------------
--根据员工编号查询员工信息
declare
v_empno employee.empno%type:=4;
v_rec employee%rowtype;
begin
select * into v_rec from employee where empno=v_empno;
dbms_output.put_line
('姓名:'||v_rec.ename||'工资:'||v_rec.sal||'工作时间:'||v_rec.hiredate);
end;
--==执行成功之后,输出:姓名:张四工资:10000工作时间:2017-02-02 00:00:00
/*
----------------------pl/sql控制语句--------------------------------
*/
--if的语法
if <布尔表达式> then
pl/sql和sql语句
end if;
------------------------
if<布尔表达式> then
pl/sql和sql语句
else
其他语句
end if;
-------------------------
if <布尔表达式> then
pl/sql语句和sql语句
elsif <其他布尔表达式> then
其他语句
elsif <其他布尔表达式> then
其他语句
else
其他语句
end if;
----注意:是elsif 不是elseif
------------------------------case的语法--------------------------
-------格式一------
case 条件表达式
when 条件表达式结果1 then
语句段1
when 条件表达式结果2 then
语句段2
when 条件表达式结果n then
语句段n
[else语句段]
end case;
-------格式二------
case
when 条件表达式1 then
语句段1
when 条件表达式2 then
语句段2
when 条件表达式n then
语句段n
else 语句段
end case;
------------------------------循环控制--------------------------
loop
要执行的语句;
exit when <条件语句> --条件满足时,退出循环语句
end loop;
---while循环语句的语法
while <布尔表达式> loop
要执行的语句;
end loop;
--for循环语句的语法
for 循环计数器 in [reverse] 下限 ...上限 loop
要执行的语句
end loop;
------------------------------实例3-------------------------
declare
v_counter number:=5;
begin
dbms_output.put_line('v_counter的当前值为:'||v_counter);
if v_counter>=10 then
null;--为了使语法变得有意义,去掉null会报语法错误
else
v_counter:=v_counter+10;
dbms_output.put_line('v_counter 的改变值为:'||v_counter);
end if;
end;
--========执行成功之后输出:v_counter的当前值为:5 v_counter 的改变值为:15
/*
=======================异常处理机制===============================
*/
--语法
begin
sequence_of_statements;
exception
when <exception_name> then
sequence_of_statements;
when others then
sequence_of_statements;
end;
----------------------------实例4------------------------------------
--查询编号为7788的雇员的福利补助(comm列)
declare
v_comm employee.comm%type;
e_comm_is_null exception ;--定义异常类型变量
begin
select comm into v_comm from employee where empno=7788;
if v_comm is null then
raise e_comm_is_null;
end if;
exception
when no_data_found then
dbms_output.put_line('雇员不存在!错误为:'||sqlcode||sqlerrm);
when e_comm_is_null then
dbms_output.put_line('该雇员无补助');
when others then
dbms_output.put_line('出现其他异常!');
end;
----================测试运行结果:雇员不存在!错误为:100ORA-01403: 未找到任何数据
--自定义异常
raise_application_error(error_number,error_message);
--实例
declare
....
begin
....
if v_com is null then
raise_application_error(-20001,'该雇员无补助');
end if;
end;
/*
====================================显示游标================================
*/
--1.声明游标
cursor cursor_name [(parameter [,parameter]...)]
[return return_type] is select_statement;
--2.打开游标
open cursor_name[(parameters)];
--3.提取游标
fetch cursor_name into variables;
--4.关闭游标
close cursor_name;
--------------------实例6------------------------
declare
name employee.ename%type;
sal employee.sal%type; --定义两个变量来存放ename和sal的内容
cursor emp_cursor is select ename,sal from employee;
begin
open emp_cursor;
loop
fetch emp_cursor into name,sal;
exit when emp_cursor%notfound;
dbms_output.put_line('第'||emp_cursor%rowcount||'个雇员:'||name|| 'oooo' || sal);
end loop;
close emp_cursor;
end;
--===执行成功输出:
/*
第1个雇员:张一3000
第2个雇员:张二5000
第3个雇员:张三8000
第4个雇员:张四10000
第5个雇员:张五6300
*/
--使用显示游标删除或者更新
cursor cursor_name id select_statement for update [of columns];
--在使用for update 子句声明游标时,可以使用下面语法更新行
update table_name set column_name=column_value where current of cursor_name;
--根据编号查询雇员的姓名
declare
v_ename varchar2(20);
begin
select ename into v_ename from employee where empno=&empno;
dbms_output.put_line('雇员的名字是:'||v_ename);
end;
select * from employee;
分享到:
相关推荐
### PL/SQL编程基础知识 #### 一、PL/SQL简介 PL/SQL(Procedural Language for SQL)是一种过程化语言,它结合了SQL的数据操纵功能和过程化语言的控制结构,使用户能够灵活地控制数据操作流程。作为Oracle数据库...
本书是一本逐步分解的,详尽的pl/sql编程教程,使用真实场景的试验、范例和练习来介绍读者所需的pl/sql编程...使用本书,读者可以快速掌握pl/sql编程基本知识,并建立工程化的概念,是市面上难得的pl/sql教程。.
PL/SQL程序的基本结构由三个部分组成: 1. **声明部分(DECLARE)**:定义变量、常量、游标、异常和局部存储过程或函数。 2. **执行部分(BEGIN...END)**:包含实际的业务逻辑和数据处理操作,可以是控制语句、SQL...
1. **PL/SQL基本概念** - **块结构**:PL/SQL代码由声明、执行和异常处理三部分组成,包括BEGIN...END块、DECLARE...BEGIN...END块以及匿名块。 - **变量和常量**:PL/SQL支持各种数据类型,如NUMBER、VARCHAR2、...
Oracle PL/SQL是一种强大的编程语言,它将数据库管理和应用程序逻辑紧密结合起来,是Oracle数据库系统中的核心组件之一。这本书“Oracle PL/SQL实例编程”显然旨在深入讲解如何利用PL/SQL进行实际开发工作,通过实例...
Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与PL的程序设计特性,是Oracle数据库系统中用于创建存储过程、函数、触发器和包的主要工具。在这个"Oracle PL/SQL实战(待续)"的主题中,我们将深入...
PL/SQL是Oracle数据库系统中的一个核心组件,全称为“Procedural Language/Structured Query Language”,它是SQL的扩展,增加了编程元素,使得开发者能够编写存储过程、函数、触发器等数据库应用程序。这篇博客主要...
《精通PL/SQL》这本书是针对Oracle数据库系统中PL/SQL编程语言的深度解析与实践指南,主要面向希望提升在Oracle环境下使用PL/SQL技能的专业人士。PL/SQL,全称为Procedural Language/Structured Query Language,是...
总而言之,《精通Oracle 10g PL/SQL编程》是一本面向数据库开发人员和DBA的专业书籍,它不仅涵盖了PL/SQL编程的基本概念和语法,还深入介绍了如何在Oracle 10g这个具体版本的数据库管理系统中高效使用PL/SQL,从而...
Oracle PL/SQL编程是...以上只是PL/SQL编程的冰山一角,实际使用中还包括流程控制语句、游标处理、动态SQL、包、对象类型等更高级的概念。学习PL/SQL需要不断实践和深入研究,才能充分发挥其在数据库管理中的作用。
《Oracle Database 10g PL/SQL编程》一书由Scott Urman、Ron Hardman和Michael McLaughlin共同编写,由McGraw-Hill/Osborne出版,是Oracle数据库编程领域的一部经典之作。该书深入浅出地介绍了Oracle Database 10g...
Oracle PL/SQL编程是Oracle数据库系统中的一个核心组成部分,它扩展了SQL的语法,使得数据库管理及应用程序开发更具灵活性和可编程性。PL/SQL融合了SQL查询和控制流语句,提供了处理复杂业务逻辑的能力。 PL/SQL的...
PL/SQL支持变量、常量、条件语句(如IF-THEN-ELSIF-ELSE)、循环(如FOR、WHILE)、异常处理(如EXCEPTION)等基本编程元素。 在Oracle PL/SQL中,我们可以通过使用SQL语句来与数据库进行交互,例如SELECT用于查询...
《Oracle PL/SQL专家指南-高级PL/SQL解决方案的设计与开发》是一本深入探讨Oracle数据库中的PL/SQL编程的专业书籍。PL/SQL是Oracle数据库特有的编程语言,它结合了SQL的查询能力与过程式编程语言的功能,使得数据库...
《精通Oracle 10g PL/SQL编程》是一本针对Oracle数据库系统中PL/SQL编程语言的深度解析书籍。Oracle 10g是Oracle数据库的一个重要版本,它提供了丰富的功能和改进,使得PL/SQL这一数据库编程语言在性能、可维护性和...
PL/SQL还提供了一些更高级的编程概念,例如存储过程和函数、包、触发器等。存储过程和函数是程序模块化的重要工具,它们能够在数据库服务器上执行预定义的任务。包则提供了一种封装过程和函数的方法,有助于管理大型...
根据提供的文件信息,以下是对...由于文件提供的内容有限,无法提供更深入的知识点细节,但是上述内容覆盖了Oracle 11g PL/SQL编程的基本和高级主题。读者可以通过阅读完整的书籍来获得更全面、系统的学习和理解。
综上所述,Oracle PL/SQL编程详解系统地讲解了PL/SQL语言的核心概念、结构以及在实际开发中的应用。它对于希望深入了解Oracle数据库编程和提高数据库应用开发效率的开发者来说是一份宝贵的资料。掌握PL/SQL的特点和...
### Oracle PL/SQL编程基础详解 #### 一、PL/SQL概述 PL/SQL,即Procedural Language for SQL,是Oracle数据库专有的扩展性语言,用于增强SQL的功能,使其具备编程语言的能力。通过PL/SQL,开发者可以编写复杂的...
Oracle PL/SQL是一种强大的编程语言,它将SQL与过程编程语言的特性相结合,为数据库开发提供了丰富的功能。...通过深入学习这本教材,你将能够掌握Oracle PL/SQL编程,从而有效地设计和实现数据库解决方案。