![](https://i-blog.csdnimg.cn/blog_migrate/4320d1d4f23f75fbe2d7c286fd012db9.jpeg)
C:Documents and SettingsAdministrator>sqlplus
SQL*Plus: Release 9.0.1.0.1 - Production on 星期一 2月 16 17:26:46 2009
(c) Copyright 2001 Oracle Corporation. All rights reserved.
请输入用户名: /as sysdba
连接到:
Oracle9i Enterprise Edition Release 9.0.1.1.1 - Production
With the Partitioning option
JServer Release 9.0.1.1.1 - Production
SQL> -- Oracle 10g 学了一个星期,把学的拿出来总结一下,有错误的地方请指正
SQL> spool 'e:/log.txt'
SP2-0332: 无法创建假脱机文件。
SQL> --初学 Oracle 10g 小节一下
SQL> --Oracle 的结构就不多说了。在Oracle 中有DDL(数据定义语句),DML(数据操作语句),DCL(数据控制语句),TCL(事务控制语句)
SQL> --当前 sysdba 用户 ,我要用 scott 用户登陆,默认密码:tiger
SQL> --scott 第一次登陆不上,要解锁 alter user scott unlock; , alter user scott lock; 是上锁 它们是哪种语句?
SQL> --首先要有一个表空间
SQL> create tableSpace good
2 dataFile 'd:/good.dbf'
3 size 1m
4 autoExtend on;
表空间已创建。
SQL> --创建一个用户
SQL> create user myGood
2 identified by hope
3 default tableSpace good;
用户已创建
SQL> --表空间似乎有问题,要怎么修改?
SQL> alter dataBase dataFile 'D:/Good.dbf'
2 reSize 4m;
数据库已更改。
SQL> --别的不多说了,现在要进表空间了
SQL> conn myGood/hope
ERROR:
ORA-01045: user MYGOOD lacks CREATE SESSION privilege; logon denied
警告: 您不再连接到 ORACLE。
SQL> --为什么进不去?忘了授权,再来!
SQL> conn /as sysdba
已连接。
SQL> grant connect to myGood;
授权成功。
SQL> grant reSource to myGood;
授权成功。
SQL> grant dba to myGood;
授权成功。
SQL> --第一个是登录权,第二个是使用表空间权,第三个是数据管理员权,不对!过头了!再来!
SQL> revoke dba from myGood;
撤销成功。
SQL> --前4条是DCL语句,开始的问题想到了?
SQL> conn myGood/hope;
已连接。
SQL> --创建,删除数据库的对象,修改数据对象的属性,都是DDL 语句如:create ,drop ,alter 。系统默认提交
SQL> --10g中才有的 alter table [表名] modify((字段)(类型)) 修改字段操作
SQL> --number((p),(s))数据类型
SQL> create table table1
2 (
3 userNum number(5),
4 userNum2 number(9,4)
5 );
create table table1
*
ERROR 位于第 1 行:
ORA-01950: 表空间'GOOD'中无权限
SQL> conn /as sysdba
已连接。
SQL> grant reSource to myGood;
授权成功。
SQL> conn myGood/hope;
已连接。
SQL> create table table1
2 (
3 userNum number(6),
4 userNum2 number(9,4)
5 );
表已创建。
SQL> --这个 Good 表空间 scott 是不可使用的
SQL> grant select on table1 to scott;
授权成功。
SQL> grant all on table1 to scott;
授权成功。
SQL> revoke all on table1 from scott;
撤销成功。
SQL> -- select ,insert ,update ,delete 都是 DML(数据操作语言) ,它们由用户手动提交或是在退出时系统自动提交
SQL>
SQL> insert into table1 values(123456789,123);
insert into table1 values(123456789,123)
*
ERROR 位于第 1 行:
ORA-01438: 值大于此列指定的允许精确度
SQL> insert into table1 values(123.123, 123.1234567);
已创建 1 行。
SQL> insert into table1 values(123 , 123.1123456);
已创建 1 行。
SQL> select * from table1;
USERNUM USERNUM2
---------- ----------
123 123.1235
123 123.1123
SQL> --想起什么了?为什么这样?
SQL> --提交属于 TCL(事务控制语言) Oracle 是大家的,如果不提交,系统的锁机制(以后慢慢说)会锁住,大家都用不了(喂!里面的,不要霸住侧所,我忍不住了....)
SQL> commit;
提交完成。
SQL> --还有savePoint ,roolBack
SQL> savePoint p1;
保存点已创建。
SQL> insert into table1 values (144 , 544);
已创建 1 行。
SQL> select * from table1;
USERNUM USERNUM2
---------- ----------
123 123.1235
123 123.1123
144 544
SQL> rollBack to p1;
回退已完成。
SQL> --提交后就不可以回退了
SQL>
SQL> sleect * from table1;
SP2-0734: 未知的命令开头 "sleect * f..." - 忽略了剩余的行。
SQL> select * from table1;
USERNUM USERNUM2
---------- ----------
123 123.1235
123 123.1123
SQL> --char , varchar , varchar2 ,nvarchar , nvarchar2
SQL> create table table2
2 (
3 userInfo char(4),
4 userInfo2 varchar(4),
5 userInfo3 varchar2(4),
6 userInfo4 nvarchar2(4)
7 );
表已创建。
SQL> insert into table2 values('abcd','dbca','efga','asfa');
已创建 1 行。
SQL> --这是10g 在 9i 里这会有错, nvarchar 和 nvarchar2 在插入时要加 N 如 N'小猴子'
SQL> --date
SQL> create table table3
2 (
3 userDate date
4 );
表已创建。
SQL> select sysdate from dual;
SYSDATE
----------
16-2月 -09
SQL> --时间是这样写的
SQL> insert into table3 values('28-2月 -88');
已创建 1 行。
SQL> select * from table3;
USERDATE
----------
28-2月 -88
SQL> --好丑!不要,不要....
SQL> alter session set nls_date_format = 'YYYY-MM-DD';
会话已更改。
SQL> select * from table3;
USERDATE
----------
1988-02-28
SQL> insert into table3 values('5-7月 -88');
insert into table3 values('5-7月 -88')
*
ERROR 位于第 1 行:
ORA-01861: 文字与格式字符串不匹配
SQL> insert into table3 values('1988-7-5');
已创建 1 行。
SQL> --这里也改了呀,不过下次打开就又恢复了。
SQL> --还有招...嘿嘿....
SQL> insert into table3 values(to_date('2009@16@2','YYYY@dd@MM'));
已创建 1 行。
SQL> select * from table3;
USERDATE
----------
1988-02-28
1988-07-05
2009-02-16
SQL> select to_char(sysDate , 'YYYY**MM**DD') from table3;
TO_CHAR(SYSD
------------
1988**02**28
1988**07**05
2009**02**16
SQL> conn scott/tiger;
已连接。
SQL> --伪表和伪列 。在 Oracle 中为了遵守 T-SQL 的标准 有了 dual 表即 表.
SQL> select sysDate from dual;
SYSDATE
----------
2009-02-16
SQL> -- scott 下有哪些表?
SQL> select table_name from user_tables;
TABLE_NAME
------------------------------
BONUS
DEPT
EMP
SALGRADE
SQL> --看看表 emp
SQL> desc emp;
名称 是否为空? 类型
----------------------------------------- -------- -------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
SQL> --rowID 记录数据行在硬盘上唯一的标识 rowNum 记录查询结果的序号.它们是伪列
SQL> select rowID,rowNum , Ename from emp where rowNum < 4;
ROWID ROWNUM ENAME
------------------ ---------- ----------
AAAH14AABAAAO+HAAA 1 SMITH
AAAH14AABAAAO+HAAB 2 ALLEN
AAAH14AABAAAO+HAAC 3 WARD
SQL> select rowID,rowNum , Ename from emp where rowNum > 2;
未选定行
SQL> select rowID,rowNum , Ename from emp where rowNum < 4 order by ename;
ROWID ROWNUM ENAME
------------------ ---------- ----------
AAAH14AABAAAO+HAAB 2 ALLEN
AAAH14AABAAAO+HAAA 1 SMITH
AAAH14AABAAAO+HAAC 3 WARD
SQL> --伪列 rowNum 是在查询结果出来后加上的,在 order by 之前。所以 rowNum > 2 出错.
SQL> select row_number()
2 over( partition by job order by empNo ) myIndex,
3 job,eName ,sal from emp;
MYINDEX JOB ENAME SAL
---------- --------- ---------- ----------
1 ANALYST SCOTT 3000
2 ANALYST FORD 3000
1 CLERK SMITH 800
2 CLERK ADAMS 1100
3 CLERK JAMES 950
4 CLERK MILLER 1300
1 MANAGER JONES 2975
2 MANAGER BLAKE 2850
3 MANAGER CLARK 2450
已选择9行。
SQL> --常用它分页
SQL> select * from
2 ( select row_number() over ( order by empNo ) myIndex ,job,eName from emp )
3 where myIndex between 6 and 10;
MYINDEX JOB ENAME
---------- --------- ----------
6 MANAGER BLAKE
7 MANAGER CLARK
8 ANALYST SCOTT
9 PRESIDENT KING
10 SALESMAN TURNER
SQL> --类似的有 rank(存在相同值时给出相同序号,空出预留序号) ,dense_rank(存在相同值时给出相同序号,但不空出预留序号)
SQL> --SQL2005 中也有类似操作,以后再聊!886.
SQL> --我的理想是:成为超级程序员!希望能和大家一起多多交流,学习进步。
SQL> --邮箱:zhouxianglh@gmail.com 。欢迎来信。
SQL> exit
从Oracle9i Enterprise Edition Release 9.0.1.1.1 - Production
With the Partitioning option
JServer Release 9.0.1.1.1 - Production中断开