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_ ...
随机推荐
- 2019-2020 ICPC, Asia Jakarta Regional Contest H. Twin Buildings
As you might already know, space has always been a problem in ICPC Jakarta. To cope with this, ICPC ...
- 初学K3Cloud开发
1.BOS中在新建的空白对象中添加一个下推按钮 1.点击“菜单集合”属性 2.在打开的窗体中,点中“工具条”,新增一个按钮 3.将新增的按钮标题改为“下推”,并配置点击事件 列表菜单增加“下推”类似, ...
- sql常用到的查询连接
一.内连接(Inner Join) select * from a inner join b on a.name=b.name; 此语句的结果为同时匹配表a和表b的记录集.即内连接取的是两个表的交集. ...
- PHP中的闭包
1.语句结构 在PHP中,由于存在函数内部不能访问全局作用的,所以就需要一种可以引入上一级作用域的语法结构,这种就是 function () use () {} 将需要引入到这个函数作用于内的变量写入 ...
- Springboot导出Excel并下载
引入相关依赖 <!--数据导出excel--> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> & ...
- Array Product CodeForces - 1042C (细节)
#include <iostream> #include <sstream> #include <algorithm> #include <cstdio> ...
- Java 常提到的自然序(Natural Ordering)
Natural Ordering常在容器中被提到,和迭代器一起出现. 在Comparable接口的API规范中找到了描述. (https://docs.oracle.com/javase/8/docs ...
- Spring MVC(一)Spring MVC的原理
1.Spring MVC的目的 构建像Spring框架那样灵活和松耦合的Web应用程序. 2.Spring MVC中如何处理Request? 每当用户在Web浏览器中点击链接或者提交表单时,Reque ...
- url协议+域名+端口号
string url = System.Web.HttpContext.Current.Request.Url.Scheme + "://" + ...
- asp.net 6.aspx页面
1.aspx页面的头部 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Us ...