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. 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 ...

  2. 初学K3Cloud开发

    1.BOS中在新建的空白对象中添加一个下推按钮 1.点击“菜单集合”属性 2.在打开的窗体中,点中“工具条”,新增一个按钮 3.将新增的按钮标题改为“下推”,并配置点击事件 列表菜单增加“下推”类似, ...

  3. sql常用到的查询连接

    一.内连接(Inner Join) select * from a inner join b on a.name=b.name; 此语句的结果为同时匹配表a和表b的记录集.即内连接取的是两个表的交集. ...

  4. PHP中的闭包

    1.语句结构 在PHP中,由于存在函数内部不能访问全局作用的,所以就需要一种可以引入上一级作用域的语法结构,这种就是 function () use () {} 将需要引入到这个函数作用于内的变量写入 ...

  5. Springboot导出Excel并下载

    引入相关依赖 <!--数据导出excel--> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> & ...

  6. Array Product CodeForces - 1042C (细节)

    #include <iostream> #include <sstream> #include <algorithm> #include <cstdio> ...

  7. Java 常提到的自然序(Natural Ordering)

    Natural Ordering常在容器中被提到,和迭代器一起出现. 在Comparable接口的API规范中找到了描述. (https://docs.oracle.com/javase/8/docs ...

  8. Spring MVC(一)Spring MVC的原理

    1.Spring MVC的目的 构建像Spring框架那样灵活和松耦合的Web应用程序. 2.Spring MVC中如何处理Request? 每当用户在Web浏览器中点击链接或者提交表单时,Reque ...

  9. url协议+域名+端口号

    string url = System.Web.HttpContext.Current.Request.Url.Scheme + "://" +                   ...

  10. asp.net 6.aspx页面

    1.aspx页面的头部 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Us ...