Oracle复习笔记(五)
3') from dual;
select nvl(null,'is null'),nvl('lee','is null') from dual;
select nvl2(null,'is null','not is null') from dual;
select '星期' || decode(7,1,'一',2,'二',3,'三',4,'四',5,'五',6,'六',7,'日') from dual;
--case when的使用
select ename,sal,
case
when sal = (select sal from emp where ename = 'KING') then 'BOSS'
when sal between 3000 and 4999 then '太牛了'
else '太少了'
end 工资水准
from emp;
select ename,sal,
case ename
when 'KING' then 'BOSS'
else '员工'
end 工资水准
from emp;
/*----------------------------------------数据库字典----------------------------------------*/
--查询当前数据库
select * from global_name;
--查询当前用户可以访问的数据库字典
select * from dict where comments like '%grant%';
--查询用户
select * from user_users;
select * from dba_users;
--查看序列
select sequence_name,sequence_owner from user_sequences;
select sequence_name,sequence_owner from all_sequences
[where sequence_owner = 'SCOTT'];
--查询表(all_tables当前用户表以及可操作表)
select table_name,tablespace_name from user_tables;
select table_name,tablespace_name from dba_tables;
select table_name,tablespace_name from all_tables;
--查看视图
select * from user_views;
select * from dba_views;
--查看索引
select * from user_indexes;
select * from dba_indexes;
--查询表空间
select tablespace_name from dba_tablespaces;
select tablespace_name from user_tablespaces;
--查询当前用户包含的角色
select * from user_role_privs;
--查询所有系统权限
select * from system_privilege_map;
--查询对象权限
select distinct privilege from user_tab_privs;
select distinct privilege from dba_tab_privs [where grantee = 'CONNECT'];
--查询所有角色(dba)
select * from dba_roles;
--查询指定用户包含的角色(dba)
select * from dba_role_privs where grantee = 'SCOTT';
--查询指定角色包含的系统权限(dba)
select * from dba_sys_privs where grantee = 'CONNECT';
--查询指定角色包含的对象权限(dba)
select * from dba_tab_privs where grantee = 'CONNECT';
/*----------------------------------------PL-SQL----------------------------------------*/
SQL:结构化查询语言(数据库行业的标准)
T-SQL:事务的结构化查询语言,是SQLServer对SQL的扩展
PL-SQL:过程语言和结构化查询语言,是Oracle对SQL的扩展:
1、使用变量,使用流程控制结构
2、使用过程、函数封装复杂的业务逻辑(变量、流程控制、SQL操作)
3、对Oracle基本的数据类型进行了扩展(属性类型)
数据类型:
e_name emp.ename%type; --列类型(引用表中指定列的类型)
e_emp_row emp%rowtype; --行类型(引用表中行的类型)
v_bool boolean; --布尔类型 boolean(取值true,false,null,仅用于逻辑判断,不能直接输出)
异常处理:exception
1、others 能处理所有异常
2、select..into.. 如果未找到数据,则引发no_data_found异常
3、select..into.. 如果返回值过多,则引发too_many_rows异常
4、使用raise_application_error引发应用程序异常
1)raise_application_error(错误号,错误信息)
2)错误号在[-20999,-20000]之间
3)错误信息必须小于2048字节
语法:
[declare
--任何类型的变量在未赋值之前,默认为null
声明变量、类型、游标...;]
begin
实现功能的代码...;
--others可以捕获所有异常
[exception when 异常类型
then 异常处理;]
end;
--查询员工KING的编号和薪水(匿名块)
declare
v_empno number;
v_sal number(10,2);
begin
select empno,sal into v_empno,v_sal from emp where ename = 'KING';
dbms_output.put_line('EMPNO:' || v_empno || ' SAL:' || v_sal);
end;
--loop、while、for循环
declare
v_num number(2) := 1;
begin
loop
dbms_output.put_line(v_num);
v_num := v_num + 1;
exit when v_num >
10;
--if v_num > 10 then exit; end if;
end loop;
end;
declare
v_num number(10) := 1;
begin
while v_num 1=1 loop
dbms_output.put_line(v_num);
v_num := v_num + 1;
end loop;
end;
declare
begin
--in后加reverse倒序,i值不可更改
for i in 1..10 loop
dbms_output.put_line(i);
end loop;
end;
/*----------------------------------------游标使用----------