Oracle快速入门学习笔记(第四课PL/SQL)
sinye56 2024-10-10 10:59 3 浏览 0 评论
PL/SQL
一、运算符
(1)赋值运算符 :=
(2)判断是否相等 =
(3)字符串相连 ||
(4)不等于 <>
二、PL/SQL——————
Procedure Language & Structured Query Language
PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据
库进行访问。
模块化
过程化
declare
-- 变量的声明
a int;
b int;
c int;
BEGIN
-- 执行的逻辑
a:=10;-- 普通赋值
b:=20;
c:=a+b;
dbms_output.put_line(c);
end;
-- 给变量赋的值来自于表 select ... into ...
-- 统计员工的人数emp
DECLARE
counts int;
BEGIN
select count(*) into counts from emp;
dbms_output.put_line('部门人数'||counts);
end;
-- 查看表结构
select * from user_tab_columns
where Table_Name='EMP';
select * from emp;
-- 将新增的数据返回到变量中 returning ...into ...
DECLARE
names varchar2(20);
row_id ROWID;
BEGIN
insert into emp(empno,ename) values(7779,'好习惯') returning rowid,ENAME into row_id,names ;
dbms_output.put_line(row_id||'----'||names);
end;
select sysdate from dual;
-- 复合数据类型(等同于java中class)
DECLARE
type student is record(
sid int,
names varchar2(10),
birthday date
);
stu1 student;
stu2 student;
BEGIN
stu1.sid:=1;
stu1.names:='刘小伟';
stu1.birthday:=sysdate;
stu2.sid:=9;
stu2.names:='厉小林';
stu2.birthday:=to_date('1999-09-09','yyyy-mm-dd');
dbms_output.put_line(stu1.names||'------'||stu2.names);
dbms_output.put_line(to_char(stu1.birthday,'yyyy-mm-dd')||'------'||stu2.birthday);
end;
-- 从表中获取数据,存入到复合类型
-- 获取10号部门的信息 DEPT
DECLARE
-- 创建复合类型
type dept_t is record(
dno number(2),
dn varchar2(14),
cc varchar2(13)
);
-- 声明复合对象mydept
mydept dept_t;
BEGIN
select deptno,dname,loc into mydept from DEPT where DEPTNO=10;
dbms_output.put_line('部门编号 部门名称 部门地址');
dbms_output.put_line(mydept.dno||' '||mydept.dn||' '||mydept.cc);
end;
-- %TYPE
-- 变量类型自动会和表的数据类型一致
DECLARE
-- 创建复合类型
type dept_t is record(
dno dept.DEPTNO%type,
dn DEPT.DNAME%type,
cc DEPT.LOC%type
);
-- 声明复合对象mydept
mydept dept_t;
BEGIN
select deptno,dname,loc into mydept from DEPT where DEPTNO=10;
dbms_output.put_line('部门编号 部门名称 部门地址');
dbms_output.put_line(mydept.dno||' '||mydept.dn||' '||mydept.cc);
end;
-- %rowtype
-- 定义的记录类型和表的一行记录一致
DECLARE
myd dept%rowtype;
BEGIN
select deptno,dname,loc into myd from DEPT WHERE deptno=10;
dbms_output.put_line('部门编号 部门名称 部门地址');
-- 记录类型变量.属性(就是表的字段名)
dbms_output.put_line(myd.deptno||' '||myd.dname||' '||myd.loc);
END;
条件控制语句
/*
IF .. THEN
elsif ... THEN
else
end if;
*/
-- 抽奖
-- 生成随机数dbms_random.value [0,1)
select dbms_random.value from dual;
declare
n int;
begin
select 151*dbms_random.value+50 into n from dual;
dbms_output.put_line('随机数='||n);
if mod(n,9)=0 THEN
dbms_output.put_line('恭喜你,中一等奖,走向人生巅峰');
elsif mod(n,7)=0 THEN
dbms_output.put_line('恭喜你,中二等奖,还差一点就要赢取白富美没了');
elsif mod(n,5)=0 THEN
dbms_output.put_line('恭喜你中了三等奖,奖品是一床被子');
ELSE
dbms_output.put_line('谢谢惠顾,纪念奖纸巾一包');
end if;
end;
-- CASE
declare
n int;
begin
select 151*dbms_random.value+50 into n from dual;
dbms_output.put_line('随机数='||n);
case
when mod(n,9)=0 THEN
dbms_output.put_line('恭喜你,中一等奖,走向人生巅峰');
when mod(n,7)=0 THEN
dbms_output.put_line('恭喜你,中二等奖,还差一点就要赢取白富美没了');
when mod(n,5)=0 THEN
dbms_output.put_line('恭喜你中了三等奖,奖品是一床被子');
ELSE
dbms_output.put_line('谢谢惠顾,纪念奖纸巾一包');
end case;
end;
-- case用在select语句中
循环语句
/* 一、简单循环
loop
循环体
exit when 条件
end loop;
*/
-- 1-100之间累和
DECLARE
i int:=1;
s int:=0;
BEGIN
loop
s:=s+i;
i:=i+1;
exit when i>100;--循环结束的条件
end loop;
dbms_output.put_line(s);
END;
-- while循环
/*
while 条件 loop
循环体
end loop;
*/
-- 1-10到累乘的结果
DECLARE
i int:=1;
s int:=1;
BEGIN
while i<=10 loop
s:=s*i;
i:=i+1;
end loop;
dbms_output.put_line(s);
end;
-- FOR循环
/*
for i in a..b loop
循环体
end loop;
【注意】循环变量i不需要声明,可以直接使用
*/
declare
s int :=0;
BEGIN
for i in 1..100 loop
if mod(i,2)=0 THEN
s:=s+i;
end if;
end loop;
dbms_output.put_line('100以内的偶数相加='||s);
end;
-- 判断一个数是否是素数
declare
m int :=9;
flag boolean :=true;
BEGIN
for i in 2..m-1 loop
if mod(m,i)=0 THEN
flag:=false;
exit;
end if;
end loop;
-- ???用函数,将true和false分别用汉字提示代替
dbms_output.put_line(decode(flag,true,'是素数',false,'不是素数'));
end;
游标
/*
游标是一个指向结果集的当前记录的指针,
游标指向哪一行,我们就能读取哪一行的数据
游标最初指向第一行的前一行
游标的分类:
A、显示游标
① 声明游标
② 打开游标
③ 提取游标
④ 关闭游标
B、隐式游标
简化上述操作,利用for循环
*/
DECLARE
x emp%rowtype;
--① 声明游标
cursor c is select * from emp;
BEGIN
-- ② 打开游标
open c;
-- ③ 提取游标
fetch c into x;-- 移动游标并且将当前行保存x变量
while c%found loop
dbms_output.put_line(x.ename||' ');
fetch c into x;-- 遍历,将下一行数据存入x对象
end loop;
--dbms_output.put_line('fsdkfj ');
-- ④ 关闭游标
close c;
end;
select * from emp;
-- 带参数的游标
DECLARE
e emp.ename%type;
j EMP.job%type;
-- ① 声明游标
cursor c(n int) is select ename,job from EMP
where mod(empno,n)=0;
BEGIN
-- 打开游标,将参数传入
open c(4);
-- 提取数据
fetch c into e,j;
while c%found loop
dbms_output.put_line(e||' '||j);
fetch c into e,j;
end loop;
-- 关闭游标
close c;
end;
--隐式游标--简化游标操作
DECLARE
cursor c is select * from dept;
BEGIN
for x in c loop
dbms_output.put_line(x.deptno||'--'||x.dname||'--'||x.loc);
end loop;
end;
-- 带参游标
DECLARE
cursor c(i int) is select * from dept where mod(deptno,i)=0;
BEGIN
for x in c(4) loop
dbms_output.put_line(x.deptno||'--'
||x.dname||'--'||x.loc);
end loop;
end;
相关推荐
- Linux基础知识之修改root用户密码
-
现象:Linux修改密码出现:Authenticationtokenmanipulationerror。故障解决办法:进入单用户,执行pwconv,再执行passwdroot。...
- Linux如何修改远程访问端口
-
对于Linux服务器而言,其默认的远程访问端口为22。但是,出于安全方面的考虑,一般都会修改该端口。下面我来简答介绍一下如何修改Linux服务器默认的远程访问端口。对于默认端口而言,其相关的配置位于/...
- 如何批量更改文件的权限
-
如果你发觉一个目录结构下的大量文件权限(读、写、可执行)很乱时,可以执行以下两个命令批量修正:批量修改文件夹的权限chmod755-Rdir_name批量修改文件的权限finddir_nam...
- CentOS「linux」学习笔记10:修改文件和目录权限
-
?linux基础操作:主要介绍了修改文件和目录的权限及chown和chgrp高级用法6.chmod修改权限1:字母方式[修改文件或目录的权限]u代表所属者,g代表所属组,o代表其他组的用户,a代表所有...
- Linux下更改串口的权限
-
问题描述我在Ubuntu中使用ArduinoIDE,并且遇到串口问题。它过去一直有效,但由于可能不必要的原因,我觉得有必要将一些文件的所有权从root所有权更改为我的用户所有权。...
- Linux chown命令:修改文件和目录的所有者和所属组
-
chown命令,可以认为是"changeowner"的缩写,主要用于修改文件(或目录)的所有者,除此之外,这个命令也可以修改文件(或目录)的所属组。当只需要修改所有者时,可使用...
- chmod修改文件夹及子目录权限的方法
-
chmod修改文件夹及子目录权限的方法打开终端进入你需要修改的目录然后执行下面这条命令chmod777*-R全部子目录及文件权限改为777查看linux文件的权限:ls-l文件名称查看li...
- Android 修改隐藏设置项权限
-
在Android系统中,修改某些隐藏设置项或权限通常涉及到系统级别的操作,尤其是针对非标准的、未在常规用户界面显示的高级选项。这些隐藏设置往往与隐私保护、安全相关的特殊功能有关,或者涉及开发者选项、权...
- 完蛋了!我不小心把Linux所有的文件权限修改了!在线等修复!
-
最近一个客户在群里说他一不小心把某台业务服务器的根目录权限给改了,本来想修改当前目录,结果执行成了根目录。...
- linux改变安全性设置-改变所属关系
-
CentOS7.3学习笔记总结(五十八)-改变安全性设置-改变所属关系在以前的文章里,我介绍过linux文件权限,感兴趣的朋友可以关注我,阅读一下这篇文章。这里我们不在做过的介绍,注重介绍改变文件或者...
- Python基础到实战一飞冲天(一)--linux基础(七)修改权限chmod
-
#07_Python基础到实战一飞冲天(一)--linux基础(七)--修改权限chmod-root-groupadd-groupdel-chgrp-username-passwd...
- linux更改用户权限为root权限方法大全
-
背景在使用linux系统时,经常会遇到需要修改用户权限为root权限。通过修改用户所属群组groupid为root,此操作只能使普通用户实现享有部分root权限,普通用户仍不能像root用户一样享有超...
- 怎么用ip命令在linux中添加路由表项?
-
在Linux中添加路由表项,可以使用ip命令的route子命令。添加路由表项的基本语法如下:sudoiprouteadd<network>via<gateway>这...
- Linux配置网络
-
1、网卡名配置相关文件回到顶部网卡名命名规则文件:/etc/udev/rules.d/70-persistent-net.rules#PCIdevice0x8086:0x100f(e1000)...
- Linux系列---网络配置文件
-
1.网卡配置文件在/etc/sysconfig/network-scripts/下:[root@oldboynetwork-scripts]#ls/etc/sysconfig/network-s...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle忘记用户名密码 (59)
- oracle11gr2安装教程 (55)
- mybatis调用oracle存储过程 (67)
- oracle spool的用法 (57)
- oracle asm 磁盘管理 (67)
- 前端 设计模式 (64)
- 前端面试vue (56)
- linux格式化 (55)
- linux图形界面 (62)
- linux文件压缩 (75)
- Linux设置权限 (53)
- linux服务器配置 (62)
- mysql安装linux (71)
- linux启动命令 (59)
- 查看linux磁盘 (72)
- linux用户组 (74)
- linux多线程 (70)
- linux设备驱动 (53)
- linux自启动 (59)
- linux网络命令 (55)
- linux传文件 (60)
- linux打包文件 (58)
- linux查看数据库 (61)
- linux获取ip (64)
- linux进程通信 (63)