Pl/SQL简介

  提高应用程序的运行性能,

  提供模块化的程序设计,

  自定义标示符,  

  具有过程语言控制结构,  

  良好的兼容性,

  处理运行错误.

Pl/SQL语言基础

  sql是关系数据库的基本操作语言.

    sql语言包括:数据查询,数据操纵,事物控制,数据定义和数据控制语言登5个部分.

Pl/SQL块

  Pl/SQ的基本单元

DECLARE
/*定义部分-变量,常量,游标,列解*/
BEGIN
/*定义部分-PL/SQL语句*/
EXCEPTION
/*异常处理部分-处理运行错误*/
END;/*结束块标志*/

注意:"="表示判断,":="赋值,"||"连接.

标量类型

  VARCHAR2(n),CHAR(n),NUMBER(p,s),DATE,TIMESTAMP,BOOLEAN

if语句

-- 结构:   if   条件  then    = 表示判断
-- end if;
select * from scott.emp; declare
v_name varchar(30);
begin
select scott.emp.ename into v_name from scott.emp where scott.emp.empno = 7499;
if v_name = 'SMITH' then
begin
dbms_output.put_line('没有该员工');
end;
elsif xxx then
begin
end;
else
dbms_output.put_line('员工姓名' || v_name);
end if;
end;

CASE语句

-- case
switch(xxx) {
case '':
break;
default:
} case xxx
when xxx then
-- 处理语句
when xxx then
--
else
end case; select ename,
case deptno
when 10 then
'综合部门'
when 20 then '技术部门'
when 30 then '市场部门'
else '其他部门'
end case from scott.emp;

循环语句(loop,while,for)

  条件:循环初始值,循环结束之,改变值. 

-- 循环  loop  while  for    循环起始值    循环结束条件    改变值
declare
i int := 0;
begin
loop
i := i + 1;
dbms_output.put_line(i);
exit when i = 10;
end loop;
end; declare
i int := 0;
begin
while i < 101 loop
i := i + 1;
dbms_output.put_line(i);
end loop;
end; declare
begin
for i in reverse 1..101 loop
dbms_output.put_line(i);
end loop;
end; select emp.ename from emp;
-- 类型 存储更多的数据 %type %rowtype record(自定义类型) table varray
declare
v_name emp.ename%type;
begin
select emp.ename into v_name from emp where empno = 7369;
dbms_output.put_line(v_name);
end; declare
v_name dept%rowtype;
begin
select * into v_name from dept where deptno = 10;
dbms_output.put_line(v_name.deptno || v_name.dname);
end; declare
type r_name is record (
v_dname dept.dname%type,
v_loc dept.loc%type
);
rec_v r_name;
begin
select dname,loc into rec_v.v_dname,rec_v.v_loc from dept where deptno = 10;
dbms_output.put_line(rec_v.v_dname || rec_v.v_loc);
end; select * from dept

异常处理

-- 异常处理

exception
when 异常 then
--
when 异常 then when others then -- 预定义异常
declare
v_name emp.ename%type;
begin
select to_number(ename) into v_name from emp where empno = &empno;
exception
when no_data_found then -- ora-01403
dbms_output.put_line('没有数据');
when invalid_number then -- ora-01403
dbms_output.put_line('转换异常');
end; -- 非预定义异常 + 自定义异常
declare
myexception exception;
v_name emp.ename%type;
pragma exception_init(myexception,-30000);
begin
select ename into v_name from emp where empno = &empno;
if v_name = 'SMITH' then
raise myexception;
end if;
exception
when myexception then -- ora-30000
dbms_output.put_line('SMITH不能更改');
end; select * from emp;

 游标

-- 游标   如果你在pl/sql  操作多行数据   必须游标
-- 1定义游标 2.打开游标 3 提取数据 4关闭游标
declare
cursor cus_emp is select * from emp;
v_rowemp emp%rowtype;
v_count int;
begin
select count(*) into v_count from emp;
open cus_emp;
for i in 1..v_count
loop
fetch cus_emp into v_rowemp;
dbms_output.put_line(v_rowemp.empno || ' ' || v_rowemp.ename);
end loop;
end; declare
cursor cus_emp is select empno,ename from emp;
type record_type is record (
v_empno emp.empno%type,
v_ename emp.ename%type
);
res record_type;
v_count int;
begin
select count(*) into v_count from emp;
open cus_emp;
for i in 1..v_count
loop
fetch cus_emp into res;
dbms_output.put_line(res.v_empno || ' ' || res.v_ename);
end loop;
close cus_emp;
end; declare
cursor cus_emp(v_no emp.empno%type) is select empno,ename from emp where empno = v_no;
type record_type is record (
v_empno emp.empno%type,
v_ename emp.ename%type
);
res record_type;
v_count int;
i int := 0;
begin
open cus_emp(7369);
loop
fetch cus_emp into res;
exit when cus_emp%notfound;
dbms_output.put_line(res.v_empno || ' loop ' || res.v_ename); end loop;
close cus_emp;
end; select count(*) into v_count from emp;
open cus_emp(7369);
while i<v_count
loop
fetch cus_emp into res;
dbms_output.put_line(res.v_empno || ' while ' || res.v_ename);
i := i + 1;
end loop;
close cus_emp;

  

