ORACLE常用命令总结-ORACLE 常用的SQL语法和数据对象

来源:互联网 发布:linux导出mysql数据库 编辑:程序博客网 时间:2024/06/07 01:06

.数据控制语句 (DML) 部分

1.INSERT  (
往数据表里插入记录的语句)

INSERT INTO 
表名(字段名1, 字段名2, ……) VALUES ( 1, 
2, ……);
INSERT INTO 
表名(字段名1, 字段名2, ……)  SELECT (字段名1, 字段名2, ……) FROM 另外的表名
;

字符串类型的字段值必须用单引号括起来例如
: ’GOOD DAY’
如果字段值里包含单引号’ 需要进行字符串转换我们把它替换成两个单引号
''.
字符串类型的字段值超过定义的长度会出错最好在插入前进行长度校验
.

日期字段的字段值可以用当前数据库的系统时间SYSDATE, 精确到秒

或者用字符串转换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)
TO_DATE()
还有很多种日期格式可以参看
ORACLE DOC.
-- 小时:分钟: 的格式
YYYY-MM-DD HH24:MI:SS

INSERT
时最大可操作的字符串长度小于等于4000个单字节如果要插入更长的字符串请考虑字段用CLOB类型
,
方法借用ORACLE里自带的DBMS_LOB程序包
.

INSERT
时如果要用到从1开始自动增长的序列号应该先建立一个序列号

CREATE SEQUENCE 
序列号的名称 (最好是表名+序列号标记) INCREMENT BY 1  START  WITH  1
MAXVALUE  99999  CYCLE  NOCACHE;
其中最大的值按字段的长度来定如果定义的自动增长的序列号 NUMBER(6) , 最大值为
999999
INSERT 
语句插入这个字段值为序列号的名称
.NEXTVAL

2.DELETE  (
删除数据表里记录的语句
)

DELETE FROM
表名 WHERE 条件
;

注意:删除记录并不能释放ORACLE里被占用的数据块表空间它只把那些被删除的数据块标成
unused.

如果确实要删除一个大表里的全部记录可以用 TRUNCATE 命令它可以释放占用的数据块表空间

TRUNCATE TABLE 
表名;
此操作不可回退
.

3.UPDATE  (
修改数据表里记录的语句
)

UPDATE
表名 SET 字段名1=1, 字段名2=2, …… WHERE 条件
;

如果修改的值N没有赋值或定义时将把原来的记录内容清为NULL, 最好在修改前进行非空校验
;
N超过定义的长度会出错最好在插入前进行长度校验
..

注意事项
:
A.        
以上SQL语句对表都加上了行级锁
,
        
确认完成后必须加上事物处理结束的命令 COMMIT 才能正式生效
,
        
否则改变不一定写入数据库里
.
        
如果想撤回这些操作可以用命令 ROLLBACK 复原
.

B.        
在运行INSERT, DELETE  UPDATE 语句前最好估算一下可能操作的记录范围
,
        
