1. 需要开启的服务:  本机安装的oracle ,默认是开机启动服务的,开机时间太慢,关闭了,需要手动打开:

OracleDBConsoleorcl

OracleOraDb10g_home1iSQL*Plus

OracleOraDb10g_home1TNSListener

OracleServiceORCL   这个后面的ORCL就是数据库名字,官方术语叫做数据库sid

2.打开PL/SQL工具,用户名scott 登陆sid为ORCL的数据库, 密码 tiger

3.打开一个测试窗口,如下

 1 -- Created on 2018/6/3 by ADMINISTRATOR
 2 declare
 3   -- 声明本地变量的地方,包括游标(结果集类型变量),如果没有,declare可以去掉
 4   --相当于java的 public class A{}
 5   i integer;
 6 begin
 7   -- 执行部分
 8   --相当于Java的public static void main(String[] args)
 9   --异常处理
10 end;

4.打印helloworld

结果如下:

dbms_output是oracle的程序包,put_line()是调用的方法

在命令行中打印:需要先设置 set serveroutput on ,才会将打印语句打印出来,否则只执行不打印。

 

5. PLSQL变量的使用:

PLSQL中的变量分两种:

(1)普通数据类型:char varchar2 date number(整数和小数) boolean long

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

变量的声明方式为:变量名 变量类型(变量长度) ,例如:v_name varchar2(20)

变量赋值:

  (1)声明时使用 := 直接赋值:v_name varchar2(20) := ‘zhangsan’        只写=,则是进行比较

  (2)语句赋值: select  值  into 变量名

5.1 普通变量的使用

 1 -- 声明一个人的信息 姓名 薪水 地址
 2 declare
 3   -- 姓名 不能使用name,这是保留字
 4   v_name varchar2(50) := '张三';
 5   -- 薪水   小数:number(总长度(小数加整数的位数),小数位数) v_sal number(6,2) --1000.00
 6   v_sal number;
 7   --地址
 8   v_addr varchar2(200);
 9 begin
10   --直接赋值
11   v_sal := 15000;
12   --语句赋值
13   select '上海市南京路' into v_addr from dual; --实际工作中应该是from 某个表
14   -- 打印变量  || 是拼接符,相当于java 的+
15   dbms_output.put_line('姓名:' || v_name || ',薪水:' || v_sal || ',地址:' || v_addr);
16 end;

执行结果:

5.2 引用变量的使用

引用变量:变量的类型和长度取决于表中字段的类型和长度(变量的类型和长度引用表中字段的类型和长度),通过  表名.列名%TYPE 指定变量的类型和长度,例如 v_name emp.ename%TYPE

引用型变量的好处:使用普通变量定义方式,需要知道表中列的类型,而使用引用类型不需要考虑列的类型,使用%TYPE是非常号的编程风格,因为它使得PL/SQL更加灵活,更加适应于对数据库定义的更新。

 1 -- 查询emp表中7839号员工的个人信息,打印姓名和薪水
 2 declare
 3   -- 姓名 定义的是引用变量
 4   v_ename emp.ename%TYPE;
 5   -- 薪水
 6   v_sal emp.sal%TYPE;
 7
 8 begin
 9   --查询姓名和薪水并赋值给变量,。使用select into 语句赋值
10   select ename, sal into v_ename, v_sal from emp where empno = 7839;
11   dbms_output.put_line('姓名:' || v_ename || ',薪水:' || v_sal);
12
13 end;

结果:

5.3 记录型变量

记录型变量 默认接接收 表中的一行数据,不能指定字段,相当于java中的一个对象。

语法: 变量名称 表名%ROWTYPE 例如 v_emp emp%rowtype;   通过 变量名.字段名 的方式获取变量中的值

 1 --记录型变量示例:用该变量接收表中一行sql的信息
 2 declare
 3   -- 记录型变量
 4   v_emp emp%ROWTYPE;
 5
 6 begin
 7   --查询所有字段并赋值给变量,字段名用v_emp.字段名 表示
 8   select * into v_emp from emp where empno = 7839;
 9   dbms_output.put_line('姓名:' || v_emp.ename || ',薪水:' || v_emp.sal);
10
11 end;

结果:

6.流程控制:

6.1  条件分支,语法:

