您的位置:首页 > 数据库 > Oracle

Oracle基本操作SQL

2008-03-01 12:09 387 查看
1.创建表空间
CREATE TABLESPACE TS_CNFOL
DATAFILE 'G:/ORACLE/product/10.1.0/oradata/cnfol/TS_CNFOL.DAT' SIZE 10M REUSE
AUTOEXTEND ON NEXT 500K MAXSIZE UNLIMITED;
2.创建用户
CREATE USER cnfol IDENTIFIED BY cnfol --用户名及密码都为cnfol
DEFAULT TABLESPACE TS_CNFOL --该用户使用TS_CNFOL表空间
TEMPORARY TABLESPACE TEMP
QUOTA UNLIMITED ON TS_CNFOL; --可以使用这个表空间的所有配额
3.分配权限
GRANT CONNECT TO cnfol WITH ADMIN OPTION; --cnfol可以把权限再分配给别人
GRANT RESOURCE TO cnfol;
GRANT CREATE ANY TABLE TO cnfol;
GRANT INSERT ANY TABLE TO cnfol;
GRANT SELECT ANY TABLE TO cnfol;
GRANT UPDATE ANY TABLE TO cnfol;
GRANT DELETE ANY TABLE TO cnfol;
GRANT ALTER ANY TABLE TO cnfol;
GRANT DROP ANY TABLE TO cnfol;
GRANT CREATE ANY INDEX TO cnfol;
GRANT DROP ANY INDEX TO cnfol;
GRANT EXECUTE ANY PROCEDURE TO cnfol;
GRANT CREATE ANY SEQUENCE TO cnfol;
GRANT DEBUG CONNECT SESSION TO cnfol; --可以单步调试函数或者存储过程
4.剥夺权限

REVOKE DEBUG CONNECT SESSION FROM cnfol;
5.增、删、改表的列
ALTER TABLE TAB_NAME ADD(COL1 VARCHAR2(10) NOT NULL,COL2 NUMBER);
ALTER TABLE TAB_NAME MODIFY(COL1 VARCHAR2(100));
ALTER TABLE TAB_NAME DROP(COL2);
6.禁用、启用、删除约束
ALTER TABLE TAB_NAME DISABLE CONSTRAINT CK_TAB_STUDENT_ADDR;
ALTER TABLE TAB_NAME DISABLE PRIMARY KEY;
ALTER TABLE TAB_NAME ENABLE PRIMARY KEY;
ALTER TABLE TAB_NAME DROP CONSTRAINT CK_TAB_STUDENT_ADDR;

7.获得当前时间
select sysdate from dual

8.表数据转移(把某张表的数据拷贝到另一张表中)
insert into newtable(field1,field2) select field1,field2 from oldtable [where ...]

9.时间段操作

select * from table1 where to_char(myDate,'yyyy-mm-dd') between '2007-01-01' and '2007-12-30'

10.解除用户锁定
alter user wangwz account unlock

11.拷贝表结构
create table tablename as (select * from oldtable where 1=1)要数据则用1=1,不要数据用1=2

12.添加字段
alter table tablename add(col1 varchar2(10) not null,col2 number(4));

13.打印数据
dbms_output.put_line('XXX');
14.删除表中所有记录
truncate table tablename
15.SQL中含有单引号
insert into tablename(username) values('i''m going');--插入一个单引号用两个单引号表示
16.求一张表中,符合相同条件的记录列表(在创建唯一约束之前,可用这个SQL来判断是否有违反你要建立的约束条件的记录)
SELECT * FROM tabname a WHERE ROWID > ANY (SELECT ROWID FROM tabname b WHERE a.field1= b.field1 AND a.field2 = b.field2)
17.建立唯一约束
ALTER TABLE tabname ADD CONSTRAINT uniquename UNIQUE (field1,field2)

18.建表SQL
create table tablename
(
sid number(6) primary key,
ssex char(2),--存汉字就得两字节
sbirthday date
)
19.创建序列
create sequence seqname
minvalue 1
maxvalue 9999999999
start with 1--起始值
increment by 1--每次累加值
cache 20--缓存大小
nocycle;--当序列达到最大值时不循环

20.创建函数
CREATE OR REPLACE FUNCTION functionname RETURN NUMBER AS
V_SEQ NUMBER;
BEGIN
SELECT seqname.NEXTVAL INTO V_SEQ FROM DUAL;
RETURN V_SEQ;
END;
21.创建存储过程
CREATE OR REPLACE PROCEDURE proname is
v_time varchar2(10);
begin
insert into tablename1(tblid,field1,field2,field3)
select seqname.nextval,field1,field2,field3 from (select [位置1] field1,field2,field3 from where field1=1)
where rownum<15
commit;
end;
22.把表1的数据导到表2,但表2的主键由序列生成
实现见上面的第19点和21点
注:如果functionname.nextval要写在上面的位置1,由于functionname.nextval不能用在子查询中,所以可以做个函数,该函数就返回序列的当前值即可解决。处理流程参照上面的第19点到21点(ORA-02287:sequence number not allowed here)

23.给表加注释
comment on table tablename is '注释';
24.给字段加注释
comment on column tablename.field1 is '注释';
25.all的用法
select * from tablename where 5>all(select tblid from tablename)
上面这句SQL的效果是:当select tblid from tablename所有的值都小于5,则搜索出tablename中所的数据
26.any的用法
select * from tablename where 5>any(select tblid from tablename)
上面这句SQL的效果是:当select tblid from tablename作意一个值小于5,则搜索出tablename中所的数据
27.判断指定字符在当前编码方式下占的字节数
select lengthb('中') from dual;
28.查询当前数据库采用的字符集
select userenv('language') from dual
29.统计出表中某字段相同的记录列表
select field1,count(*) from tabname group by field1 having count(*)>1
30.字符串转日期
select to_date('2007-01-01 14:00:11','yyyy-mm-dd hh24:mi:ss') from dual

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: