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. How to distribute your own Android library through jCenter and Maven Central from Android Studio

    In Android Studio, if you wish to include any library to your application. You could just simply add ...

  2. [Theano] Theano初探

    1. Theano用来干嘛的? Theano was written at the LISA lab to support rapid development of efficient machine ...

  3. uva12118

    一开始以为直接算联通块个数就行了 后来发现还得分联通块里的奇点... 还要注意m = 0的情况... #include<iostream> #include<algorithm> ...

  4. 为什么使用spring Struts 等框架开发

    转载自:http://www.cnblogs.com/sharpxiajun/p/3936268.html 今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入, ...

  5. android使用bintray发布aar到jcenter

    前言 这两天心血来潮突然想把自己的android library的aar放到jcenter里面,这样一来自己便可以在任何时间任何地点通过internet得到自己的library的引用了,况且现在and ...

  6. 一个IT男的创业感言

    2014年的一月 我和高中的一个同学開始人生的第一次创业.就写点第一次创业的经验吧! 创业的最初 须要心中大概有个规划 这个规划可能是非常粗糙的 但大的方向一定要有.详细就是你进入的行业 行业已经存在 ...

  7. 用htaccess进行访问控制(转)

    1. 文件访问控制 利用 httpd.conf 中的 Order.Files 及 FilesMatch 命令实现的访问控制可以满足大部分要求,但是当用户被拒绝时,他们看到的是硕大的“403 Forbi ...

  8. yii phpexcel <转>

    原文详情参见 这里 1.下载phpexcel,将压缩包中的classes复制到protected/extensions下并修改为PHPExcel. 2.修改YII配置文件config/main.php ...

  9. HDU 4455(dp)

    题意:给定一个序列ai,个数为n.再给出一系列w:对于每个w,求序列中,所有长度为w的连续子串中的权值和,子串权值为子串中不同数的个数. 思路:动态规划,用dp[w]表示当前长度为w的时候的权值和.显 ...

  10. Redis的AOF功能

    引言:  Redis是基于内存的数据库,同时也提供了若干持久化的方案,允许用户把内存中的数据,写入本地文件系统,以备下次重启或者当机之后继续使用.本文将描述如何基于Redis来设置AOF功能 什么是R ...