Oracle 10G 基本操作(1)

 
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中断开
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值