应该把它限定在较小 (一万条记录范围内,. 否则ORACLE处理这个事物用到很大的回退段
.
        
程序响应慢甚至失去响应如果记录数上十万以上这些操作可以把这些SQL语句分段分次完成
,
        
其间加上COMMIT 确认事物处理
.
.数据定义 (DDL) 部分


1.CREATE (
创建表索引视图同义词过程函数数据库链接等)

ORACLE
常用的字段类型有

CHAR                        
固定长度的字符串
VARCHAR2                
可变长度的字符串
NUMBER(M,N)                
数字型M是位数总长度, N是小数的长度
DATE                        
日期类型

创建表时要把较小的不为空的字段放在前面可能为空的字段放在后面

创建表时可以用中文的字段名但最好还是用英文的字段名

创建表时可以给字段加上默认值例如 DEFAULT SYSDATE
这样每次插入和修改时不用程序操作这个字段都能得到动作的时间


创建表时可以给字段加上约束条件
例如 不允许重复 UNIQUE, 关键字 PRIMARY KEY

2.ALTER        (
改变表索引视图等
)

改变表的名称

ALTER TABLE 
表名1  TO 表名2;

在表的后面增加一个字段

ALTER TABLE
表名 ADD 字段名 字段名描述;

修改表里字段的定义描述

ALTER TABLE
表名 MODIFY字段名 字段名描述;

给表里的字段加上约束条件

ALTER TABLE 
表名 ADD CONSTRAINT 约束名 PRIMARY KEY (字段名);
ALTER TABLE 
表名 ADD CONSTRAINT 约束名 UNIQUE (字段名
);

把表放在或取出数据库的内存区

ALTER TABLE 
表名 CACHE;
ALTER TABLE 
表名
 NOCACHE;

3.DROP        (
删除表索引视图同义词过程函数数据库链接等
)

删除表和它所有的约束条件

DROP TABLE 
表名 CASCADE CONSTRAINTS;

4.TRUNCATE (
清空表里的所有记录保留表的结构
)

TRUNCATE 
表名
;

.查询语句 (SELECT) 部分


SELECT
字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE 条件;

字段名可以带入函数

  
例如:  COUNT(*), MIN(字段名),  MAX(字段名),  AVG(字段名), DISTINCT(字段名),
           TO_CHAR(DATE
字段名
,'YYYY-MM-DD HH24:MI:SS')

NVL(EXPR1, EXPR2)
函数

解释:
IF EXPR1=NULL
                RETURN EXPR2
ELSE
                       RETURN EXPR1

DECODE(AA
V1R1V2R2....)函数

解释:
IF AA=V1 THEN RETURN R1
IF AA=V2 THEN RETURN R2
..…
ELSE
RETURN NULL

LPAD(char1,n,char2)
函数

解释:
字符char1按制定的位数n显示,不足的位数用char2字符串替换左边的空位


字段名之间可以进行算术运算
例如:  (字段名1*字段名1)/3

查询语句可以嵌套

例如: SELECT …… FROM
(SELECT …… FROM
表名1, [表名2, ……] WHERE 条件) WHERE 条件
2;

两个查询语句的结果可以做集合操作

例如并集UNION(去掉重复记录), 并集UNION ALL(不去掉重复记录), 差集MINUS,  交集INTERSECT

分组查询

SELECT
字段名1, 字段名2, …… FROM 表名1, [表名2, ……] GROUP BY字段名1
[HAVING 
条件
] ;

两个以上表之间的连接查询


SELECT
字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE
                
表名1.字段名 = 表名2. 字段名
 [ AND ……] ;

SELECT
字段名1, 字段名2, …… FROM 表名1, [表名
2, ……] WHERE
                
表名1.字段名 = 表名2. 字段名
(+) [ AND ……] ;

(+)号的字段位置自动补空值


查询结果集的排序操作默认的排序是升序ASC, 降序是DESC

SELECT
字段名1, 字段名2, …… FROM 表名1, [表名
2, ……]
ORDER BY
字段名1, 字段名
2 DESC;

字符串模糊比较的方法


INSTR(
字段名, ‘字符串’)>0
字段名 LIKE  ‘字符串%’  [‘%字符串
%’]

每个表都有一个隐含的字段ROWID, 它标记着记录的唯一性
.

.ORACLE里常用的数据对象
 (SCHEMA)

1.
索引
 (INDEX)

CREATE INDEX 
索引名ON 表名 ( 字段1, [字段
2, ……] );
ALTER INDEX 
索引名
 REBUILD;

一个表的索引最好不要超过三个 (特殊的大表除外), 最好用单字段索引结合SQL语句的分析执行情况
,
也可以建立多字段的组合索引和基于函数的索引


ORACLE8.1.7
字符串可以索引的最大长度为1578 单字节
ORACLE8.0.6
字符串可以索引的最大长度为758 单字节

2.
视图 (VIEW)

CREATE VIEW 
视图名
AS SELECT …. FROM …..;
ALTER VIEW
视图名
 COMPILE;

视图仅是一个SQL查询语句它可以把表之间复杂的关系简洁化
.

3.
同义词
 (SYNONMY)
CREATE SYNONYM
同义词名FOR 表名
;
CREATE SYNONYM
同义词名FOR 表名@数据库链接名
;

4.
数据库链接
 (DATABASE LINK)
CREATE DATABASE LINK
数据库链接名CONNECT TO 用户名 IDENTIFIED BY 密码 USING ‘数据库连接字符串
’;

数据库连接字符串可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定义
.

数据库参数global_name=true时要求数据库链接名称跟远端数据库名称一样


数据库全局名称可以用以下命令查出
SELECT * FROM GLOBAL_NAME;

查询远端数据库里的表
SELECT …… FROM 
表名@数据库链接名;

.权限管理 (DCL) 语句


1.GRANT        
赋于权限
常用的系统权限集合有以下三个:
CONNECT(
基本的连接), RESOURCE(程序开发), DBA(数据库管理
)
常用的数据对象权限有以下五个
:
ALL         ON 
数据对象名,         SELECT ON 数据对象名,         UPDATE ON 数据对象名
,
DELETE         ON 
数据对象名,  INSERT ON 数据对象名,   ALTER  ON 数据对象名


GRANT CONNECT, RESOURCE TO 
用户名;
GRANT SELECT ON 
表名 TO 用户名
;
GRANT SELECT, INSERT, DELETE ON
表名 TO 用户名1, 用户名
2;

2.REVOKE 
回收权限


REVOKE CONNECT, RESOURCE FROM 
用户名;
REVOKE SELECT ON 
表名 FROM 用户名
;
REVOKE SELECT, INSERT, DELETE ON
表名 FROM 用户名1, 用户名
2;


查询数据库中第63号错误:

select orgaddr,destaddr from sm_histable0116 where error_code='63';

查询数据库中开户用户最大提交和最大下发数: select MSISDN,TCOS,OCOS from ms_usertable


查询数据库中各种错误代码的总和:
select error_code,count(*) from sm_histable0513 group by error_code order
by error_code;

查询报表数据库中话单统计种类查询。
select sum(Successcount) from tbl_MiddleMt0411 where ServiceType2=111
select sum(successcount),servicetype from tbl_middlemt0411 group by servicetype

原创粉丝点击