在SQL*PLUS中显示表结构:desc 表名;
comment on table 表名 is '表注释";
comment on column 表.列 is '列注释'
user_tab_comments由table_name、table_type和comments三部分组成。
select * from user_tab_comments where comments is not null;
select * from all_tables where table_name like '%';
user_col_comments由table_name、column_name和comments三部分组成。
select * from user_col_commnents where comments is not null and table_name='表名';
select * from all_tab_columns where table_name='??';
函数 | 说明 |
ASCII(X) | 返回字符X的ASCII码 |
CONCAT(X,Y) | 连接字符串X和Y |
INSTR(X,STR[,START][,N) | 从X中查找str,可以指定从start开始,也可以指定从n开始 |
LENGTH(X) | 返回X的长度 |
LOWER(X) | X转换成小写 |
UPPER(X) | X转换成大写 |
LTRIM(X[,TRIM_STR]) | 把X的左边截去trim_str字符串,缺省截去空格 |
RTRIM(X[,TRIM_STR]) | 把X的右边截去trim_str字符串,缺省截去空格 |
TRIM([TRIM_STR FROM]X) | 把X的两边截去trim_str字符串,缺省截去空格 |
REPLACE(X,old,new) | 在X中查找old,并替换成new |
SUBSTR(X,start[,length]) | 返回X的字串,从start处开始,截取length个字符,缺省length,默认到结尾 |
TRANSLATE(char, from, to) | 返回将出现在from中的每个字符替换为to中的相应字符以后的字符串。 |
INITCAP | 返回字符串并将字符串的第一个字母变为大写; |
函数 | 说明 | 示例 |
ABS(X) | X的绝对值 | ABS(-3)=3 |
ACOS(X) | X的反余弦 | ACOS(1)=0 |
COS(X) | 余弦 | COS(1)=0.54030230586814 |
CEIL(X) | 大于或等于X的最小值 | CEIL(5.4)=6 |
FLOOR(X) | 小于或等于X的最大值 | FLOOR(5.8)=5 |
LOG(X,Y) | X为底Y的对数 | LOG(2,4)=2 |
MOD(X,Y) | X除以Y的余数 | MOD(8,3)=2 |
POWER(X,Y) | X的Y次幂 | POWER(2,3)=8 |
ROUND(X[,Y]) | X在第Y位四舍五入 | ROUND(3.456,2)=3.46 |
SQRT(X) | X的平方根 | SQRT(4)=2 |
TRUNC(X[,Y]) | X在第Y位截断 | TRUNC(3.456,2)=3.45 |
函数 | 说明 |
ADD_MONTHS(d,n) | 在某一个日期 d 上,加上指定的月数 n,返回计算后的新日期。 |
LAST_DAY(d) | 返回指定日期当月的最后一天。 |
ROUND(d[,fmt]) | 返回一个以 fmt 为格式的四舍五入日期值 |
EXTRACT(fmt FROM d) | 提取日期中的特定部分 |
函数 | 说明 |
TO_CHAR(d|n[,fmt]) | 把日期和数字转换为制定格式的字符串 |
TO_DATE(X,[,fmt]) | 把一个字符串以fmt格式转换成一个日期类型 |
TO_NUMBER(X,[,fmt]) | 把一个字符串以fmt格式转换为一个数字 |
函数 | 说明 |
NVL(X,VALUE) | 如果X为空,返回value,否则返回X |
NVL2(x,value1,value2) | 如果x非空,返回value1,否则返回value2 |
名称
作用 | 语法 |
AVG | 平均值 |
SUM | 求和 |
MIN、MAX | 最小值、最大值 |
COUNT | 数据统计 |
往数据表里插入记录的语句
INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……);
INSERT INTO 表名(字段名1, 字段名2, ……) SELECT (字段名1, 字段名2, ……) FROM 另外的表名;
删除数据表里记录的语句
DELETE FROM表名 WHERE 条件;
删除一个表里的全部记录
TRUNCATE TABLE 表名;
修改数据表里记录的语句,修改的值N没有赋值或定义时, 将把原来的记录内容清为NULL, 最好在修改前进行非空校验
UPDATE表名 SET 字段名1=值1, 字段名2=值2, …… WHERE 条件;
以上SQL语句对表都加上了行级锁, 确认完成后, 必须加上事物处理结束的命令 COMMIT 才能正式生效, 否则改变不一定写入数据库里. 如果想撤回这些操作, 可以用命令 ROLLBACK 复原.
在运行INSERT, DELETE 和 UPDATE 语句前最好估算一下可能操作的记录范围, 应该把它限定在较小 (一万条记录) 范围内,. 否则ORACLE处理这个事物用到很大的回退段. 程序响应慢甚至失去响应. 如果记录数上十万以上这些操作, 可以把这些SQL语句分段分次完成, 其间加上COMMIT 确认事物处理.
CREATE (创建表, 索引, 视图, 同义词, 过程, 函数, 数据库链接等)
ORACLE常用的字段类型有
CHAR | 固定长度的字符串 |
VARCHAR2 | 可变长度的字符串 |
NUMBER(M,N) | 数字型M是位数总长度, N是小数的长度 |
DATE | 日期类型 |
创建表时要把较小的不为空的字段放在前面, 可能为空的字段放在后面
创建表时可以用中文的字段名, 但最好还是用英文的字段名
创建表时可以给字段加上默认值, 例如 DEFAULT SYSDATE
改变表, 索引, 视图等
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;
删除表, 索引, 视图, 同义词, 过程, 函数, 数据库链接等
DROP TABLE 表名 CASCADE CONSTRAINTS;
清空表里的所有记录, 保留表的结构
TRUNCATE 表名;
一个表的索引最好不要超过三个 (特殊的大表除外), 最好用单字段索引, 结合SQL语句的分析执行情况,也可以建立多字段的组合索引和基于函数的索引
CREATE INDEX 索引名ON 表名 ( 字段1, [字段2, ……] ); ALTER INDEX 索引名 REBUILD;
视图仅是一个SQL查询语句, 它可以把表之间复杂的关系简洁化.
CREATE VIEW 视图名AS SELECT …. FROM …..; ALTER VIEW视图名 COMPILE;
CREATE SYNONYM同义词名FOR 表名; CREATE SYNONYM同义词名FOR 表名@数据库链接名;
CREATE DATABASE LINK数据库链接名CONNECT TO 用户名 IDENTIFIED BY 密码 USING ‘数据库连接字符串’;
数据库连接字符串可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定义.
数据库参数global_name=true时要求数据库链接名称跟远端数据库名称一样
数据库全局名称可以用以下命令查出 SELECT * FROM GLOBAL_NAME;
查询远端数据库里的表 SELECT …… FROM 表名@数据库链接名;
赋于权限
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;
回收权限
REVOKE CONNECT, RESOURCE FROM 用户名; REVOKE SELECT ON 表名 FROM 用户名; REVOKE SELECT, INSERT, DELETE ON表名 FROM 用户名1, 用户名2;
* 分辨某个用户是从哪台机器登陆oracle
select machine , terminal from v$session;
select * from v$parameter where name like ‘proc%’;
select * from v$locked_object ;
select * from dba_sys_privs;
alter table table_name move tablespace_name;
v$lock, v$locked_object, v$session, v$sqlarea, v$process ;
select s.sid session_id, s.username,
decode(lmode, 0, 'none', 1, 'null', 2, 'row-s (ss)', 3, 'row-x (sx)', 4, 'share', 5, 's/row-x (ssx)', 6, 'exclusive', to_char(lmode)) mode_held,
decode(request, 0, 'none', 1, 'null', 2, 'row-s (ss)', 3, 'row-x (sx)', 4, 'share', 5, 's/row-x (ssx)', 6, 'exclusive', to_char(request)) mode_requested,
o.ccbzzp||'.'||o.object_name||' ('||o.object_type||')', s.type lock_type, l.id1 lock_id1, l.id2 lock_id2
from v$lock l, sys.dba_objects o, v$session s
where l.sid = s.sid and l.id1 = o.object_id ;
alter system kill session ‘sid,serir#’;
select * from user_errors;
select * from dba_db_links;
select * from nls_database_parameters; select * from v$nls_parameters;
select * from dba_data_files;