https://www.bilibili.com/video/av46777605

plsql中选择testWindow中可以进行测试

1、编写函数在plsql的testwindow中

  begin
    dbms_output.put_line('hello,world');
  end;

  运行后可以在DBMS_output标签页中看到

  如果在sqlplus中运行的话,需要输入一个  /  来表示输入完了,但因为sqlplus默认是不打开显示的,需要输入 set serveroutput on

2、变量赋值

-- Created on 2019/11/14 by LENOVO
declare
--姓名
V_NAME VARCHAR2(20);
--薪水
V_SAL NUMBER;
--地址
V_ADDR VARCHAR2(200);
begin
--直接赋值
V_NAME:='ADAM';
V_SAL:=1590;
--语句赋值
select 'hello' into v_addr from dual;
--打印输出
DBMS_OUTPUT.PUT_LINE('姓名:'||v_name||',薪水:'||v_sal);
end;

3、两个变量该怎么写,另外声明的对象类型是什么样,去【表名】【字段名】【%TYPE】来定义

declare
--姓名
V_NAME PERSON.NAME%TYPE;
--分数
V_HEIGHT PERSON.HEIGHT%TYPE;
begin
SELECT NAME,HEIGHT INTO V_NAME,V_HEIGHT FROM PERSON WHERE AGE=20;
DBMS_OUTPUT.PUT_LINE('姓名:'||V_NAME||',身高:'||V_HEIGHT);

end;

4、记录型变量

接受表中的一整行记录,相当于Java中的一个对象,注意,只能接收一条记录

语法:变量名称   表名%ROWTYPE 如V_PERSON PERSON%ROWTYPE;

declare
--一行记录
V_PERSON PERSON%ROWTYPE;
begin
SELECT * INTO V_PERSON FROM PERSON WHERE AGE=20;
DBMS_OUTPUT.PUT_LINE('姓名:'||V_PERSON.NAME);
end;

5、流程控制

注意关键字ELSIF   中间少了个E

---判断person表中的记录数是否超过5条
declare
v_count NUMBER;
begin
SELECT COUNT(1) INTO v_count from person;
if (v_count < 5) then
DBMS_OUTPUT.PUT_LINE('小于5,共:' || v_count);
Elsif (v_count < 10) then
DBMS_OUTPUT.PUT_LINE('大于5 小于10,共:' || v_count);
Else
DBMS_OUTPUT.PUT_LINE('大于15,共:' || v_count);
end if;
end;

 6、循环

---判断person表中的记录数是否超过5条
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;

7、游标

---使用游标查询person中所有的的姓名和身高,并将其打印出来
declare
---声明游标
CURSOR C_PERSON is
select NAME, AGE from PERSON;
--声明变量接收游标中的数据
v_NAME PERSON.NAME%TYPE;
v_AGE PERSON.AGE%TYPE;
BEGIN
--打开游标
OPEN C_PERSON;
LOOP
--获取游标中的数据
FETCH C_PERSON INTO V_NAME, V_AGE;
--如果没有指向的语句了,就退出
EXIT WHEN C_PERSON%NOTFOUND;
--打印输出
DBMS_OUTPUT.put_line(V_NAME || '--' || V_AGE);
END LOOP;
--关闭游标
CLOSE C_PERSON;
end;

8、带参数的游标

---使用游标查询person中【身高】为【1.68】的姓名和身高,并将其打印出来
DECLARE
---声明游标
CURSOR C_PERSON(V_HEIGHT person.height%type) is
select NAME, AGE from PERSON where height = V_height;
--声明变量接收游标中的数据
v_NAME PERSON.NAME%TYPE;
v_AGE PERSON.AGE%TYPE;
BEGIN
--打开游标
OPEN C_PERSON(1.68);
LOOP
--获取游标中的数据
FETCH C_PERSON
INTO V_NAME, V_AGE;
--如果没有指向的语句了,就退出
EXIT WHEN C_PERSON%NOTFOUND;
--打印输出
DBMS_OUTPUT.put_line(V_NAME || '--' || V_AGE);
END LOOP;
--关闭游标
CLOSE C_PERSON;
END;

9、存储过程

以上是在TestWindow中执行的,可以进行调试

如果写的是procedure,就不能调试了

exec p_hello   用这个来在sqlplus调用存储过程。

is as 是可以互相替换的。

存储过程中没有declare关键字,decalre用在语句块中。

10、带输入参数的存储过程

create or replace procedure p_queryNameAgeHeight(v_name in person.name%type) as
v_age person.age%type;
v_height person.height%type;
begin
select age,height into v_age,v_height from person where person.name=v_name;
dbms_output.put_line(v_name||'--'||v_age||'--'||v_height);
end p_queryNameAgeHeight;

执行

exec p_querynameageheight('may');

11、带输出参数的存储过程

重新写一个带输出参数的存储过程

通过testWindow写代码调用之

存储过程和testWindow中的输出都显示在这里了。

create or replace procedure p_queryNameAgeHeight(v_name in person.name%type,
v_height in out person.height%type) as
v_age person.age%type;

begin
select age, height
into v_age, v_height
from person
where person.name = v_name;
dbms_output.put_line(v_name || '--' || v_age || '--' || v_height);
end p_queryNameAgeHeight;

-- Created on 2019/11/14 by LENOVO
declare
v_height person.height%type;
begin
-- Test statements here
p_querynameageheight('may',v_height);
dbms_output.put_line(v_height);
end;

通常在程序中,使用方法调用存储过程。

