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;
通常在程序中,使用方法调用存储过程。
【存储函数】类似于 【存储过程】,唯一的区别是 【存储函数】必须有返回值,而【存储过程】没有返回值,但可以通过输出参数代替。
目前大家调用的都是【存储过程】,因为相对灵活。
最新文章
- SCALA XML pattern attrbute(属性)
- discuz被别人评论一段代码,然后页面就变样了
- C#系统缓存全解析(转载)
- 使用Spring发送邮件
- cocos2d-x中的Jni使用(C++与Andriod方法互调)
- Java学习笔记(3)
- 一个int 数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它。能否只用一个额外数组和少量其它空间实现。
- SQL Profile (总结4)--使用演示示例
- 基于 Koa平台Node.js开发的KoaHub.js的模板引擎代码
- robotframework自动化系列:删除操作流程以及总结
- JavaProblem之hashCode详解
- 四、Html常用标签
- 树莓派控制高电平蜂鸣器(c语言+新手向)
- Python写爬虫爬妹子
- test TSS Work about
- day3-课堂笔记
- UI自动化测试(五)TestNG简介与安装步骤
- oracle中获取执行计划
- spring mongodb中去掉_class列
- 2018-2019-2 网络对抗技术 20165322 Exp5 MSF基础应用
热门文章
- 【POJ - 3641】Pseudoprime numbers (快速幂)
- 【VS开发】关于线程安全一些细节体会
- 深入理解C语言-结构体做函数参数
- Cookie中的httponly的属性和作用
- 论文阅读 | Text Processing Like Humans Do: Visually Attacking and Shielding NLP Systems
- A Mixed Flash Translation Layer Structure for SLC-MLC Combined Flash Memory System
- hdoj2196(树形dp,树的直径)
- 关于mac配置vs code的C++环境问题
- ARTS 第一周打卡
- PAT A1031 Hello World for U (20)