*=*=*=*=*=*=*=*=*=*=>141020START<=*=*=*=*=*=*=*=*=*=*
-- =====<PL/SQL中的数据类型>===== --
-- 包含标量类型、LOB类型、属性类型
-- 标量类型包含:数字、字符、布尔型、日期时间、参照类型
-- LOB类型包含:BFILE、BLOB、CLOB、NCLOB
-- 复合类型包含:PL/SQL记录、PL/SQL表
-- 2.LOB类型
==============================
-- =====<PL/SQL支持的流程控制结构>===== --
-- 1.条件控制
-- 1.条件语句(分支)
-- if语句
if Conditions
then
CodeExecution
end if;
if Conditions
then
CodeExecution
else CodeExecution
end if;
if Conditions
then
CodeExecution
else if Conditions
then
CodeExecution
else CodeExecutio
end if;
end if;
例:简单的条件判断 if - then
编写一个过程,可以输入一个雇员名,如果该雇员的工资低于2000,就给该员工工资增加10%
create or replace procedure pro_conditions(v_ename in varchar2) is v_sal emp.sal%type; begin select sal into v_sal from emp where ename=v_ename; if v_sal<2000 then v_sal:=v_sal+v_sal*0.1; update emp set sal=v_sal where ename=v_ename; end if; end;
例:二重条件分支if - then
编写一个过程,可以输入一个雇员名,如果该雇员的补助不是0,就在原来的基础上增加100
如果为0就把补助设为200
create or replace procedure pro_05(v_ename varchar2) is v_comm emp.comm%type; begin select nvl(comm,0) into v_comm from emp where ename=v_ename; dbms_output.put_line('奖金:'||v_comm); if v_comm!=0 then v_comm:=v_comm+100; else v_comm:=200; end if; update emp set comm=v_comm where ename=v_ename; end;
例:多重条件分支if - then
编写一个过程,可以输入一个雇员编号,给职位是PRESIDENT的员工工资增加1000
职位是MANAGER的员工工资加500
其他员工工资增加200
create or replace procedure pro_06(v_empno number) is v_job emp.job%type; v_sal emp.sal%type; begin select job,sal into v_job,v_sal from emp where empno=v_empno; if v_job='PRESIDENT' then v_sal:=v_sal+1000; else if v_job='MANAGER' then v_sal:=v_sal+500; else v_sal:=v_sal+200; end if; end if; update emp set sal=v_sal where empno=v_empno; end;
-- case语句
例:多重条件分支if - then
编写一个过程,可以输入一个雇员编号,给职位是PRESIDENT的员工工资增加1000
职位是MANAGER的员工工资加500
CLERK +300
ANALYST +200
SALESMAN +100
create or replace procedure pro_07(v_empno number) is v_job emp.job%type; v_sal emp.sal%type; begin select job,sal into v_job,v_sal from emp where empno=v_empno; case v_job when 'PRESIDENT' then v_sal:=v_sal+1000; when 'MANAGER' then v_sal:=v_sal+500; when 'CLERK' then v_sal:=v_sal+300; when 'ANALYST' then v_sal:=v_sal+200; when 'SALESMAN' then v_sal:=v_sal+100; else null; end case; update emp set sal=v_sal where empno=v_empno; end;
-- 循环控制
-- LOOP语句
-- loop
-- while loop
-- for loop
LOOP循环(相当于Java中do{}while();)
-- 创建一个新表
create table tab_user( user_no number(10), user_name varchar2(20)); create or replace procedure pro_08(v_name varchar2) is -- 定义变量,并赋初值 v_num tab_user.user_no%type:=1; begin loop insert into tab_user values(v_num,v_name); v_num:=v_num+1; exit when v_num=11; end loop; end;
while循环
问题:输入用户名,循环添加10个用户到表中,编号从11开始增加
create or replace procedure pro_10(v_name varchar2) is -- 定义变量,并赋初值 v_num tab_user.user_no%type:=11; begin while v_num<21 loop insert into tab_user values(v_num,v_name); v_num:=v_num+1; end loop; end;
for循环
create or replace procedure pro_10(v_name varchar2) is begin for i in 21..30 loop insert into tab_user values(i,v_name); end loop; end;
-- 顺序控制
-- goto语句
例:
declare i number(20):=1; begin loop dbms_output.put_line('i=>'||i); i:=i+1; if i=10 then goto my_tag; end if; end loop; dbms_output.put_line('循环结束'); <<my_tag>> dbms_output.put_line('循环'); end;
-- =====<PL/SQL中的异常处理>===== --
-- case_not_found=>当case的条件和when项不匹配时
declare begin case '&aa' when 1 then dbms_output.put_line('杨亦风'); when 2 then dbms_output.put_line('七夜'); end case; exception when case_not_found then dbms_output.put_line('都已经飞升到魔界'); end;
-- cursor_already_open=>游标已打开
declare type my_crusor is ref cursor; -- 打开前要先声明 ms my_crusor; begin open ms for select * from emp; open ms for select * from emp; exception when cursor_already_open then dbms_output.put_line('游标已打开!'); end;
-- =====<PL/SQL游标>===== --
-- cursor
隐式游标 =>使用DML语句时自动创建
declare begin update emp set sal=3000 where ename='SMITH'; if sql%found then dbms_output.put_line('有'||sql%rowcount||'个数据被更新'); else dbms_output.put_line('没有数据受到影响'); end if; end;
显示游标 =>用来存放查询到的结果
-- 使用%rowtype来存放查询语句返回的一条数据
/*
declare
my_row emp%rowtype;
begin
end;
*/
declare
my_row emp%rowtype;
begin
end;
-- 要接收返回的多条数据,必须使用游标
declare begin cursor my_cursor is select ename,job,sal from emp where deptno=&aa; while then end;
*=*=*=*=*=*=*=*=*=*=>141020END<=*=*=*=*=*=*=*=*=*=*
相关推荐
PL/SQL(Procedural Language/Structured Query Language)是Oracle数据库中的过程式编程语言,它结合了SQL查询语句和传统的过程式编程元素,使得在数据库管理中进行复杂逻辑处理成为可能。以下是对PL/SQL的学习笔记...
Pl/SQL简介 控制结构 复合数据类型 游标 异常 创建存储过程 函数的概念 包的概念 触发器概念
PL/SQL,全称是Procedural Language/Structured Query Language,是Oracle数据库提供的一种结合了SQL语言和过程式编程的编程环境。它扩展了SQL的功能,使得开发人员能够编写复杂的数据库应用程序,处理事务、实现...
ORACLE PL/SQL是从入门到精通的专业知识,涵盖了数据库开发与管理的多个方面,包括触发器、过程、函数、软件包、异常处理、游标、循环、分支、变量使用、数据库安装等关键知识点。 触发器是数据库中用来保证数据...
PL/SQL是Oracle公司开发的一种过程化SQL扩展,它是Oracle数据库的重要组成部分,用于在数据库服务器上编写存储过程、函数、触发器、包等可执行代码。PL/SQL可以处理复杂的数据操作和业务逻辑,支持编程结构如循环、...
PL/SQL是Oracle数据库中的一个关键组件,它结合了SQL(结构化查询语言)的查询能力与过程性编程语言的功能,使得开发者能够编写复杂的数据库应用程序。这本“PL/SQL超级笔记”显然是针对初学者设计的,旨在帮助他们...
### PL/SQL培训笔记知识点概览 #### 一、PL/SQL简介与结构 PL/SQL,即Procedural Language for SQL,是Oracle数据库的一种内嵌式编程语言,结合了SQL的数据操作能力和过程化编程语言的控制结构。它提供了一种高效、...
### PL/SQL听课笔记 #### 一、PL/SQL简介 **PL/SQL**(Procedural Language for SQL)是一种专门为Oracle数据库设计的过程化语言扩展。它是在标准SQL基础上增加了一系列高级编程特性,如变量、控制结构、函数、...
PL/SQL,全称为Procedural Language/Structured Query Language,是Oracle数据库的一种扩展,它将SQL(结构化查询语言)与过程式编程语言相结合,为数据库管理提供了强大的编程能力。以下是对PL/SQL的一些核心知识点...
Oracle笔记(PL-SQL)是关于数据库管理和编程的一个重要主题,主要聚焦于Oracle数据库系统中的结构化查询语言(SQL)的扩展——PL/SQL。PL/SQL是一种过程化语言,结合了SQL的功能,使得开发者能够编写复杂的数据库应用...
- **REF CURSOR(游标变量)**:允许在存储过程和函数中返回动态查询的结果集。可以引用系统类型的游标`SYS_REFCURSOR`。 5. **变量声明**: - 可以声明变量并指定是否可为空、默认值等,如`v_date date not null...
Oracle PL/SQL编程是Oracle数据库开发中的核心技能之一,它是一种强大的过程式语言,用于在Oracle环境中编写存储过程、函数、触发器等数据库程序。第五版的《Oracle PL SQL Programming》是一本深入学习PL/SQL的权威...
Oracle PL/SQL是一种强大的数据库编程语言,用于在Oracle数据库中编写存储过程、函数、触发器等。以下是对标题和描述中涉及的知识点的详细说明: 1. **语句块结构**: - `DECLARE`:声明区域,用于定义变量、游标...
Oracle SQL编程是数据库管理的重要组成部分,特别是在Oracle数据库系统中,SQL与PL/SQL结合使用,大大增强了数据库操作的灵活性和效率。以下是一些关键知识点的详细说明: 1. **PL/SQL**: PL/SQL(Procedural ...
本文将深入探讨从"SQL,PL/SQL学习笔记"中提取的关键知识点,帮助编程人员更好地理解和运用这两种语言。 首先,我们关注SQL并行查询。通过`ALTER SESSION ENABLE PARALLEL DMl`,我们可以开启会话的并行DML操作,这...
### Oracle 10g PL/SQL 实战笔记关键知识点解析 #### 一、PL/SQL 概述 - **PL/SQL** (Procedural Language for SQL) 是 Oracle 数据库的一种扩展,它允许用户在 SQL 的基础上进行更复杂的程序设计。 - **特性**: ...
除了上述基础内容,PL/SQL还涉及控制流语句(如IF-THEN-ELSE、CASE、FOR循环)、游标、记录、包(Package)、存储过程、函数等高级主题。这些内容构成了PL/SQL的强大功能,使得开发人员能够创建高效、可靠的数据库...