BEGIN

  IF 条件1 then  执行1;

    Elsif 条件2 then 执行2 ;   --注意不是 elseif  ,是elsif

     Else  执行3

End if;

END

 1 -- 判断emp表中记录是否超过20条,10-20 之间,或者10条以下
 2 declare
 3   --声明变量接收emp表中记录数
 4   v_count number;
 5 begin
 6   -- 查询并赋值给变量
 7   select count(1)  into v_count from emp;
 8   --判断打印
 9   if v_count > 20 then
10     dbms_output.put_line('emp表中的记录数在20条以上为' || v_count);
11   elsif v_count >= 10 then
12     dbms_output.put_line('emp表中的记录数在10-20条之间为' || v_count);
13   else
14     dbms_output.put_line('emp表中的记录数在10条以下为' || v_count);
15   end if;
16
17 end;

执行结果:

   select * 结果如下:

6.2  loop循环.此处只记录loop循环的使用。 循环两个要点:1.循环变量初值,循环体中循环变量值要发生变化,

 1 -- 循环打印1-10
 2 declare
 3   -- 声明一个循环变量并赋初值
 4   v_num number := 1;
 5 begin
 6   loop
 7     exit when v_num > 10;
 8     dbms_output.put_line(v_num);
 9     --循环变量的自增长
10     v_num := v_num + 1;
11   end loop;
12 end;

7.特殊的变量—— 游标,本质上是一条查询语句的结果的封装,只能往前,不能往后

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

游标使用方法:声明 打开 读取 关闭

语法:

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

游标打开:    Open 游标名;

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

游标关闭:    CLOSE 游标名

游标属性:

%NOTFOUND 是在游标中找不到元素时返回TRUE,通常用于判断,退出循环

7.1 不带参数的游标 示例:

 1 -- 使用游标查询emp表中所有员工的姓名和工资,并将其依次打印出来
 2 declare
 3   -- 声明游标
 4   cursor c_emp is
 5     select ename, sal from emp;
 6   --声明变量接收游标中的数据
 7   v_ename emp.ename%TYPE;
 8   v_sal   emp.sal%TYPE;
 9 begin
10   -- 打开游标
11   open c_emp;
12   -- 遍历游标
13   loop
14     --获取游标中的数据,如果有的话就赋值给变量
15     fetch c_emp
16       into v_ename, v_sal;
17     exit when c_emp%notfound; --c_emp%notfound 没有数据时返回true
18     dbms_output.put_line('姓名:' || v_ename || ',薪水:' || v_sal);
19   end loop;
20
21   --关闭游标
22   close c_emp;
23
24 end;

结果如下:

7.2 带输入参数的游标:

 1 -- 使用游标查询emp表中某个部门员工的姓名和工资,并将其依次打印出来
 2 declare
 3   -- 声明带参数的游标,在声明时加上形参,select语句里面加上查询条件
 4   cursor c_emp(v_deptno emp.deptno%TYPE) is
 5     select ename, sal from emp where deptno = v_deptno;
 6   --声明变量接收游标中的数据
 7   v_ename emp.ename%TYPE;
 8   v_sal   emp.sal%TYPE;
 9 begin
10   open c_emp(10); -- 打开游标时加上实参
11   loop  -- 遍历游标
12     fetch c_emp into v_ename, v_sal;  --获取游标中的数据,如果有的话就赋值给变量
13     --在判断之前先获取一下数据,看有还是没有
14     exit when c_emp%notfound; --c_emp%notfound 没有数据时返回true
15     dbms_output.put_line('姓名:' || v_ename || ',薪水:' || v_sal);
16   end loop;
17   close c_emp;  --关闭游标
18
19 end;

上述游标使用语句,相当于一个匿名的函数,当测试窗口关闭,语句也就没有了,无法实现复用。如果想要在窗口关闭了之后还能使用上面那段语句,就需要存储过程了。参见下文存储过程学习记录。

转载于:https://www.cnblogs.com/enjoyjava/p/9130986.html

