前言:
今天兄弟们对“oracle分析函数累计求和”大约比较关怀,同学们都需要知道一些“oracle分析函数累计求和”的相关资讯。那么小编同时在网上网罗了一些关于“oracle分析函数累计求和””的相关文章,希望我们能喜欢,小伙伴们一起来了解一下吧!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;
标签: #oracle分析函数累计求和