oracle一个创建用户、创建表空间、授权、建表的完整过程和常用命令

oracle一个创建用户、创建表空间、授权、建表的完整过程


--创建表空间
create tablespace xinjian_space datafile 'D:\app\as\product\11.2.0\dbhome_1\NETWORK\ADMIN\xinjian_space.dbf' size 300M;
--创建用户,并赋予表空间
create user comdba identified by root default tablespace xinjian_space;
--将connect,resource权限赋予zzg用户
grant connect,resource,create table,create view,create session,unlimited tablespace to comdba
--将dba权限赋予zzg用户
grant dba to SCOTT
--查询用户具有的权限
select * from session_privs;
--根据结果集创建表
CREATE TABLE INFOS1 AS SELECT * FROM INFOS;
--复制表结构
CREATE TABLE INFOS2 AS SELECT * FROM INFOS WHERE 1=2;
--建表和约束
CREATE TABLE INFOS
(
STUID VARCHAR2(7) NOT NULL, --学号 学号=‘S’+班号+2位序号
STUNAME VARCHAR2(10) NOT NULL, --姓名
GENDER VARCHAR2(2) NOT NULL, --性别
AGE NUMBER(2) NOT NULL, --年龄
SEAT NUMBER(2) NOT NULL, --座号
ENROLLDATE DATE, --入学时间
STUADDRESS VARCHAR2(50) DEFAULT '地址不详', --住址
CLASSNO VARCHAR2(4) NOT NULL, --班号 班号=学期序号+班级序号
CONSTRAINT PK_INFOS PRIMARY KEY(STUID) ,
CONSTRAINT CK_INFOS_GENDER CHECK(GENDER = '男' OR GENDER = '女'),
CONSTRAINTS UN_STUNAME UNIQUE(STUNAME) 
);
ALTER TABLE INFOS ADD CONSTRAINT PK_INFOS PRIMARY KEY(STUID) ;
ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_GENDER
CHECK(GENDER = '男' OR GENDER = '女');
ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_SEAT
CHECK(SEAT >=0 AND SEAT <=50) ;
ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_AGE
CHECK(AGE >=0 AND AGE<=100) ;
ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_CLASSNO
CHECK((CLASSNO >='1001' AND CLASSNO<='1999') OR
(CLASSNO >='2001' AND CLASSNO<='2999')) ;
ALTER TABLE INFOS ADD CONSTRAINTS UN_STUNAME UNIQUE(STUNAME) ;


CREATE TABLE SCORES
(
ID NUMBER , --ID ①
TERM VARCHAR2(2), --学期 S1或S2
STUID VARCHAR2(7) NOT NULL, --学号
EXAMNO VARCHAR2(7) NOT NULL, --考号 E+班号+序号
WRITTENSCORE NUMBER(4,1) NOT NULL, --笔试成绩
LABSCORE NUMBER(4,1) NOT NULL,--机试成绩
CONSTRAINT CK_SCORES_TERM CHECK(TERM = 'S1' OR TERM ='S2')
);
ALTER TABLE SCORES
ADD CONSTRAINT CK_SCORES_TERM CHECK(TERM = 'S1' OR TERM ='S2');


ALTER TABLE SCORES
ADD CONSTRAINT FK_SCORES_INFOS_STUID FOREIGN KEY(STUID) REFERENCES
INFOS(STUID);
--增加一列,添加到表的最后一列
alter table luxw8
add(age number(3) default 18 check(age<40));
alter table luxw8
--创建索引
create unique index uq_sal on emp(sal);


--删除约束
drop constraint luxw8_personid_nn ;
alter table luxw8
drop primary key cascade;
--------------------------------------------------------------------------------------------------------
--插入数据
INSERT INTO INFOS VALUES ( 
 's100102', '林冲', '男', 22, 2,
TO_DATE('2009-8-9 06:30:10',' YYYY-MM-DD HH24:MI:SS '), '西安', '1001' );


INSERT INTO INFOS VALUES (
's100104','阮小二','男',26,3,SYSDATE,default,'1001'); 
COMMIT;


INSERT INTO INFOS2 SELECT * FROM INFOS;
COMMIT;
--UPDATE 操作
 UPDATE INFOS SET CLASSNO='1002',STUADDRESS='山东莱芜'
