oracle笔记

oracle配置信息目录:
product\11.1.0\db_1\NETWORK\ADMIN
sqlnet.ora文件修改主机无密码登陆 倒数第二行SQLNET.AUTHENTICATION_SERVICES= (NTS) 表示可以无

密码登陆注释掉就可以了
  eg:cmd->sqlplus->sys/manager as sysdba注意结尾没有分号
tnsnames.ora查看实例名

查看oracle信息select * from v$version;
查询表结构desc table_name;
oracle临时表dual
随机数函数dbms_random.random
序号rownum
修改一张表的主键
alter table aaa drop constraint aaa_key ;
alter table aaa add constraint aaa_key primary key(a1,b1);
查看哪些用户拥有SYSDBA、SYSOPER权限select * from V_$PWFILE_USERS;
单独备份一个或多个用户exp system/manager owner=(用户1,用户2,…,用户n) file=导出文件
执行sql文件,@e:/app/show.sql;表示执行e:/app/show.sql文件
快速清空表truncate table table_name;
查询数据有多少表select count(*) from all_tables;
字符串的连接SELECT CONCAT(COL1,COL2) FROM TABLE;或SELECT COL1||COL2 FROM TABLE;
导出select查询结果到文件spool c:\abc.txt;select * from table;spool off;
如何在sqlplus下改变字段大小?  alter table table_name modify (field_name varchar2(100));
     改大行,改小不行(除非都是空的)
如何查询某天的数据?
     select * from table_name where trunc(日期字段)=to_date('2003-05-02','yyyy-mm-dd');
更改表名alter table scott.dept rename to depts;//sys当前用户的例子
怎样用Sql语句实现查找一列中第N大值?
     select * from
(select t.*,dense_rank() over (order by sal) rank from employee)
where rank = N;
返回大于等于N的最小整数值? SELECT CEIL(N)  FROM DUAL;
返回小于等于N的最小整数值? SELECT FLOOR(N)  FROM DUAL;
返回当前月的最后一天? SELECT LAST_DAY(SYSDATE)  FROM DUAL;
两个结果集互加的函数?
     SELECT * FROM BSEMPMS_OLD INTERSECT SELECT * FROM BSEMPMS_NEW;这里前后顺无所谓
两个结果集互减的函数?
     SELECT * FROM BSEMPMS_OLD MINUS SELECT * FROM BSEMPMS_NEW;前面的查询结果必须大于后者


日期的各部分的常用的的写法
119. 取时间点的年份的写法:
      SELECT TO_CHAR(SYSDATE,'YYYY') FROM DUAL;
120. 取时间点的月份的写法:
      SELECT TO_CHAR(SYSDATE,'MM') FROM DUAL;
121. 取时间点的日的写法:
      SELECT TO_CHAR(SYSDATE,'DD') FROM DUAL;
122. 取时间点的时的写法:
      SELECT TO_CHAR(SYSDATE,'HH24') FROM DUAL;
123. 取时间点的分的写法:
      SELECT TO_CHAR(SYSDATE,'MI') FROM DUAL;
124. 取时间点的秒的写法:
      SELECT TO_CHAR(SYSDATE,'SS') FROM DUAL;
125. 取时间点的日期的写法:
      SELECT TRUNC(SYSDATE) FROM DUAL;
126. 取时间点的时间的写法:
      SELECT TO_CHAR(SYSDATE,'HH24:MI:SS') FROM DUAL;
127. 日期,时间形态变为字符形态:
      SELECT TO_CHAR(SYSDATE) FROM DUAL;
128. 将字符串转换成日期或时间形态:
      SELECT TO_DATE('2003/08/01') FROM DUAL;
129. 返回参数的星期几的写法:
      SELECT TO_CHAR(SYSDATE,'D') FROM DUAL;
130. 返回参数一年中的第几天的写法:
      SELECT TO_CHAR(SYSDATE,'DDD') FROM DUAL;
131. 返回午夜和参数中指定的时间值之间的秒数的写法:
      SELECT TO_CHAR(SYSDATE,'SSSSS') FROM DUAL;
132. 返回参数中一年的第几周的写法:
      SELECT TO_CHAR(SYSDATE,'WW') FROM DUAL;
136. 将N秒转换为时分秒格式?
     set serverout on
     declare
       N number := 1000000;
       ret varchar2(100);
     begin
       ret := trunc(n/3600) || '小时' || to_char(to_date(mod(n,3600),'sssss'),'fmmi"分  

"ss"秒"') ;
       dbms_output.put_line(ret);
     end;
138. 如何查询做比较大的排序的进程的SQL语句?
     select /*+ ORDERED */ sql_text from v$sqltext a
     where a.hash_value = (
       select sql_hash_value from v$session b
       where b.sid = &sid and b.serial# = &serial)
     order by piece asc ;
139. 如何查找重复记录?
     SELECT * FROM TABLE_NAME
     WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAME D
       WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2);
140. 如何删除重复记录?
     DELETE FROM TABLE_NAME
     WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAME D
     WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2);

你可能感兴趣的:(oracle)