Oracle数据库快速入门1小时

关于Oracle数据库

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品.可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境.它是一种高效率、可靠性好的、适应高吞吐量的数据库方案.

集成开发环境PLSQL

PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。类比于Java和eclipse.
PLSQL下载破解及汉化教程

程序结构

在PLSQL新建SQL窗口
Oracle中词法不区分大小写,但尽可能使用大写形式(Oracle数据库中,执行会先将各个小写关键字转换成大写关键字后再编译执行)

--Createdd
DECLARE
  --Local Variables here
  --声明变量,游标
  i INTEGER;
BEGIN
  --Test stastements here
  --执行语句

  --[异常处理]
  
END;

其中DECLARE部分用来声明变量或游标(结果集类型变量,可以当做一个类),如果程序中无声明可以省略

Hello World

--Createdd
DECLARE
  --Local Variables here
  i INTEGER;
BEGIN
  --Test stastements here
  --java: System.out.printlm("hello world!");
  dbms_output.put_line('hello world!');
END;

因为没有使用到变量,也可以:

BEGIN
  --Test stastements here
  --java: System.out.printlm("hello world!");
  dbms_output.put_line('hello world!');
END;

通过命令窗口的模式,输入全部SQL后需要在末尾加一斜杠\代表命令结束.要看见输出的信息,则需要set serveroutput on 打开输出
在这里插入图片描述

变量

PLSQL编程中将常见的变量分为两大类:

  1. 普通数据类型(char, varchar2, date, number, boolean, long)
  2. 特殊变量类型(引用型变量, 记录型变量)

声明变量的方式为:

变量名 变量类型(变量长度)
例如: V_Name Varchar2(20);

1.普通数据类型(char, varchar2, date, number, boolean, long)

变量赋值的方式有两种:

  1. 直接复制语句 :=
  2. 语句赋值, 使用 select … into … 赋值 ; (语法 select 值 into 变量 )

[示例]打印人员个人信息,包括:姓名, 薪水, 地址

-- 打印人员个人信息,包括: 姓名, 薪水, 地址
DECLARE
  --姓名
  v_name VARCHAR2(20) := '张三'; --初始赋值
  v_sal  NUMBER;
  v_addr VARCHAR2(200);
BEGIN
  -- 直接赋值
  v_sal := 5000;

  --语句赋值
  SELECT '北京中关村' INTO v_addr FROM dual; --dual (Oracle提供的最小的工作表)

  --打印输出
  dbms_output.put_line('姓名:' || v_name || ' 薪水:' || v_sal || ' 地址:' || v_addr);
END;

结果:
在这里插入图片描述

2.特殊变量类型(引用型变量, 记录型变量)

2.1引用类型变量

变量的类型和长度取决于表中字段的类型和长度
通过表名.列明%Type指定变量的类型和长度,例如: v_name emp.ename%TYPE;
[示例]查询emp表中2号员工的个人信息,打印姓名和薪水

首先创建表emp

-- Create table
create table EMP
(
  empno VARCHAR2(30),
  ename VARCHAR2(20),
  sal   NUMBER,
  addr  VARCHAR2(200)
)
tablespace USERS
  pctfree 10
  initrans 1
  maxtrans 255;

再插入基础数据

INSERT INTO EMP (EMPNO, ENAME, SAL, ADDR)
VALUES ('1', '张三', 1500, '北京');

INSERT INTO EMP (EMPNO, ENAME, SAL, ADDR)
VALUES ('2', '李四', 2500, '上海');

INSERT INTO EMP (EMPNO, ENAME, SAL, ADDR)
VALUES ('3', '王五', 3500, '广州');

执行实例,一般情况下的多值插入

-- 打印人员个人信息,包括: 姓名, 薪水, 地址
DECLARE
  --姓名
  v_name VARCHAR2(20); 
  v_sal  NUMBER;
BEGIN
  --语句赋值
  SELECT T.ENAME, T.SAL INTO v_name, v_sal FROM EMP T WHERE T.EMPNO = '2';

  --打印输出
  dbms_output.put_line('姓名:' || v_name || ' 薪水:' || v_sal);
END;

执行实例,使用引用类型变量的多值插入

-- 打印人员个人信息,包括: 姓名, 薪水, 地址
DECLARE
  --姓名
  v_name EMP.ENAME%TYPE; 
  v_sal  EMP.SAL%TYPE;
BEGIN
  --语句赋值
  SELECT T.ENAME, T.SAL INTO v_name, v_sal FROM EMP T WHERE T.EMPNO = '2'; --dual (Oracle提供的最小的工作表)

  --打印输出
  dbms_output.put_line('姓名:' || v_name || ' 薪水:' || v_sal);
END;

结果都是:
在这里插入图片描述
引用类型变量的好处:
使用普通变量定义方式,需要知道表中列的类型,而使用引用类型,不需要考虑列的类型,使用%TYPE是非常好的编程风格,因为它是的PL/SQL更加灵活,更适应于数据库定义的更新

2.2记录型变量

接受表中的一整行记录,相当于Java中的一个对象
语法 变量名称 表名%ROWTYPE
例如: v_emp emp%rwotype ;

示例:

-- 打印人员个人信息,包括: 姓名, 薪水, 地址
DECLARE
  --记录型变量
  v_emp emp%ROWTYPE;
BEGIN
  --语句赋值
  SELECT * INTO v_emp FROM EMP T WHERE T.EMPNO = '3'; --dual (Oracle提供的最小的工作表)

  --打印输出
  dbms_output.put_line('姓名:' || v_emp.ename || ' 薪水:' || v_emp.sal || '地址: '|| v_emp.addr );
END;