WHERE STUNAME='阮小二';
commit;
--DELETE 操作
DELETE FROM INFOS WHERE STUID='s100103';
commit;


--DISTINCT 消除重复行
SELECT DISTINCT DEPTNO FROM EMP;
--BETWEEN…AND…
SELECT ename,job,sal FROM EMP WHERE sal BETWEEN 1000 AND 2000;
--LIKE 模糊查询
SELECT ENAME,JOB,SAL FROM EMP WHERE ENAME LIKE 'J%S';
-----------------------------------------------------------------------------------------------------------
--内连接
select e.last_name,e.dept_id,d.id,d.name
from s_emp e join s_dept d
on e.dept_id=d.id
where e.last_name='Smith';
--左链接
select c.name,c.sales_rep_id,e.id,e.last_name
from s_customer c left join s_emp e
on c.sales_rep_id=e.id;
--右连接
select c.name,c.sales_rep_id,e.id,e.last_name
from s_emp e right join s_customer c
on c.sales_rep_id=e.id;
--全连接
select c.name,c.sales_rep_id,e.id,e.last_name
from s_customer c full join s_emp e
on c.sales_rep_id=e.id;
--自连接
select e.last_name,m.last_name
from s_emp e,s_emp m
where e.manager_id=m.id;
--打印出和 Smith 在同一部门的员工的姓名
 select last_name,dept_id,start_date
from s_emp
where dept_id=(
select dept_id
from s_emp
where last_name='Smith');
------------------------------------------------------------------------------------
--字符函数
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 的字串,从 staart 处开始,截取 length 个字符,缺省 length,默认到结尾。
-----------------------------------------------------------------------------
--数字函数
ABS(x) x 绝对值 ABS(-3)=3
ACOS(x) x 的反余弦 ACOS(1)=0
COS(x) 余弦 COS(1)=1.57079633
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,返回计算后的新日期。d 表示日期, n 表示要加的月数。
LAST_DAY(d),返回指定日期当月的最后一天。
ROUND(d[,fmt]),返回一个以 fmt 为格式的四舍五入日期值, d 是日期, fmt 是格式模型。默认 fmt 为 DDD,即月中的某一天。
EXTRACT(fmt FROM d),提取日期中的特定部分(fmt 为: YEAR、 MONTH、 DAY、 HOUR、 MINUTE、 SECOND)
------------------------------------------------------------------------------------
--转换函数
TO_CHAR(d|n[,fmt])日期和数字转换为制定格式的字符串。 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 平均值 AVG(表达式)
SUM 求和 SUM(表达式)
MIN、 MAX 最小值、最大值 MIN(表达式)、 MAX(表达式)
COUNT 数据统计 COUNT(表达式)
----------------------------------------------------------------------------------
--pl/sql
--if then elsif end if
DECLARE
newSal emp.sal % TYPE;
BEGIN
SELECT sal INTO newSal FROM emp
WHERE ename='JAMES';
IF newSal>1500 THEN
UPDATE emp
SET comm=1000
WHERE ename='JAMES';
ELSIF newSal>1500 THEN
UPDATE emp
SET comm=800
WHERE ename='JAMES';
ELSE
UPDATE emp
SET comm=400
WHERE ename='JAMES';
END IF;
END;
--when then
DECLARE
v_grade CHAR(1):=UPPER('&p_grade'); ①
BEGIN
CASE v_grade ②
WHEN 'A' THEN
dbms_output.put_line('Excellent');
WHEN 'B' THEN
dbms_output.put_line('Very Good');
WHEN 'C' THEN
dbms_output.put_line('Good');
ELSE
dbms_output.put_line('No such grade');
END CASE;
END;
--loop 遍历游标
declare
v_student student%rowtype;
cursor c_student(v_id binary_integer) is
select * from student where id>v_id;
begin
open c_student(10);
loop
fetch c_student into v_student;
exit when c_student%notfound;
dbms_output.put_line('name: ' || v_student.name);
end loop;
close c_student;
end;
--for 循环遍历,最简单,用的最多,不需要声明 v_student、 打开关闭游标、 fetch。
declare
cursor c_student(v_id binary_integer) is
select * from student where id>v_id;
begin
for v_student in c_student(10) loop
dbms_output.put_line('name: '||v_student.name);
end loop;
end;




你可能感兴趣的:(Oracle)