Oracle恢复误删除数据,解除锁定的等SQL语句_第1页
Oracle恢复误删除数据,解除锁定的等SQL语句_第2页
Oracle恢复误删除数据,解除锁定的等SQL语句_第3页
Oracle恢复误删除数据,解除锁定的等SQL语句_第4页
Oracle恢复误删除数据,解除锁定的等SQL语句_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、注意:数据库版本是log,不过大部分9i的也适用,闪回9i就没有.这些语句可以使用与OraclelOg及以上版本:望大家切莫操作!曾经不小心把开发库的数据库表全部删除,当时吓的要死。结果找到下面的语句恢复到了 l 个小时之前的数据!很简单。注意使用管理员登录系统:select * from 表名 as of timestamp sysdate-l/l2/查询两个小时前的某表数据!既然两小时以前的数据都得到了,继续怎么做,知道了吧 。如果 drop 了表,怎么办?见下面:drop table 表名;数据库误删除表之后恢复:(绝对ok,我就做过这样的事情,汗)不过要记得删除了哪些 表名。flash

2、back table 表名 to before drop;查询得到当前数据库中锁,以及解锁:查锁SELECT /*+ rule */ s.username, decode(l.type,TM,TABLE LOCK,TX,ROW LOCK,NULL) LOCK_LEVEL, o.owner,o.object_name,o.object_type, s.sid,s.serial#,s.terminal,s.machine,gram,s.osuser FROM v$session s,v$lock l,dba_objects oWHERE l.sid = s.sidAND l.idl = o.obj

3、ect_id(+)AND s.username is NOT NULL;解锁alter system kill session sid,serial;如果解不了。直接倒 os 下 kill 进程 kill 9 spid0RA-28000:账户被锁定 因为密码输入错误多次用户自动被锁定.解决办法:alter user user_name accou nt unlock;关于查询数据库用户,权限的相关语句:Sql 代码查看所有用户: select * from dba_user;select * from all_users; select * from user_users;查看用户系统权限:

4、select * from dba_sys_privs;select * from all_sys_privs; select * from user_sys_privs;查看用户对象权限:select * from dba_tab_privs; select * from all_tab_privs;select * from user_tab_privs;查看所有角色: select * from dba_roles;查看用户所拥有的角色: select * from dba_role_privs;select * from user_role_privs;查看所有用户:select *

5、from dba_user; select * from all_users;select * from user_users;查看用户系统权限:select * from dba_sys_privs;select * from all_sys_privs;select * from user_sys_privs;查看用户对象权限:select * from dba_tab_privs;select * from all_tab_privs;select * from user_tab_privs;查看所有角色:select * from dba_roles;查看用户所拥有的角色:select

6、 * from dba_role_privs;select * from user_role_privs;几个经常用到的 oracle 视图:注意表名使用大写Sql 代码查询 oracle 中所有用户信息select * from dba_user;只查询用户和密码select username,password from dba_users;查询当前用户信息select * from dba_ustats;查询用户可以访问的视图文本select * from dba_varrays;查询数据库中所有视图的文本select * from dba_views;查询全部索引select * fro

7、m user_indexes;查询全部表格select * from user_tables;查询全部约束select * from user_constraints;查询全部对象select * from user_objects;查询 oracle 中所有用户信息 select * from dba_user;只查询用户和密码select username,password from dba_users;查询当前用户信息 select * from dba_ustats;查询用户可以访问的视图文本 select * from dba_varrays;查询数据库中所有视图的文本select

8、* from dba_views;查询全部索引select * from user_indexes; 查询全部表格select * from user_tables;查询全部约束select * from user_constraints; 查询全部对象select * from user_objects;查看当前数据库中正在执行的语句,然后可以继续做很多很多事情,例如查询执行计划等Sql 代码.查看相关进程在数据库中的会话Select a.sid,a.serial#,gram, a.status substr(a.machine,1,20), a.terminal,b.spid from v

9、$sessiona, v$process bwhere a.paddr=b.addrand b.spid =&spid;.查看数据库中被锁住的对象和相关会话select a.sid,a.serial#,a.username,gram, c.owner, c.object_namefrom v$session a, v$locked_object b, all_objects c where a.sid=b.session_id andc.object_id = b.object_id;.查看相关会话正在执行的 SQLselect sql_text from v$sqlarea where ad

