常用工具

1 192.168.100.29:1521/hisdb数据库 as sysdba (以特权用户登陆) administrator  abcd_1234  192.168.100.30
2 grant/relove权限  select * from dba_role_privs where granted_role='DBA' 
3 drop/conn登陆
4 select username from dba_users; 查询用户
5 create user mapengbo indentified by m123从创建
6 select username,default_tablespace from dba_users;表空间用户名
7 show parameter instance_name;当前实例名
8 drop profile password_history cascade删除文件所有
9 truncte table student 删除表快      delete   from student删除慢
10 查询表结构 desc +表名
11 算术表达式 select sal*13 ‘年工资’ename from embp;
12 char(size) char(20) 定长 最大2000字符  例子 char(10) 小马 后面补齐6个空格{已知长度查询速度快}
13 varchar(size)  varchar(20) 变长 最大4000字符 
14 nchar(n) Unicode数据类型 ,定长 最大2000字符
15 nvarchar2(n)Unicode数据类型 ,变长 最大4000字符
16 clob(character large object) 字符型大对象 ,最大4G
17 number(p,s)p为整数位,s为小数位.范围: 1 <= p <=38, -84 <= s <= 127
18 保存数据范围:-1.0e-130 <= number value < 1.0e+126
19 保存在机器内部的范围: 1 ~ 22 bytes
   numbr范围 10的负38次到正的38次方
   number(5,2)五位有效数,2位小数-999.99---999.99
   number(5)五位整数 -99999---99999
20 spool 将sql*plus 内容输出 例子 sql>spool d:\b.sql 并输入 sql>spool off
21 linesize 行宽度默认80 sql>show linesize   sql>linesize 90
22 pagesize 每页显示的行数目默认14
23 profile 口令限制 例子 限制scott用户最多尝试登陆3次锁定时间为2天一般用dba身份去执行
 sql>create profile lock_account limit
    failed_login_attempts 3 password_lock_time 2;
 sql>alter user tea profile lock_account;
24 删除profile   sql>drop profile password_history(cascade);
表的查询
25 表名 以字母打头 不超过30 不能使用ora保留字 不用A_Z a_z 0_9 $#
26 date 年月日时分秒
   timestamp  时间戳 date扩展
27 blob 二进制数据 可以存放图片/音乐 4g (保密性强)
建立表
28 sql>create table student(
   xh number(4),
   xm varchar2(20),
   sex char(2),
   birthday date ,
   sal number(7,2)
   ); 