基于oracle 的PL/SQL编程 -变量使用相关推荐

  1. Oracle基础--PL/SQL编程--变量

    一.PL/SQL变量概念 在Oracle中,有两种变量,一为普通变量(如char.varchar2.date.number.long等),二为特殊变量(引用型变量.记录型变量). 二.普通变量的声明 ...

  2. Oracle之PL/SQL编程从入门到精通-文心-专题视频课程

    Oracle之PL/SQL编程从入门到精通-23941人已学习 课程介绍         本课程基于Oracle数据库,讲解PL/SQLl编程方面的技能,通过本课程的学习,学员能在短的时间内掌握Ora ...

  3. Oracle的PL/SQL编程前奏之基础技能实战一(匿名子程序)

    Oracle的PL/SQL编程之基础技能实战一 一>基础代码检查检查以bm_开头的系统初始化编码表是否有空值.与业务系统相关的编码项不能存在空值,会导致系统业务无法办理.为初始化数据表.在做测试 ...

  4. oracle if函数变量,Oracle数据库——PL/SQL编程

    PL/SQL块基本结构 declare -- 声明部分 begin -- 执行部分 exception -- 异常处理部分 end; 声明部分:包含变量.常量定义,由 declare 关键字开始,如果 ...

  5. oracle pl/sql编程详细,Oracle框架:PL/SQL编程:

    PL/SQL编程 一:什么是PL/SQL (1.)PL/SQL体系结构: PL/SQL引擎用来编译和执行,PL/SQL块或子程序,该引擎驻留在Oracle服务器中. (2.)PL/SQL块简介 PL/ ...

  6. 10、oracle下PL/SQL编程基础

    ORACLE下的PL/SQL编程基础 PL/SQL语言是程序化程序设计语言,块是PL/SQL编程中的基本结构,其优点在于支持SQL.支持面向对象编程.性能好.可移植性.与sql集成.安全性高等. 1. ...

  7. oracle快捷语句框架中,Oracle框架:PL/SQL编程:

    PL/SQL编程 一:什么是PL/SQL (1.)PL/SQL体系结构: PL/SQL引擎用来编译和执行,PL/SQL块或子程序,该引擎驻留在Oracle服务器中. (2.)PL/SQL块简介 PL/ ...

  8. Oracle的PL/SQL编程

    PL/SQL编程 基本语言风格 PL/SQL把SQL的数据操作功能同过程语言的数据处理功能结合起来. --声明作用 declare --变量.游标.用户自定义类型.异常 variables,curso ...

  9. Oracle之pl/sql编程(一)函数,过程,包

    pl/sql是什么? pl/sql是oracle在标准sql语言上的扩展.不仅允许嵌入sql语言,还可以定义常量和变量,允许使用条件语句和循环语句,允许使用例外处理各种错误. 作用:过程,函数,触发器 ...

最新文章

  1. jQuery_事件学习
  2. Java 网络编程1
  3. 记录下kaggle比赛经验
  4. 联发科推出5G处理器天玑720 采用台积电7nm工艺制造
  5. Docker与容器安全
  6. python基础语法手册-python语法大全,python语法手册
  7. MySQL Online DDL 方案剖析
  8. 华三 h3c 交换机链路聚合
  9. SAP QM数据库表清单
  10. CryptoJS 加密
  11. import错误:undefined symbol: _ZN6caffe26detail37_typeMetaDataInstance_preallocated_32E
  12. 热噪声 Thermal noise
  13. 爬取年报数据、解析PDF提取数据、分析代码(巨潮 Python)
  14. UI设计必备网站,一定要收藏。
  15. 从GitHub火到了CSDN,共计1658页的《Java岗面试核心MCA版》
  16. 算法导论第一,第二部分总结
  17. 如何把照片转换成jpg格式呢?
  18. 【arcgis10.8最新版安装】
  19. 大数据与机器学习-大数据预测
  20. 【ansj分词,英文被转换为了小写】

热门文章

  1. Atitit .linux 取回root 密码q99
  2. Axel与Wget下载工具
  3. RHCE系列之LVM----理论篇
  4. 诺基亚Lumia 800生产背后的故事——萨罗工厂[多图]
  5. winform中捕获程序未处理的所有异常
  6. python去噪算法
  7. IT兄弟连 Java语法教程 变量1
  8. 2017.07.05 第五组 NABCD+用户原型+用户调研
  9. SignalR系列续集[系列8:SignalR的性能监测与服务器的负载测试]
  10. 验证mongodb主从复制过程~记录操作