Oracle复习笔记(五)

2015-02-02 23:25:38 · 作者: · 浏览: 23
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; /*----------------------------------------游标使用----------