29 基本操作
    添加一个字段
   sql>alter table student add (classid number(2));
   修改字段长度
   sql>alter table student modify (xm varchar2(30));
   修改字段的类型或者姓名不能有数据
   sql>alter table student modify (xm char(30));
   删除一个字段
   sql>alter table student drop column sal;(慎用)
   修改表的名字
   sql>rename student to stu;
   删除表
   sql>drop table student;
   所有字段都插入
   insert into student values ('A001','张三','男','01-5月-05',10);
   改日期的默认形式
   alter session set nls_date_format = 'yyy-mm-dd';
   修改后可以用熟悉的格式添加日期类型
   insert into student values ('A002','MIKE','男','1995-05-06',10);
   插入部分字段
   insert into student(xh,xm,sex) values ('A003','JOHN','女');
   插入空值
   insert into student(xh,xm,sex,birthday)
   values('A004','MARTIN','男',null);   
   查询为空
   select * from stu where birthday is (not) null;
   数值修改一半 再加上把classid改为3
   update stu set sal=sal1/2,classid=3 where sex='男';   
   修改多个字段
   update student set sex='男',birthday='1980-04-01'
   where xh='A001';
   删除数据
   delete from stu;表结构还在,可以恢复速度慢 savepoint aa; rollback to aa;
   drop table stu; 删除一条数据
   delete from stu where xh='A001';删除一条记录
   truncate table stu;删除数据表还在速度快,不可恢复
   modify 是修改字段类型和长度的(即修改字段的属性)
   alter是修改表的数据结构(modify是alter的一种用法)
   FIRST() 函数返回指定的字段中第一个记录的值  例子SELECT FIRST(column_name列名) FROM table_name
   GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。
   SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer 我们希望查找每个客户的总金额(总订单
   例子  select report_item_name,sum(result) from lab.lab_result group by report_item_name having sum(result)<20
   HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。 
   例子 SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer HAVING SUM(OrderPrice)<2000 我们希望查找订单总金额少于 2000 的客户
   UCASE 函数把字段的值转换为大写
   例子SELECT UCASE(column_name) FROM table_name
   LCASE 函数把字段的值转换为小写。
   例子 SELECT LCASE(column_name) FROM table_name 
   MID 函数用于从文本字段中提取字符。
   例子SELECT MID(City,1,3) as SmallCity FROM Persons
   LEN 函数返回文本字段中值的长度
   ROUND 函数用于把数值字段舍入为指定的小数位数
   例子 select report_item_name, round(result,0) as result from lab.lab_result
   NOW 函数返回当前的日期和时间。
   例子SELECT ProductName, UnitPrice, Now() as PerDate FROM Products
   FORMAT 函数用于对字段的显示进行格式化。
   例子 SELECT ProductName, UnitPrice, FORMAT(Now(),'YYYY-MM-DD') as PerDate FROM Products显示每天日期所对应的名称和价格(日期的显示格式是 "YYYY-MM-DD"
   IN 操作符允许我们在 WHERE 子句中规定多个值。
   例子 SELECT * FROM Persons WHERE LastName IN ('Adams','Carter')
   Auto-increment 会在新记录插入表中时生成一个唯一的数字。
   SQL CREATE INDEX  在表上创建一个简单的索引。允许使用重复的值:
   别名 alias用法
   表SELECT column_name AS alias_name FROM table_name
   列SELECT column_name(s) FROM table_name AS alias_name
   SQL join  用于根据两个或多个表中的列之间的关系,从这些表中查询数据
   left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 
   right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
   inner join(等值连接) 只返回两个表中联结字段相等的行
   SQL FULL JOIN 关键字只要其中某个表存在匹配,FULL JOIN 关键字就会返回行






 表的查询
30 多表查询
   内连接
   自然连接
   交叉连接
   外连接
   全连接
   自链接
   select a1.ename,a2.dname,a1.sal from emp a1,dept a2 where a1.deptno=a2.deptno order by a1.deptno; 按部门编号排序。group by 分组
   select worker.ename,boss.ename from emp woker,emp boss where  woker.mgr=boss.emp;(雇员的老板的编号等于类似于这个表的员公的编号) 
   子查询(嵌套查询)
   单行子查询
   (错误)select test_no from lab.lab_result where report_item_name='血小板压积[PCT]';      select test_no from lab.lab_result t where t.report_item_name='白细胞数目 [WBC]'
   (错误)select * from lab.lab_result where item_no=(select item_no from lab.lab_result where report_item_name='白细胞数目[wbc]')
      % 替代一个或多个字符
      _ 仅替代一个字符
     [charlist] 字符列中的任何单一字符
     [^charlist]或者[!charlist] 不在字符列中的任何单一字符
    or运算符只要有一个就会显示记录 and 运算符两个都是true才会显示记录   
    distinct仅列出不同的值  ’= ‘一对一的 IN是在什么什么范围中     ON主要是用来做两个表的连接的
    多列子查询
    select * from emp where (deptn,job)= (select deptno,job from emp where ename='smith')
    like的用法    select * from table1 where name like '%明%'
    将查询表一当作一个表 例子;
    select??? from emp a2,(select deptno ,avg(sal)mysal from emp group by deptno)a1 where a2.deptno=a1.deptno and a2.sal>a1.mysal
    分页查询 分几段 
    select * from (select a1.*,rownum rn(ora分配的行号) from(select * from emp)a1,where rownum <10)where rn>=6;
   
 ** 几个查询的变化
  A 指定查询列,只需修改最底层的子查询
  B  如何排序 修改最底层的子查询
  C
  
 内嵌视图 别名   不用加as
 分页查询 按雇员的id升序取出
 分页三种 1 rownum  例子select a1.*,rownum rn(ora分配的行号) from(select * from emp)a1,where rownum <10select
 select * from (select a1.*,rownum rn(ora分配的行号) from(select * from emp)a1,where rownum <10)where rn>=6;
  2.按分析函数来分,
  3.查询结果直接创建一个新的表
  create table mytable(id,name,job,deptno) as select empno,ename,sal,deptno,from emp;
  合并查询(略)
 


 union/union all 合并结果集
 interselect 交集
 minus 差集
          




 ora表空间    参数说明如下:
 datafile:用于指定表空间所对应的数据文件。
 size:用于指定数据文件的尺寸
 extent  management  dictionary:表空间中区的管理方式为字典管理方式。
 default  storage:用于指定默认存储参数设置。当设置默认存储参数时,系统会自动使用system表空间的存储参数设置。
 initial:用于指定为数据对象所分配的第一个区的大小。
 next:用于指定为数据库对象所分配的第二个区的大小。
 minextents:用于指定为数据库对象所分配的最少区个数。
 maxextents:用于指定为数据库对象所分配的最多区个数。
 pctincrease:用于指定从第三个区开始,每个区比前一个区所增长的百分比,区尺寸的计算公式如下:Size=NEXT *(1+PCIINCREASE/100)(n-2)
 其中,n表示第n个区,除了第一个区和第二个区以为,其他尺寸会自动转变为DB_BLOCK_SIZE是整数倍。
  导入表记得表空间配额,和权限
  同义词
  建立:create 【public】  synonym 同义词名称(一般可以与表名不同,这样不容易混淆) for AA.table_name;--在当前用户下建立一个同义词(去同义“AA”中的表:table_name,public的是可选参数,本人建议尽量建立公用的 同义词)
  删除:DROP   【public】   SYNONYM   同义词名称; ---------此处特别注意 关键字 public 的存在--------;
  查看:select * from    user_synonyms  sy  where sy.synonym_name ='A_CODEMAPPING';  --查看私有的同义词,自己看到自己创建的;
        select * from    all_synonyms sy  where sy.synonym_name ='A_CODEMAPPING';  --可以查看到 某某创建的 公共的 同义词


     1.查看用户的连接状态
     select username,sid,serial# from v$session;


     2.找到要删除用户的sid和serial并杀死
      alter system kill session'$sid,$serial';


    3.删除用户
    drop user xxx cascade;


 select username,default_tablespace from user_users;
 查看用户表空间
 alter user mapengbo  default tablespace ora;
 修改用户指定表空间
 create tablespace TSP_MEDREC
 datafile 'C:\TSP_MEDREC.dbf' 
 size 100M
 autoextend on next 1M maxsize 1000M
 extent management local
 


select table_name 表名 ,tablespace_name 所使用表空间 from user_tables






  先用sysdba登陆,grant GRANT ANY PRIVILEGE to user1;
2 用user1登陆,grant connect,resource to user2;
3 用user2登陆,就可以在user1下创建Table了。


CREATE TABLE TB_PK_EXAMPLE  
(  
  ID number,  
  NAME varchar2(50),  
  DESCRIPTION varchar2(300),  
  CONSTRAINT TB_PK_EXAMPLE_PK PRIMARY KEY(ID)--定义主键  
);  






查看所有用户:select * from all_users;
查看表空间:select tablespace_name from dba_tablespaces;
查看用户具有怎样的角色:select * from dba_role_privs where grantee='用户名';
查看某个角色包括哪些系统权限:select * from dba_sys_privs where grantee='DBA'
查看oracle中所有的角色:select * from dba_roles;








查看表空间大小
select b.file_name 物理文件名,b.tablespace_name 表空间,b.bytes / 1024 / 1024 大小M,(b.bytes - sum(nvl(a.bytes, 0))) / 1024 / 1024 已使用M,
substr((b.bytes - sum(nvl(a.bytes, 0))) / (b.bytes) * 100, 1, 5) 利用率   
from dba_free_space a,dba_data_files b   
where a.file_id = b.file_id
group by b.tablespace_name,b.file_name, b.bytes   
order by b.tablespace_name;












SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size 
FROM dba_tablespaces t, dba_data_files d 
WHERE t.tablespace_namselect * from all_tab_privs;   
select * from user_tab_privs;








1.查看所有用户:
select * from dba_users;   
select * from all_users;   
select * from user_users;
2.查看用户或角色系统权限(直接赋值给用户或角色的系统权限):
select * from dba_sys_privs;   
select * from user_sys_privs; (查看当前用户所拥有的权限)
3.查看角色(只能查看登陆用户拥有的角色)所包含的权限
sql>select * from role_sys_privs;
4.查看用户对象权限:
select * from dba_tab_privs;   
select * from all_tab_privs;   
select * from user_tab_privs;
5.查看所有角色: select * from dba_roles;
6.查看用户或角色所拥有的角色:
select * from dba_role_privs;   
select * from user_role_privs;
7.查看哪些用户有sysdba或sysoper系统权限(查询时需要相应权限)
select * from V$PWFILE_USERS
8.SqlPlus中查看一个用户所拥有权限
SQL>select * from dba_sys_privs where grantee='username'; 其中的username即用户名要大写才行。
比如: SQL>select * from dba_sys_privs where grantee='TOM';
9、Oracle删除指定用户所有表的方法
select 'Drop table '||table_name||';' from all_tables where owner='要删除的用户名(注意要大写)';
10、删除用户
drop user user_name cascade; 如:drop user SMCHANNEL CASCADE
11、获取当前用户下所有的表:
select table_name from user_tables;
12、删除某用户下所有的表数据:
select 'truncate table  ' || table_name from user_tables;
13、禁止外键 ORACLE数据库中的外键约束名都在表user_constraints中可以查到。
 
其中constraint_type='R'表示是外键约束。
 
启用外键约束的命令为:alter table table_name enable constraint constraint_name 
 
禁用外键约束的命令为:alter table table_name disable constraint constraint_name
 
然后再用SQL查出数据库中所以外键的约束名:
 
select 'alter table '||table_name||' enable constraint '||constraint_name||';' from user_constraints where constraint_type='R'
 
select 'alter table '||table_name||' disable constraint '||constraint_name||';' from user_constraints where constraint_type='R'
 e = d.tablespace_name 
GROUP BY t.tablespace_name; 






可能原因是监听日志过大(超过4G)。
  停止监听,删除监听日志(需要删除4个目录的日志),开启监听,连接很慢问题解决。
  Oracle 11g 监听日志目录位置如下:
  alert 日志目录:%ORACLE_HOME%\diag\rdbms\%sid%\%sid%\alert,%ORACLE_HOME%\diag\tnslsnr\%机器名%\listenrt\alert
  trace 日志目录:%ORACLE_HOME%\diag\rdbms\%sid%\%sid%\trace,%ORACLE_HOME%\diag\tnslsnr\%机器名%\listenrt\trace
张岭伟 2018/5/2 14:54:02
【问题处理】
关闭监听器日志:
# su - oracle
$ lsnrctl
LSNRCTL> set log_status off
LSNRCTL> save_config
LSNRCTL> show log_status
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
LISTENER parameter "log_status" set to OFF
上面的修改将立即生效,不需要重启监听器。
手动删除alert目录下的监听器日志。(建议删除前做好必要的备份)


【问题总结】
1、如果打开监听器日志,需要定期清理监听器日志,防止系统存储空间被占满
2、如果监听器日志增长速度很快,可以考虑关闭监听器日志 






MERGE INTO [your table-name] [rename your table here]


USING ( [write your query here] )[rename your query-sql and using just like a table]


ON ([conditional expression here] AND [...]...)


WHEN MATHED THEN [here you can execute some update sql or something else ]


WHEN NOT MATHED THEN [execute something else here ! ]






result.next()和while(result.next)的区别为:
result.next()的意思是进行读取结果集的下一条数据;
while(result.next)的意思是将rs全部进行读取;
if(result.next)的意思是进行读取一次,判断是否有数据。
这些都是数据库的操作,next()方法返回的是boolean型,用来确认有没有数据,执行一次游标后移一位,用来遍历用的。所以if(rs.next()只遍历一次,即第一条数据,或者说是确认是否存在数据,while(rs.next()遍历每一条数据。












<script type="text/javascript">
var txt = '{"employees":[' +
'{"firstName":"Bill","lastName":"Gates" },' +
'{"firstName":"George","lastName":"Bush" },' +
'{"firstName":"Thomas","lastName":"Carter" }]}';


var obj = eval ("(" + txt + ")");



























  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值