输出:
在这里插入图片描述
适用场景:如果有一个表,有100个字段,那么你程序如果要使用这100字段的话,如果你使用引用型变量一个个声明,会特别麻烦,记录型变量可以方便解决这个问题.
注意,记录型变量一次只能记录一行,并且最好使用 * 进行插入

流程控制

1.条件分支

语法:

BEGIN
  --IF判断语法
	
  IF 条件语句1 THEN 
    执行语句1
		
	ELSIF 条件语句2 THEN
		执行语句2
		
	ELSE 执行语句3
  
	END IF;
  
END;

注意关键字 : ELSIF

[示例]判断emp表中记录是否超过20条,10-20条之间,或者10条以下

--判断emp表中记录是否超过20条,10-20条之间,或者10条以下
DECLARE
  --声明变量接收emp中的数量
  v_count NUMBER;
BEGIN
  SELECT COUNT(1) INTO v_count FROM emp t;
  IF v_count > 20 THEN
    dbms_output.put_line('emp表汇总的记录数超过了20条为: ' || v_count);
  ELSIF v_count >= 10 THEN
    dbms_output.put_line('emp表汇总的记录数在10-20条为: ' || v_count);
  ELSE
    dbms_output.put_line('emp表汇总的记录数在10条以下为: ' || v_count);
  END IF;
END;

结果:
在这里插入图片描述

2.循环

在Oracle中有三种循环方式,这里我们不展开,只介绍一种:loop循环
语法:

BEGIN 
	
	LOOP
		
	  EXIT WHEN 退出循环条件
		
	END LOOP;
	
END;		  

[示例]打印数字1-10 :

--打印数值1-10
DECLARE
  --声明变量
  v_num NUMBER := 1;
BEGIN
  LOOP
    EXIT WHEN v_num > 10;
    dbms_output.put_line(v_num);
    --循环控制变量自增
    v_num := v_num + 1;
  END LOOP;
END;

结果:
在这里插入图片描述

游标

1.什么是游标

用于临时存储一个查询返回的多行数据(结果集,类似于Java的jdbc连接返回的ResultSet集合),通过遍历游标,可以逐行访问处理该结果集的数据.

游标的使用方式: 声明–> 打开 --> 读取 --> 关闭

2.语法

游标声明:
CURSOR 游标名[(参数列表)] is 查询语句;

游标的打开:
OPEN 游标名;

游标取值:
FETCH 游标名 INTO 变量列表;

游标的关闭:
CLOSE 游标名;

2.3游标的属性

游标的属性 | 返回值的类型 | 说明

游标的属性返回值的类型说明
%ROWCOUNT整型获得FETCH语句返回的数据行数
%FOUND布尔型最近的FETCH语句返回一行数据则为真,否则为假
%NOTFOUND布尔型与%FOUND属性返回值相反
%ISOPEN布尔型游标已经打开时值为真,否则为假

其中%NOTFOUND是在游标中找不到元素的时候返回True,通常用来判断退出循环

2.4 创建和使用

[示例]使用游标查询emp表中所有员工的姓名和工资,并将其依次打印出来

--使用游标查询emp表中所有员工的姓名和工资,并将其依次打印出来
DECLARE
  --声明游标
  CURSOR c_emp IS SELECT t.ename ,t.sal FROM emp t;

  --声明变量接受游标中的数据
  v_ename emp.ename%TYPE;
  v_sal   emp.sal%TYPE;

BEGIN
  --打开游标
  OPEN c_emp;
	
  --遍历游标
  LOOP
		
    --获取游标中的数据
    FETCH c_emp INTO v_ename ,v_sal;
		
    --退出循环条件
    EXIT WHEN c_emp%NOTFOUND;
    dbms_output.put_line(v_ename || '---' || v_sal);
		
    --循环控制变量自增
  END LOOP;
	
END;

结果:
在这里插入图片描述

2.5带参数的游标

先对表中添加数据

insert into emp (EMPNO, ENAME, SAL, ADDR)
values ('1', '张三', 1500, '北京');
insert into emp (EMPNO, ENAME, SAL, ADDR)
values ('2', '李四', 2500, '上海');
insert into emp (EMPNO, ENAME, SAL, ADDR)
values ('3', '王五', 3500, '广州');
insert into emp (EMPNO, ENAME, SAL, ADDR)
values ('4', '赵六', 2500, '深圳');
insert into emp (EMPNO, ENAME, SAL, ADDR)
values ('5', '刘七', 2500, '西安');

使表中数据为:

    EMPNO ENAME SAL ADDR
1 1 张三 1500 北京
2 2 李四 2500 上海
3 3 王五 3500 广州
4 4 赵六 2500 深圳
5 5 刘七 2500 西安

带参数游标的使用

--使用游标查询emp表中所有员工的姓名和工资,并将其依次打印出来
DECLARE
  --声明游标
  CURSOR c_emp(v_sal emp.sal%type) IS SELECT t.ename ,t.sal FROM emp t WHERE t.sal = v_sal;

  --声明变量接受游标中的数据
  v_ename emp.ename%TYPE;
  v_sal   emp.sal%TYPE;

BEGIN
  --打开游标,并且对游标参数指定要薪水为2500的员工
  OPEN c_emp(2500);
  
  --遍历游标
  LOOP
    
    --获取游标中的数据
    FETCH c_emp INTO v_ename ,v_sal;
    
    --退出循环条件
    EXIT WHEN c_emp%NOTFOUND;
    dbms_output.put_line(v_ename || '---' || v_sal);
    
    --循环控制变量自增
  END LOOP;
  
END;

其中特别要注意

–获取游标中的数据
FETCH c_emp INTO v_ename ,v_sal;

–退出循环条件
EXIT WHEN c_emp%NOTFOUND;

位置不要混淆,导致最后多拿取一次数据

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值