oracle学习1 基于oracle数据库的PLSQL编程以及存储过程的创建和使用视频
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编程以及存储过程的创建和使用视频的更多相关文章
- PLSQL编程及存储过程的创建
一.PLSQL的初步介绍 PLSQL是使sql具有处理过程的能力,可以分为三个部分:声明部分.可执行部分.异常处理部分 1.如何使用PLSQL打印Hello World! 在sqlplus里中打印 ...
- Oracle数据库PLSQL编程和存储过程
一.PLSQL编程 1.1.使用PLSQL实现 Hello world! 1 -- Created on 2022/8/22 by ADMINISTRATOR 2 declare 3 -- 这是申明变 ...
- Oracle HA 之 基于活动数据库复制配置oracle 11.2 dataguard
规划:主库:db_name=dbking db_unique_name=dbkingpri 备库:db_name=dbking ...
- 学习笔记:oracle学习二:oracle11g数据库sql*plus命令之数据库交互、设置运行环境
目录 1.SQL*PLUS与数据库的交互 2.设置sql*plus运行环境 2.1 set命令简介 2.2 使用set命令设置运行环境 2.2.1 pagesize变量 2.2.2 NEWPAGE变量 ...
- 学习笔记: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 ...
- Oracle学习笔记——imp还原数据库
1. 创建用户及指定用户名密码 create user [用户名] identified by [密码]; create user fskxjsxy identified by fskxjs ...
- Oracle学习(十七)数据库锁在分布式系统里的应用(老板,乐观锁了解一下?~)
一.引言 随着业务量的增加,单机部署已经无法满足日常需求了,我们可能会把代码部署到多台服务器上去来进行服务的扩容,也就是负载均衡,那在这种场景下,怎么能实现锁的概念呢? 那么我们知道如果是一台主机部署 ...
- 吴裕雄--天生自然 oracle学习笔记:oracle理论学习详解及各种简单操作例子
1. 数据库的发展过程 层次模型 -->网状模型 -->关系模型 -->对象关系模型 2. 关于数据库的概念 DB:数据库(存储信息的仓库) DBMS:数据库管理系统(用于管理数据库 ...
- oracle学习笔记系列------oracle 基本操作之基本函数的用法
--创建一个accout账户表 CREATE TABLE account( id ) NOT NULL, recommender_id ), login_name ) NOT NULL, login_ ...
随机推荐
- docker笔记(2)——docker镜像操作
操作环境:mac OS 10.14.6 docker版本:10.03.1 终端:iterm2 3.3 时间:2019年8月 docker 镜像,是运行容器的模板,通过pull操作会向指定仓库获取镜像, ...
- 使用 WijmoJS 轻松实现撤消重做(Undo /Redo)
使用 WijmoJS 轻松实现撤消重做(Undo /Redo) 在V2019.0 Update2 的全新版本中,WijmoJS能够轻松实现撤消和重做操作,使Web应用程序的使用更加友好.更加高效. 不 ...
- SQL SERVER DATEADD函数
定义: DATEADD() 函数在日期中加上指定的时间间隔. ※指定的时间间隔可以为负数 语法: DATEADD(datepart,number,date) 参数: ①datepart 参数可以是下列 ...
- Oracle的基本操作-序列的使用
序列:默认从1开始,一次递增,主要用来给主键赋值使用 create sequence s_person; select s_person.nextval from dual; --dual是一张虚表, ...
- SQLServer启动和关闭bat脚本
原文:SQLServer启动和关闭bat脚本 安装完毕SQL SERVER 2005后,会默认自动启动SQL Server等几个服务,这几个服务比较占用系统资源.当不运行SQL Server时,最 ...
- oracle修改TNSLSNR的端口
oracle 服务一启动 TNSLSNR.exe 会占用8080端口,这时,如果我们其他程序需要使用8080端口就会比较麻烦,所以需要改一下端口: 用dba账户登录 CMD>sqlplus sy ...
- paramiko-ssh-sftp实例
import paramiko transport = paramiko.Transport(('192.168.71.136', 22)) transport.connect(username='r ...
- Jmeter之参数化(4种设置方法)
以多用户登录为例~~~ 参数化: 1.用户参数 2.CSV数据文件 3.函数助手CSVRead 4.用户自定义的变量 1.用户参数 脚本目录结构如下: 因为设置了2组账号密码,所以线程数设置为2(添加 ...
- 牛客 40E 珂朵莉的数论题
大意: 给定$x,y$, 求第$x$小的最小素因子为$y$的数, 若答案>1e9输出0. 若$y>=60$, 可以暴力筛出1e9/60以内的答案. 否则容斥+二分算出答案. #includ ...
- mssql 数据库“查询处理器用尽了内部资源,无法生成查询计划。”问题的处理
在项目中动态拼接sql语句,使用union all连接结果集,每个查询语句都使用了in(几百个数值).语句如: ,,,..............................) UNION ALL ...