10、dress( selectsql_address from v$session where( selectsql_address from v$session wheresid = &sid );.查看相关进程在数据库中的会话Select a.sid,a.serial#,gram, a.status , substr(a.machine,1,20), a.terminal,b.spid from v$session a, v$processbwhere a.paddr=b.addrand b.spid = &spid;.查看数据库中被锁住的对象和相关会话select a.sid,a.seria

11、l#,a.username,gram,c.owner, c.object_namefrom v$session a, v$locked_object b, all_objects c where a.sid=b.session_id andc.object_id = b.object_id;.查看相关会话正在执行的 SQLselect sql_text from v$sqlarea where address =( select sql_address from v$session where sid = &sid );查询表的结构:表名大写!select t.COLUMN_NAME,t.DA

12、TA_TYPE,nvl(t.DATA_PRECISION, t.DATA_LENGTH), nvl(T.DATA_SCALE, 0),mentsfrom all_tab_columns t, user_col_comments cwhEre t.TABLE_NAME = c.table_nameand t.COLUMN_NAME = c.column_nameand t.TABLE_NAME = UPPER(OM_EMPLOYEE_T)order by t.COLUMN_ID行列互换:Sql 代码 建立一个例子表:CREATE TABLE t_col_row(ID INT,c1 VARCHAR

13、2(10),c2 VARCHAR2(10),c3 VARCHAR2(10);INSERT INTO t_col_row VALUES (1, v11, v21, v31);INSERT INTO t_col_row VALUES (2, v12, v22, NULL);INSERT INTO t_col_row VALUES (3, v13, NULL, v33); INSERT INTO t_col_row VALUES (4, NULL, v24, v34); INSERT INTO t_col_row VALUES (5, v15, NULL, NULL);INSERT INTO t_c

14、ol_row VALUES (6, NULL, NULL, v35);INSERT INTO t_col_row VALUES (7, NULL, NULL, NULL); COMMIT;下面的是列转行:创建了一个视图CREATE view v_row_col ASSELECT id,c1cn,c1 cvFROM t_colrowUNION ALLSELECT id,c2cn,c2 cvFROM t_colrowUNION ALLSELECT id,c3cn,c3 cv FROM t_col_row;下面是创建了没有空值的一个竖表:CREATE view v_row_col_notnull A

15、SSELECT id, c1 cn, c1 cvFROM t_col_row where c1 is not nullUNION ALLSELECT id, c2 cn, c2 cvFROM t_col_row where c2 is not nullUNION ALLSELECT id, c3 cn, c3 cvFROM t_col_row where c3 is not null;建立一个例子表:CREATE TABLE t_col_row(ID INT,c1 VARCHAR2(10),c2 VARCHAR2(10),c3 VARCHAR2(10);INSERT INTO t_col_ro

16、w VALUES (1, v11, v21, v31);INSERT INTO t_col_row VALUES (2, v12, v22, NULL);INSERT INTO t_col_row VALUES (3, v13, NULL, v33);INSERT INTO t_col_row VALUES (4, NULL, v24, v34);INSERT INTO t_col_row VALUES (5, v15, NULL, NULL);INSERT INTO t_col_row VALUES (6, NULL, NULL, v35);INSERT INTO t_col_row VAL

17、UES (7, NULL, NULL, NULL); COMMIT;下面的是列转行:创建了一个视图CREATE view v_row_col ASSELECT id,c1cn,c1 cvFROM t_colrowUNION ALLSELECT id,c2cn,c2 cvFROM t_colrowUNION ALLSELECT id,c3cn,c3 cv FROM t_col_row;下面是创建了没有空值的一个竖表:CREATE view v_row_col_notnull ASSELECT id, c1 cn, c1 cvFROM t_col_row where c1 is not nullU

18、NION ALLSELECT id, c2 cn, c2 cvFROM t_col_row where c2 is not nullUNION ALLSELECT id, c3 cn, c3 cvFROM t_col_row where c3 is not null;下面可能是 dba 经常使用的 oracle 视图吧。呵呵Sql 代码示例:已知 hash_value:3111103299,查询 sql 语句:select * from v$sqltextwhere hashvalue=3111103299order by piece查看消耗资源最多的 SQL:SELECT hash_valu

19、e, executions, buffer_gets, disk_reads, parse_callsFROM V$SQLAREAWHERE buffer_gets 10000000OR disk_reads 1000000ORDERBY buffer_gets + 100 * disk_reads DESC;查看某条SQL语句的资源消耗:SELECT hash_value, buffer_gets, disk_reads, executions, parse_calls FROM V$SQLAREAWHERE hash_Value = 228801498AND address = hexto

20、raw(CBD8E4B0);查询 sql 语句的动态执行计划: 首先使用下面的语句找到语句的在执行计划中的address和hash_codeSELECT sql_text, address, hash_value FROM v$sql twhere (sql_ text like %FUNCTION_T(表名大写!) 然后:SELECT operation, options, object_name, cost FROM v$sql_planWHERE address = C00000016BD6D248 AND hash_value = 664376056;查询 oracle 的版本: se

21、lect * from v$version;查询数据库的一些参数:select * from v$parameter查找你的 session 信息SELECT SID, OSUSER, USERNAME, MACHINE, PROCESSFROM V$SESSION WHERE audsid = userenv(SESSIONID);当 machine 已知的情况下查找 sessionSELECT SID, OSUSER, USERNAME, MACHINE, TERMINALFROM V$SESSIONWHERE terminal = pts/tl AND machine = rgmdbs1

22、;查找当前被某个指定session正在运行的sql语句。假设sessionID为100 select b.sql_textfrom v$session a,v$sqlarea bwhere a.sql_hashvalue=b.hash_value and a.sid=100示例:已知 hash_value:3111103299,查询 sql 语句: select * from v$sqltextwhere hashvalue=3111103299order by piece查看消耗资源最多的 SQL:SELECT hash_value, executions, buffer_gets, dis

23、k_reads, parse_callsFROM V$SQLAREAWHERE buffer_gets 10000000OR disk_reads 1000000ORDERBY buffer_gets + 100 * disk_reads DESC;查看某条SQL语句的资源消耗:SELECT hash_value, buffer_gets, disk_reads, executions, parse_callsFROM V$SQLAREAWHERE hash_Value = 228801498AND address = hextoraw(CBD8E4B0);查询 sql 语句的动态执行计划:首

24、先使用下面的语句找到语句的在执行计划中的address和hash_codeSELECT sql_text, address, hash_value FROM v$sql twhere (sql_ text like %FUNCTION_T(表名大写!)然后:SELECT operation, options, object_name, cost FROM v$sql_planWHERE address = C00000016BD6D248 AND hash_value = 664376056;查询 oracle 的版本: select * from v$version;查询数据库的一些参数:s

25、elect * from v$parameter查找你的 session 信息SELECT SID, OSUSER, USERNAME, MACHINE, PROCESSFROM V$SESSION WHERE audsid = userenv(SESSIONID);当 machine 已知的情况下查找 sessionSELECT SID, OSUSER, USERNAME, MACHINE, TERMINALFROM V$SESSIONWHERE terminal = pts/tl AND machine = rgmdbs1;查找当前被某个指定session正在运行的sql语句。假设sess

26、ionlD为100 select b.sql_textfrom v$session a,v$sqlarea bwhere a.sql_hashvalue=b.hash_value and a.sid=100树形结构 connect by 排序:Sql 代码 查询树形的数据结构,同时对一层里面的数据进行排序 SELECT last_name, employee_id, manager_id, LEVELFROM employeesSTART WITH employee_id = 100CONNECT BY PRIOR employee_id = manager_id ORDER SIBLINGS

27、 BY last_name;下面是查询结果LAST_NAME下面是查询结果LAST_NAMEEMPLOYEE_ID MANAGER_ID LEVELKing100King100Cambrault1481002Bates1721483Bloom1691483Fox1701483Kumar1731483Ozer1681483Smith1711483De Haan1021002Hunold1031023Austin1051034Ernst1041034Lorentz1071034Pataballa1061034Errazuriz1471002Ande1661473Banda1671473查询树形的数

28、据结构,同时对一层里面的数据进行排序 SELECT last_name, employee_id, manager_id, LEVEL FROM employeesSTART WITH employee_id = 100CONNECT BY PRIOR employee_id = manager_idORDER SIBLINGS BY last_name;面是查询结果LAST_NAMEEMPLOYEE_ID MANAGER_IDLEVELKing1001Cambrault1481002Bates1721483Bloom1691483Fox1701483Kumar1731483Ozer16814

29、83Smith1711483De Haan1021002Hunold1031023Austin1051034Ernst1041034Lorentz1071034Pataballa1061034Errazuriz1471002Ande1661473Banda1671473有时候写多了东西,居然还忘记最基本的sql语法,下面全部写出来,基本的oracle语 句都在这里可以找到了。是很基础的语句!Sql 代码在数据字典查询约束的相关信息:SELECT constraint_name, constraint_type,search_conditionFROMuser_constraints WHERE

30、table_name = EMPLOYEES;/这里的表名都是大写!对表结构进行说明:desc Tablename查看用户下面有哪些表select table_name from user_tables;查看约束在那个列上建立:SELECT constraint_name, column_nameFROMuser_cons_columnsWHEREtable_name = EMPLOYEES;0结合变量查找相关某个表中约束的相关列名:select constraint_name,column_name from user_cons_columns where table_name = &tab

31、lename查询数据字典看中间的元素:SELECTobject_name, object_typeFROMuser_objectsWHEREobject_name LIKEEMP%ORobject_name LIKEDEPT%查询对象类型:SELECT DISTINCT object_type FROMuser_objects ;改变对象名:(表名,视图,序列)rename emp to emp_newTable添加表的注释:COMMENT ON TABLE employees IS Employee Information;20 查看视图结构: describe view_name在数据字典

32、中查看视图信息: select viewe_name,text from user_views25 查看数据字典中的序列:select * from user_sequences33 得到所有的时区名字信息:select * from v$timezone_names34显示对时区US/Eastern的时区偏移量select TZ_OFFSET(US/Eas tern) from DUALdual 英文意思是双重的 显示当前会话时区中的当前日期和时间:ALTER SESSION SET NLS_DATE_FORMAT = DD-MON-YYYY HH24:MI:SS;-修改显示时间的 方式的设

33、置ALTER SESSION SET TIME_ZONE = -5:0;-修改时区SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL;-真正有用的语句!SELECT CURRENT_TIMESTAMP FROM DUAL;-返回的时间是当前日期和时间,含有时区SELECT CURRENT_TIMESTAMP FROM DUAL;-返回的时间是当前日期和时间,不含有时区!35 显示数据库时区和会话时区的值:select datimezone,sessiontimezone from dual;普通的建表语句:CREATE TABLE dept(deptn

34、oNUMBER(2),dnameVARCHAR2(14),locVARCHAR2(13);使用子查询建立表:CREATE TABLEdept80AS SELECT employee_id, last_name,salary*12 ANNSAL,hire_date FROM employees WHERE department_id = 80;添加列:/ alter table EMP add column (dept_id number(7);错误!alter table EMP add (dept_id number(7);删除一列:alter table emp drop column d

35、ept_id;添加列名同时和约束:alter table EMP add (dept_id number(7)constraint my_emp_dept_id_fk references dept(ID);改变列: /注意约束不能够修改 的!alter t able dep t80 mod if y(las t_name varchar2(30);/这里使用的是 mod ify 而不是 alter!增加一行:insert into table_name values();添加主键:alter Table EMP add constraint my_emp_id_pk primary key

36、(ID);添加一个有 check 约束的新列:alter table EMPadd (COMMISSION number(2) constraint emp_commission_ck check(commission0)删除表:drop table emp;创建视图:CREATE VIEW empvu80AS SELECT employee_id, last_name, salaryFROM employees WHERE department_id = 80;21 删除视图:drop view view_name22找到工资最高的5个人。(top-n分析)(行内视图)select rown

37、um,employee_id from (select employee_id,salary from employees order by salary desc)where rownum5;26 建立同义词:create synonym 同义词名 for 原来的名字或者 create public synonym 同义词名 for 原来的名字 27建立序列:(注意,这里并没有出现说是哪个表里面的序列 !)CREATE SEQUENCE dept_deptid_seqINCREMENT BY 10START WITH 120 MAXVALUE 9999 NOCACHE NOCYCLE使用序列

38、:insert into dept(ID,NAME) values(DEPT_ID_SEQ.nextval,Administration); 29建立索引:/默认就是nonunique索引,除非使用了关键字:uniqueCREATE INDEX emp_last_name_idx ON employees(last_name); 30建立用户:(可能有错,详细查看帮助)crea te user username(用 户名)identified by oracle(密码)default tablespace data01(表空间名/默认存在system表空间里面)quota 10M(设置大小,最

39、大为unlimited) on表空间名/必须分配配额!创建角色: create ROLE manager赋予角色权限: grant create table,create view to manage 赋予用户角色: grant manager to DENHAAN,KOCHHAR( 两个用户)分配权限:GRANT update (department_name, location_id)ONdepartmentsTOscott, manager;回收权限REVOKE select, insertONdepartmentsFROMscott;36 从时间中提取年,月,日:使用函数 extrac

40、tselect extract(year from sysdate) year,extract(month from sysdate), extract(day from sysdate) from dual;37使用函数得到数月之后的日期:to_yminterval (01-02表示加上1年2月,不能够到 天!select hire_date,hire_date +to_yminterval(01-02) as hire_date_new from employees where department_id=20得到多少天之后的日期:直接日期加数字!select hire_date +3 f

41、rom employees where department_id=2038 一般的时间函数:MONTHS_BETWEEN (01-SEP-95,11-JAN-94)-两个日期之间的月数,返回一个浮 点数ADD_MONTHS (11-JAN-94,6)-添加月数NEXT_DAY (01-SEP-95,FRIDAY) -下一个星期五的日期LAST_DAY(01-FEB-95)-当月的最后一天!ROUND(SYSDATE,MONTH)-四舍五入月ROUND(SYSDATE ,YEAR)-四舍五入年TRUNC(SYSDATE ,MONTH)-阶段月TRUNC(SYSDATE ,YEAR)-截断年39

42、 group 语句:和高级的应用语句:SELECT department_id, job_id, SUM(salary), COUNT(employee_id) FROM employeesGROUP BY department_id, job_id ;使用 having 进行约束:group by rollup:对n列组合得到n+1种情况SELECT department_id, job_id, SUM(salary)FROM employeesWHERE department_id 60 GROUP BY ROLLUP(department_id, job_id);group by cub

43、e:得到2的n次方种情况SELECT department_id, job_id, SUM(salary) FROM employees WHERE department_id 60 GROUP BY CUBE (department_id, job_id) ;3使用grouping得到一行中构成列的情况,只是返回1和0:是空的话就返回1, 否则返回 0(注意不要弄反了!)SELECTdepartment_id DEPTID, job_id JOB,SUM(salary),GROUPING(department_id) GRP_DEPT, GROUPING(job_id) GRP_JOBFRO

44、Memployees WHEREdepartment_id b.salavg;41exists 语句的使用:SELECT employee_id, last_name, job_id, department_idFROMemployeesouter-下面的 exists 里面的 select 选择出来的是随便的一个字符或者数字都可以WHERE EXISTS ( SELECT X FROM employees WHERE manager_id = outer.employee_id);42 厉害的 with 语句:WITHdept_costs AS (-定义了一个临时的表SELECT d.dep

45、artment_name, SUM(e.salary) AS dept_total-其间定 义了一个临时的列 dept_totalFROM employees e, departments dWHERE e.department_id = d.department_idGROUP BY d.depar tmen t_ name),/*注意这里有逗号 */avg_cost AS (SELECT SUM(dept_total)/COUNT(*) AS dept_avgFROMdept_costs)-这里的第二张临时表里面就引用了前面定义的临时表和之间的列!SELECT * FROM dept_co

46、sts WHERE dept_total (SELECTdept_avg FROM avg_cost) ORDER BY department_name;-最后的查询语句中使用了前面的临时表 43 遍历树:SELECT employee_id, last_name, job_id, manager_idFROM employeesSTART WITH employee_id = 101CONNECT BY PRIOR manager_id = employee_id ;-自底向上的遍历树。44. 更新语句UPDATE employees SETjob_id = SA_MAN, salary =

47、 salary + 1000, department_id = 120 WHERE first_name| |last_name = Douglas Grant;UPDATE TABLE (SELECT projsFROM dept d WHERE d.dno = 123) pSET p.budgets = p.budgets + 1WHERE p.pno IN (123, 456);在数据字典查询约束的相关信息:SELECT constraint_name, constraint_type,search_conditionFROMuser_constraints WHEREtable_nam

48、e = EMPLOYEES;/这里的表名都是大写!对表结构进行说明:desc Tablename查看用户下面有哪些表select table_name from user_tables;查看约束在那个列上建立:SELECT constraint_name, column_nameFROMuser_cons_columnsWHERE table_name = EMPLOYEES;结合变量查找相关某个表中约束的相关列名:select constraint_name,column_name from user_cons_columns where table_name = &tablename查询数

49、据字典看中间的元素:SELECTobject_name, object_typeFROMuser_objectsWHEREobject_name LIKEEMP%ORobject_name LIKEDEPT%查询对象类型:SELECT DISTINCT object_type FROM user_objects ;改变对象名:(表名,视图,序列)rename emp to emp_newTable添加表的注释:COMMENT ON TABLE employees IS Employee Information;查看视图结构:describe view_name23 在数据字典中查看视图信息:s

50、elect viewe_name,text from user_views查看数据字典中的序列:select * from user_sequences得到所有的时区名字信息:select * from v$timezone_names34显示对时区US/Eastern的时区偏移量select TZ_OFFSET(US/Eas tern) from DUALdual 英文意思是双重的 显示当前会话时区中的当前日期和时间:ALTER SESSION SET NLS_DATE_FORMAT = DD-MON-YYYY HH24:MI:SS;-修改显示时间的 方式的设置ALTER SESSION S

51、ET TIME_ZONE = -5:0;-修改时区SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL;-真正有用的语句!SELECT CURRENT_TIMESTAMP FROM DUAL;-返回的时间是当前日期和时间,含有时区SELECT CURRENT_TIMESTAMP FROM DUAL;-返回的时间是当前日期和时间,不含有时区!35 显示数据库时区和会话时区的值:select datimezone,sessiontimezone from dual;普通的建表语句:CREATE TABLE dept(deptnoNUMBER(2),dname

52、VARCHAR2(14),locVARCHAR2(13);使用子查询建立表:CREATE TABLEdept80AS SELECT employee_id, last_name,salary*12 ANNSAL,hire_date FROM employees WHERE department_id = 80;添加列:/ alter table EMP add column (dept_id number(7);错误! alter table EMP add (dept_id number(7);删除一列:alter table emp drop column dept_id;添加列名同时和约

53、束:alter table EMP add (dept_id number(7) constraint my_emp_dept_id_fk references dept(ID);改变列: /注意约束不能够修改 的!alter t able dep t80 mod if y(las t_name varchar2(30);/这里使用的是 mod ify 而不是 alter!24 增加一行:insert into table_name values();添加主键:alter Table EMP add constraint my_emp_id_pk primary key (ID);添加一个有

54、check 约束的新列:alter table EMPadd (COMMISSION number(2) constraint emp_commission_ck check(commission0)删除表:drop table emp;创建视图:CREATE VIEWempvu80AS SELECT employee_id, last_name, salaryFROM employees WHERE department_id = 80;删除视图:drop view view_name22找到工资最高的5个人。(top-n分析)(行内视图)select rownum,employee_id

55、from (select employee_id,salary from employees order by salary desc)where rownum5;建立同义词:create synonym 同义词名 for 原来的名字或者 create public synonym 同义词名 for 原来的名字 27建立序列:(注意,这里并没有出现说是哪个表里面的序列 !)CREATE SEQUENCE dept_deptid_seqINCREMENT BY 10START WITH 120 MAXVALUE 9999 NOCACHE NOCYCLE使用序列:insert into dept(

56、ID,NAME) values(DEPT_ID_SEQ.nextval,Administration);建立索引: /默认就是 nonunique 索引,除非使用了关键字: uniqueCREATE INDEX emp_last_name_idx ON employees(last_name);建立用户:(可能有错,详细查看帮助)crea te user username(用户名)identified by oracle(密码)default tablespace data01(表空间名/默认存在system表空间里面) quota 10M(设置大小,最大为unlimited) on表空间名/

57、必须分配配额!创建角色:create ROLE manager赋予角色权限: grant create table,create view to manage赋予用户角色: grant manager to DENHAAN,KOCHHAR( 两个用户)分配权限:GRANT update (department_name, location_id)ONdepartmentsTOscott, manager;回收权限REVOKE select, insertONdepartmentsFROMscott;36从时间中提取年,月,日:使用函数extractselect extract(year fro

58、m sysdate) year,extract(month from sysdate), extract(day from sysdate) from dual;37使用函数得到数月之后的日期:to_yminterval (01-02表示加上1年2月,不能够到 天!select hire_date,hire_date +to_yminterval(01-02) as hire_date_new from employees where department_id=20得到多少天之后的日期:直接日期加数字!select hire_date +3 from employees where depa

59、rtment_id=20一般的时间函数:MONTHS_BETWEEN (01-SEP-95,11-JAN-94)-两个日期之间的月数,返回一个浮点数ADD_MONTHS (11-JAN-94,6)-添加月数NEXT_DAY (01-SEP-95,FRIDAY) -下一个星期五的日期LAST_DAY(01-FEB-95)-当月的最后一天!ROUND(SYSDATE,MONTH)-四舍五入月ROUND(SYSDATE ,YEAR)-四舍五入年TRUNC(SYSDATE ,MONTH)-阶段月TRUNC(SYSDATE ,YEAR)-截断年group 语句:和高级的应用语句:SELECT department_id, job_id, SUM(salary), COUNT(employee_id) FROM employeesGROUP BY department_id, job_id ;使用having进行约束:1.group by rollup:对n列组合得到n+1种情况SELECT departmen

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论