SQL · PLSQL - 复习笔记
2022/1/5 2:03:34
本文主要是介绍SQL · PLSQL - 复习笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Oracle的发展
Oracle的发展历程
Oracle数据库的基本结构
Oracle数据库的逻辑结构
Oracle数据库的物理结构
数据文件
日志文件
控制文件
参数文件
Oracle的内存结构
Oracle的进程结构
数据库及管理
数据库操作
相关术语
-
数据库名
-
数据库实例名
数据库名与实例名之间的关系
-
操作系统环境变量
-
数据库域名
-
全局数据库名
-
数据库服务名
数据库配置修改
- NET服务名
- TNS文件配置
创建数据库 - create database database_name
表空间的创建和管理
SQL语言
数据定义语言 - DDL
常见数据类型
- char
- varchar
- int 或者 integer
- smallint
- real \ float \ double
- numeric
- DateTime
- Text
- Image
create
create table Student( sno char(20) primary key, sname varchar(20) not null ); -- Oracle中 -- 复制表 create table table_name as select * from table_name; -- 只复制表结构 create table table_name as select * from table_name where 1=2;
primary key 用来指示表的关键字(主码)
也可以这样用:
primary key(sno,cno)
not null 用以表现字段不能为空
创建视图
create view view_name as (select * from table_name); -- 注意 as
创建约束
alter
-
add
alter table table_name add column_name 数据类型; -- 例如,给Student表添加字段 phone char(16) alter table Student add phone char(16);
-
alter
-- 修改表结构 -- alter table 表名 alter column 字段名 字段类型 alter table table_name alter column sdept varchar(1);
-
drop
-- 删除字段 alter table table_name drop column column_name;
drop
drop table Student;
删除表顺序应当是:关联表 -- 基本表
删除约束
数据操纵语言 - DML
select
select column_name from table_name where
select column_name from table_name table_name_temp where -- table_name_temp为table_name的代替,此时不使用as说明 -- where条件中table_name由table_name_temp代替
rownum
select * from (select * from table_name) where rownum<=number; -- 找出在结果select * from table_name中的前number列 -- 只能使用 "<" or "<="
insert
insert into table_name() values (); -- 也可省略成 insert into table_name values();
update
update table_name set colmun=() where
delete
delete from table_name where
数据控制语言 - DCL
grant
-- 给用户赋予连接权 grant connect to user_name; -- 具有connect权限的用户 == 具有权限 -- alter table -- create table/index -- drop table/view/index -- grant -- revoke -- insert/select/update/delete -- audit/noaudit -- 给用户分配建表权 grant create table to user_name; -- 此时用户不能成功建表,因为没有表空间操作权 alter user user_name quota size on table_space_name; -- table_space_name一般为users -- 将select权限赋予一个角色 grant select on table_name to (角色名); -- 将select权限赋予所有人 grant select on table_name to public;
在给用户赋予连接权之前,创建用户:
create user user_name identified by password
如果使用某版本的 Oracle,用户名前需要带上
C##
即写为C##user_name
注意
create table
权限和create any table
权限的区别
revoke
-- 收回用户的建表权 revoke create table from user_name;
deny
常用SQL语句
通配符
-
"%" 匹配任意字符串
-
"_" 匹配任意一个字符
如果需要查询的条件中包括通配符,例如:查找名字中带有 "__"的数据
-- escape 规定转义字符为'\' select sname from Student where sname like '%\_%' escape '\';
order by
- ASC - 升序
- DESC - 降序
group by
聚合函数
-
avg
-
sum
-
min
-
max
-
count
统计去重后的数量:
count (distinct column_name)
having
用在 group by
子句后面,针对聚合函数的结果值进行筛选
块插入
insert into Student() select column_name from table_name where -- select子句的column与Student()对应
连接
内连接
外连接
查看常量
-- Oracle -- Oracle中常量放在dual中 select sysdate from dual; -- SQL Server select getdate();
用户输入
select * from table_name where column_name=&temp; -- &temp为用户输入
PL/SQL
匿名块 - 测试程序
不能直接使用DDL
declare 变量 -- 变量赋值语句为 var_name:=constant begin 程序 -- "<>" "!=" 不等于 -- "||" 连接 -- "and" 并且 -- "or" 或者 exception when then end;
if then - elsif then - else - end if;
if then elsif then else end if;
loop - end loop
-- 循环 loop exit when -- 结束循环 end loop; -- while while () loop end loop; -- for for var in [] loop end loop;
常用函数
输出一行:dbms_output.put_line();
dbms_output.put_line('muhuai');
输出不带空行:
dbms_output.put()
字节填充:rpad();
dbms_output.put_line(rpad('muhuai',number,char_c)); -- number为输出行的字符长度,char_c为填充字符
游标
显式游标
声明游标
游标和查询关联
cursor cursor_name is select
使用游标
-- 打开游标 open cursor_name; close cursor_name; -- 遍历游标 -- 需要一个游标类型的变量 var_cursor cursor_name%rowtype; fetch cursor_name into var_cursor; -- 此时游标将第一条数据放入var_cursor
open cursor_name; fetch cursor into var_cursor; while cursor%found loop -- 循环在游标便利结束后结束 end loop; close cursor_name;
select for update
隐式游标
无法open/close/loop/fetch
游标在commit操作后重置
sql%found -- 说明语句修改到行 sql%notfound -- 说明语句没有修改到行 sql%rowcount -- 语句修改到的行数
动态游标 - 游标变量 - 弱游标
游标的具体查询语句不在 declare 块中定义,在 declare 块中只定义游标名称,sql语句定义在 begin 块中
declare type ref_cursor_name is ref cursor; -- 定义变量 var_ref_cursor ref_cursor_name; -- 动态游标 begin open var_ref_cursor for select ; -- 打开动态游标 -- 此时游标为var_ref_cursor -- 遍历动态游标,方法同遍历游标 close var_ref_cursor; end;
存储过程
需要通过主程序调用(测试程序调用)
主程序调用之前,过程程序段需要运行保存一下
create or replace procedure procedure_name [(var_in in var_type,var_out out var_type)] is -- 变量定义 begin -- 程序 exception end;
-- 测试程序调用 declare begin procedure_name[(var_in,var_out)]; -- 或者 procedure_name[(var_1=>var_in,var_2=>var_out)]; end;
函数
需要通过主程序调用(测试程序调用)
主程序调用之前,过程程序段需要运行保存一下
create or replace function function_name [(var_in in var_type)] [return return_type] is begin -- 如果有 return,则一定要 return end;
包
需要通过主程序调用(测试程序调用)
主程序调用之前,过程程序段需要运行保存一下
创建 -- 程序块 -- 包
包头和包体不在同一程序块中,但是保证包头名和包体名相同
-- 包头 create or replace package package_name is -- 变量定义 var var_type; cursor cursor_name is select ; procedure procedure_name (var_in in_type,var_out out out_type); function function_name(var_in in_type) return return_type; end package_name;
-- 包体 create or replace package body package_name as -- 包体变量定义 begin -- 包头程序、函数的实现 end package_name;
-- 测试程序 declare begin var_1:=package_name.var; package_name.procedure_name(); var_2:=package_name.function_name(); open package_name.cursor_name; close package_name.cursor_name; end;
SQL开发
动态SQL - 针对DDL和不确定的DML
execute immediate
用以执行PL/SQL中的SQL语句
execute immediate 'create table table_name ···';
触发器
类似于过程或者函数
发生在DML操作上
触发器名字不可相同
-- 创建触发器 create or replace trigger trigger_name [before|after|instead of] [insert|delete|update] on table_name for each row begin if inserting then elsif updating then elsif deleting then end if; end; -- 删除触发器 drop trigger trigger_name; -- 禁止|打开触发器 alter trigger trigger_name disable|enable;
伪记录
-- :new -- delete 语句不存在相应的 :new
-- :old -- insert 语句不存在相应的 :old
raise_application_error
-- 自定义错误类型返回 -- 因为Oracle中错误码-20000以前都被占用了,所以自定义错误码从-20000开始 -- 错误码取值范围 [-20000,-20999] if then raise_application_error(-20000,'报错内容'); end if;
这篇关于SQL · PLSQL - 复习笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?