【存储函数】类似于 【存储过程】,唯一的区别是 【存储函数】必须有返回值,而【存储过程】没有返回值,但可以通过输出参数代替。

目前大家调用的都是【存储过程】,因为相对灵活。

oracle学习1 基于oracle数据库的PLSQL编程以及存储过程的创建和使用视频的更多相关文章

  1. PLSQL编程及存储过程的创建

    一.PLSQL的初步介绍 PLSQL是使sql具有处理过程的能力,可以分为三个部分:声明部分.可执行部分.异常处理部分 1.如何使用PLSQL打印Hello World! 在sqlplus里中打印   ...

  2. Oracle数据库PLSQL编程和存储过程

    一.PLSQL编程 1.1.使用PLSQL实现 Hello world! 1 -- Created on 2022/8/22 by ADMINISTRATOR 2 declare 3 -- 这是申明变 ...

  3. Oracle HA 之 基于活动数据库复制配置oracle 11.2 dataguard

    规划:主库:db_name=dbking               db_unique_name=dbkingpri               备库:db_name=dbking          ...

  4. 学习笔记:oracle学习二:oracle11g数据库sql*plus命令之数据库交互、设置运行环境

    目录 1.SQL*PLUS与数据库的交互 2.设置sql*plus运行环境 2.1 set命令简介 2.2 使用set命令设置运行环境 2.2.1 pagesize变量 2.2.2 NEWPAGE变量 ...

  5. 学习笔记:oracle学习二:oracle11g数据库sql*plus命令之常用sqlplus命令、格式化查询结果

    目录 1.常用sqlplus命令 1.1 HELP命令 1.2 describe命令 1.3 SPOOL命令 1.4 其他常用命令 1.4.1 define命令 1.4.2 show命令 1.4.3 ...

  6. Oracle学习笔记——imp还原数据库

    1.     创建用户及指定用户名密码 create user [用户名] identified by [密码]; create user fskxjsxy  identified by fskxjs ...

  7. Oracle学习(十七)数据库锁在分布式系统里的应用(老板,乐观锁了解一下?~)

    一.引言 随着业务量的增加,单机部署已经无法满足日常需求了,我们可能会把代码部署到多台服务器上去来进行服务的扩容,也就是负载均衡,那在这种场景下,怎么能实现锁的概念呢? 那么我们知道如果是一台主机部署 ...

  8. 吴裕雄--天生自然 oracle学习笔记:oracle理论学习详解及各种简单操作例子

    1. 数据库的发展过程 层次模型 -->网状模型 -->关系模型 -->对象关系模型 2. 关于数据库的概念 DB:数据库(存储信息的仓库) DBMS:数据库管理系统(用于管理数据库 ...

  9. oracle学习笔记系列------oracle 基本操作之基本函数的用法

    --创建一个accout账户表 CREATE TABLE account( id ) NOT NULL, recommender_id ), login_name ) NOT NULL, login_ ...

随机推荐

  1. guns系统部署方式及常见问题

    项目框架:guns 开发IDE:Idea 2018.1 两种打包方式:war 和jar. 1.正常打包的姿势 1.1按照下图修改为你想到打包的方式. ​ 1.2 执行打包 ​​ clean packa ...

  2. Python全栈开发之6、面向对象

    一.创建类和对象 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例 ...

  3. Hadoop_常用命令(hdfs上)

    Hadoop_常用命令(hdfs上) hadoop fs所有文件系统都可以使用 hdfs dfs仅针对于hdfs文件系统 - 1 - 查看所有目录(文件夹)及文件  hdfs dfs -ls / - ...

  4. NIKKEI Programming Contest 2019-2 Task D. Shortest Path on a Line

    Observations ① 从 $1$ 到 $N$ 的最短路一定是不走回头路的.所谓走回头路是指从序号大的点走到序号小的点. 证明:首先,任意从 $1$ 到 $N$ 的路径的最后一步一定不是回头路. ...

  5. IDEA自动生成的注释模板

    使用效果如下: * * @功能描述 : $params$ * @return $returns$ * @author xuetao */ 其中 $params$的表达式如下: groovyScript ...

  6. Linux系列:进阶之tomcat安装

    思路:作者是在Windows上从Apache官网下载的tomcat,之后将tomcat文件放到我的ftp站点中,在Linux访问ftp站点下载tomcat文件 ,将tomcat放在我自己的安装目录中, ...

  7. hdu 4471 区间条件统计 区间 不超过 x 的元素的个数

    题目传送门//res tp hdu 目的 对长度为n的区间,m次询问,每次提供一个区间两端点与一个值x,求区间内不超过x的元素个数 n 1e5 m 1e5 ai [1,1e9] (i∈[1,n]) 多 ...

  8. PHP会话(Session)实现用户登陆功能

    对比起 Cookie,Session 是存储在服务器端的会话,相对安全,并且不像 Cookie 那样有存储长度限制,本文简单介绍 Session 的使用. 由于 Session 是以文本文件形式存储在 ...

  9. Redis-数据结构与对象-对象

    1. 作用 Redis使用对象作为五种不同类型的底层实现,字符串,列表,哈希,集合,有序集合等 而对象是基于之前的分析的数据结构创建的.每个对象都至少用到一种数据结构,这意味着,Redis五大类型,底 ...

  10. 百度地图的初始化应当在vue的mounted()函数里执行

    今天使用百度地图出现了一个问题,百度地图初始化后宽.高都是0,但是地图容器宽高都设置好的, 一开始怎么都排除不出问题,后来无语了,把布局直接复制进入百度地图的示例里运行发现没有问题, 所以想到不是百度 ...