Oracle Pl/SQL编程基础的更多相关文章

  1. oracle PL/SQL编程基础知识

    在oracle中使用pl/sql来扩展SQL的功能,使得SQL能够更加的灵活,功能更加强大,效率更高.pl/sql让sql也能执行判断,循环等操作.主要记录一下pl/sql的基本语法和基本条件判断语句 ...

  2. Oracle PL/SQL 编程基础 实例

    create table mytest(name varchar(20),password varchar(30)); create or replace procedure sp_pro2 is  ...

  3. Oracle数据库编程:PL/SQL编程基础

    2.PL/SQL编程基础: PL/SQL块:        declare        定义部分        begin        执行部分        exception        异 ...

  4. ORACLE PL/SQL编程详解

    ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...

  5. [推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆)

    原文:[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程详解之三: PL/SQL流程控制语句(不给规则,不成方圆) ...

  6. [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)

    原文:[推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下) [推荐]ORACLE PL/SQL编程详解之一: PL/SQL 程序设计简介(千里之行,始于足下 ...

  7. [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)

    原文:[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日 ...

  8. 【PL/SQL编程基础】

    [PL/SQL编程基础]语法: declare 声明部分,例如定义变量.常量.游标 begin 程序编写,SQL语句 exception 处理异常 end: / 正斜杠表示执行程序快范例 -- Cre ...

  9. [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)

    原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天 ...

随机推荐

  1. CSS样式中字体乱码

    今天写程序时,明明设置了label标签的属性font-family:"微软雅黑"的,但是字体的显示的效果就是宋体,后来查看了一下网页源代码,结果发现设置的字体为中文的都是乱码,难怪 ...

  2. c#反序列化

    C#序列化(转载) 2011-03-15  |  凯之风  |  转藏(2) 序列化有下列要求: A> 只序列化PUBLIC的成员变量和属性 B> 类必须有默认识构造函数 C> 如果 ...

  3. 《University Calculus》-chape4-导数的应用-洛必达法则

    在求解极限的时候,我们常会遇到0/0型的不定式而无法进一步的求解极限,而洛必达法则就是用于处理这样的特定情况. 洛必达法则: 其证明过程要基于柯西中值定理(在该专栏的微分中值定理中给出). 证明:

  4. hdoj 2085 核反应堆【水】

    核反应堆 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  5. hibernate生成查询语句但查不到数据

    hibernate能够生成查询语句 说明它已经进行了查询操作 返回结果数据记录为0  很可能出现的情况 是  :该查询未未访问到指定数据库表. 当使用的数据库为oracle数据库时,你会在bean配置 ...

  6. vxworks获取系统时间编程

    #include<time.h> //头文件 unsigned int timeLen; struct timespec tp; struct tm timeBuffer; time_t ...

  7. Android为ListView的Item设置不同的布局

    MainActivity如下: package cc.testlistview; import java.util.ArrayList; import java.util.HashMap; impor ...

  8. php导出excel不断刷新缓冲区的思路(转)

    require('./db.class.php');$DB = new db();$DB->connect();//数据库链接 header("Content-Type: text/c ...

  9. 浅析mysql 共享表空间与独享表空间以及他们之间的转化

        innodb这种引擎,与MYISAM引擎的区别很大.特别是它的数据存储格式等.对于innodb的数据结构,首先要解决两个概念性的问题: 共享表空间以及独占表空间.什么是共享表空间和独占表空间共 ...

  10. 模板-->求逆矩阵(利用初等变换求解)

    如果有相应的OJ题目,欢迎同学们提供相应的链接 相关链接 所有模板的快速链接 简单的测试 INPUT: 3 2 1 0 1 2 1 1 1 1 OUTPUT: 0.5 -0.5 0.5 0 1 -1 ...