oracle数据库
2021-11-29 13:42:01 49 举报
AI智能生成
登录查看完整内容
oracle SQL基础 及plsql编程框架
作者其他创作
大纲/内容
一对一关系
一对多关系
多对多关系
关系型数据库
数据库概述
日志文件
表空间
数据文件
归档日志
重做日志
控制文件
oracle安装使用
select * from table;
select field from table;
select distinct(field) from table;
select field as field from table
select field || field from table;
简单查询
select count(*) from table;
select * from table where field > value;
> < = != >= <=
and
or
not
between and
null
is not null
is null
in not in
like / not like
条件
条件查询
升序
asc
降序
desc
order by
排序显示
upper
lower
首字母大写
initcap
替换函数
replace
长度
length
截取字符串
substr
ascii
char
左填充
LPAD
右填充
RPAD
查找
instr
字段操作
LTRIM
RLTRIM
TRIM
去空格
round
trunc
mod
运算
select sysdate from dual;
sysdate
add_months
next_day
last_day
months_between
日期运算
to_char
to_date
to_timstamp
to_number
转换
nvl
nullif
decode
coalesce
判断
单行函数
笛卡尔积
e.deptno=d.deptno ;
内连接
WHERE e.deptno=d.deptno(+)
左外连接
WHERE e.deptno(+)=d.deptno ;
右外连接
cross join
交叉连接
nation join
自然连接
left outer join
right outer join
full outer join
join
union
union all
差集
minus
交集
intersect
多表查询
sum
avg
max
min
中间值
median
标准差
atddev
方差
variance
count
分组列
group by
分组统计 条件
having
分组统计
条件子查询
字段子查询
any
all
exists
not exists
with
partition
over
rank
子查询
create table table as select * from table;
insert into table values();
update table set field = where ;
delete
更新
commit
rollback
for update;
锁表
事务操作
&input
替代变量
rename
drop table
alter table tabel
表的创建与管理
not null
unique
primary key
check
完整性约束
view
同义词
索引
其他数据库对象
用户权限角色管理
数据库基础
insert
插入数据
update
更新数据
delete
删除数据
select
查询
条件分支
循环
数据库操作
DECLARE -- 声明部分 变量名 变量类型 := 初始值 变量名 emp.sal%TYPE --- 引用类型的变量 转载1个记录 emp%rowtype ---- 记录型变量 装载行记录 BEGIN -- 业务逻辑 END ;
变量声明
number
varchar2
date
变量类型
CONSTANT
常量
DECLARE b NUMBER := 123; BEGIN dbms_output.put_line(b);END;
格式
plsql程序块
DECLARE cou NUMBER;BEGIN SELECT COUNT(1) INTO cou FROM emp; IF cou < 10 THEN dbms_output.put_line('xiaoyu 10'); ELSIF cou >10 THEN dbms_output.put_line('dayu 10'); ELSE dbms_output.put_line('error'); END IF;END;
条件判断
DECLARE i NUMBER ;BEGIN FOR i IN 1..10 LOOP dbms_output.put_line(i); END LOOP;END;
DECLARE i NUMBER:=0;BEGIN WHILE i <= 10 LOOP dbms_output.put_line(i); i:=i+1; END LOOP;END;
DECLARE i NUMBER := 0;BEGIN LOOP EXIT WHEN i>10; dbms_output.put_line(i); i:=i+1; END LOOP;END;
plsql基础语法
概念
打开 open 游标名
fetch 游标名 into 变量 游标名%notfound 没有数据 游标名%found 发现数据
关闭游标 close
步骤
DECLARE CURSOR vemps IS SELECT * FROM emp; vrow emp%ROWTYPE;BEGIN OPEN vemps; LOOP FETCH vemps INTO vrow; EXIT WHEN vemps%NOTFOUND; dbms_output.put_line(vrow.ename); END LOOP; CLOSE vemps;END;
LOOP遍历游标
DECLAREvrow emp%ROWTYPE;BEGIN FOR vrow IN (SELECT * FROM emp ) LOOP dbms_output.put_line('姓名:'||vrow.ename||' 工资:'||vrow.sal); END LOOP;END;
FOR IN LOOP 遍历游标
游标
begin exception when thenend;
DECLARE v_i NUMBER := 12; v_j NUMBER := 0; v_re NUMBER;BEGIN v_re :=v_i / v_j; dbms_output.put_line(v_re);EXCEPTION WHEN too_many_rows THEN DBMS_OUTPUT.put_line('查询多行记录'); WHEN no_data_found THEN DBMS_OUTPUT.put_line('没有发现数据'); WHEN value_error THEN DBMS_OUTPUT.put_line('值错误'); WHEN zero_divide THEN DBMS_OUTPUT.put_line('除数不能为O'); WHEN OTHERS THEN DBMS_OUTPUT.put_line('未知异常');END;
语法格式
DECLARE V_I NUMBER := 0; E_ERR EXCEPTION; v_count NUMBER;BEGIN SELECT COUNT(1) INTO v_count FROM emp1; FOR rc IN (SELECT * FROM emp1) LOOP dbms_output.put_line(rc.empno||'--'||rc.ename); END LOOP; IF v_count = 0 THEN RAISE E_ERR; END IF; EXCEPTION WHEN E_ERR THEN DBMS_OUTPUT.PUT_LINE('没有员工数据');END;
DECLARE E_ERR EXCEPTION; V_EMP EMP1%ROWTYPE; V_EMPNO EMP1.EMPNO%TYPE; V_ENAME EMP1.ENAME%TYPE;BEGIN FOR RC IN (SELECT * FROM EMP1) LOOP v_empno :=rc.empno; v_ename :=rc.ename; DBMS_OUTPUT.put_line(v_empno||v_ename); END LOOP; IF V_EMPNO IS NULL THEN RAISE E_ERR; END IF; EXCEPTION WHEN e_err THEN dbms_output.put_line('没有发现数据;');END;
自定义异常
异常
CREATE OR REPLACE PROCEDURE pro_delete (v_id IN NUMBER)IS e_err EXCEPTION; e_suss EXCEPTION;BEGIN DELETE FROM dept1 WHERE dept1.deptno = v_id; IF sql%ROWCOUNT > 0 THEN COMMIT; RAISE e_err; ELSE ROLLBACK; RAISE e_suss; END IF; EXCEPTION WHEN e_err THEN dbms_output.put_line('数据删除成功'); WHEN e_suss THEN dbms_output.put_line('没有找到需要删除的数据');END;
示例
存储过程
create [or replace] function 函数名称(参数1 in|out 参数类型) return 返回类型isbeginend;
与存储过程区别
CREATE OR REPLACE FUNCTION f_get_sal (v_empno IN NUMBER) RETURN NUMBERIS v_sal NUMBER;BEGIN SELECT sal INTO v_sal FROM emp WHERE emp.empno = v_empno; RETURN v_sal;END;
存储函数
数据库触发器是一个与表相关的、存储的PL/SQL程序。每当一个特定的数据操作语句(insert,update,delete)在指定的表上发出是,Oracle自动地执行触发器中定义的语句序列。
监听表中的数据变化;
对表中的数据进行校验
作用
CREATE [OR REPLACE] TRIGGER 触发器名称{BEFORE | AFTER}{INSERT | UPDATE | DELETE}ON 表名[ FOR EACH ROW [WHEN(条件)]]DECLARE ....BEGIN PLSQL块END 触发器名;
语法
CREATE OR REPLACE TRIGGER t_insert_deptBEFOREINSERT ON deptDECLAREBEGIN dbms_output.put_line('更新后新增了一个数据');END;
表级触发器
CREATE OR REPLACE TRIGGER t_update_empBEFOREUPDATE ON emp FOR EACH ROWDECLARE BEGIN dbms_output.put_line(:old.sal||'---'||:NEW.sal);END;
行级触发器
CREATE OR REPLACE TRIGGER t_update_empBEFOREUPDATE ON emp FOR EACH ROWDECLARE BEGIN IF :new.sal>:old.sal THEN dbms_output.put_line(:old.sal||'---'||:NEW.sal); ELSE dbms_output.put_line(:old.sal||'---'||:NEW.sal); END IF; END;
触发器
数据库编程
oracle数据库基础与编程
0 条评论
回复 删除
下一页