Oracle 基础

Oracle 基础知识:

1、系统用户
 sys、system、sysman    --均为管理员权限,权限由高到低
 scott    --密码tiger,普通用户,默认被锁定,需要解除
 
 为用户授权:grant 权限 to username;
 
 创建用户:create user c##用户名 identified by 密码;    --用户名以c##开头
 用户授权:grant 权限 to username;
 修改密码:alter user 用户名 identified by 新密码;
    
 备注:dba_开头的是全库所有对象(管理员权限才能访问),
       user_开头的是当前用户对象,
       all_开头的是当前用户有权限访问的所有对象。

2、用户登录
 打开SQLplus:cmd-> sqlplus 
 username/password @orcl [as sysdba|sysoper]        --orcl是服务名
 
 设置SQLplus显示行宽:set line[size] number
 清屏:host cls
 编辑上一条执行语句:ed
 
3、切换用户
 conn username/password [as sysdba]

4、查看当前用户
 show user    --Oracle命令不需要";"结束,SQL语句才需要";"结束

5、用户字典表(保存用户信息,包含用户表空间等)
 所有用户:dba_users
 当前用户:user_users

6、启用被锁用户
 alter user username account unlock;

7、表空间分类
 永久表空间
 临时表空间
 undo表空间

8、表空间字典表
 所有用户:dba_tablespaces
 当前用户:user_tablespaces

9、更改用户默认表空间和临时表空间
 alter user username default|temporary tablespace tbsname;

10、创建表空间(需要对应创建一个数据文件)
 create tablespace tbsname datafile 'xx.dbf' size xm;    --默认表空间
 create temporary tablespace tbsname tempfile 'xx.dbf' size xm;        --临时表空间

 查看表空间数据文件位置:select file_name from `dba_data_files` where tablespace_name='大写表空间名';    --临时表空间数据文件表 dba_temp_files

11、修改表空间状态(联机、脱机、只读)
 alter tablespace tbsname online|offline|read only;
 
 查看表空间状态:select status from `dba_tablespaces` where tablespace_name='TEST_TBS';

 提示:online与read write等效。

12、给表空间增加或删除数据文件
 alter tablespace tbsname add datafile 'xx.dbf' size xm;
 alter tablespace tbsname drop datafile 'xx.dbf';

 提示:最初的数据文件不可删除。

13、删除表空间
 drop tablespace tbsname;    --只删除表空间
 drop tablespace tbsname including contents and datafiles;    --删除表空间及其内容和数据文件

14、常用数据类型
 字符串:char(n)        --定长,n最大2000个字节。注意是字节
        nchar(n)        --定长,n最大2000个字符。注意是字符。下同
        varchar2(n)        --可变长,n最大4000个字节。常用
        nvarchar2(n)    --可变长,n最大4000个字符
        --注意:带前缀"n"指存储Unicode,长度是字符数,而不是字节数,更适合存储中文
        --字符串必须是单引号,而服务名、表名可以用双引号!

 数值型:number(p,s)    --定点型,p是最大有效位数(不超过38个),s是小数位数,省略s则向上取整
        integer            --整型,四舍五入,等效于number(38)
    
 日期型:date            --精确到秒
        timestamp        --时间戳,当前时间戳:current_timestamp
    
 大字符:clob            --字符串数据,最大长度4G        
        blob            --二进制数据,最大长度4G

15、增加字段
 alter table tbname add colname datatype;    --add后面不要带column,区别于MySQL

16、更改字段类型
 alter table tbname modify colname datatype;

17、删除字段
 alter table tbname drop column colname;        --drop后面带上column

18、字段改名
 alter table tbname rename column oldname to newname;

19、表改名
 rename oldname to newname;

20、清空表
 truncate table tbname;

21、删除表结构
 drop table tbname;

22、添加数据
 insert into tbname (column1, column2, ...) values(value1, value2, ...);

23、复制表
 建表时:create table newtable as select columns from oldtable;
 添加时:insert into newtable (columns) select columns from oldtable;    --对应字段类型一致,名称不一定一致

24、更新数据
 update tbname set column1=value1, column2=value2 where conditions;

25、删除数据
 delete from tbname where conditions;

26、约束(系统约束信息表:"user_constraints")
 非空约束:not null        --默认null,可为空
    建表时添加:create table tbname(id number(6) not null);
    修改时添加:alter table tbname modify colname not null;
    
 主键约束:primary key    --一张表只能一个主键,但可以是联合主键
    建表时添加:create table tbname(id number(6) primary key);
        联合主键:create table tbname(id number(6), name varchar2(32), constraint cons_name primary key(id,name));
    修改时添加:alter table tbname add constraint pk primary key(id,...);
    
 --提示:Oracle没有自增字段!!

 外键约束:foreign keyreferences …
    建表时添加:create table tbname(fk number(32) references mastable(pk) on delete cascade);
    修改时添加:alter table tbname add constraint fk foreign key(id) references mastable(pk) on delete cascade;

 唯一约束:unique    --可以有空值,但是空值只能有一个
    建表时添加:create table tbname(id number(6) unique);
    修改时添加:alter table tbname add constraint un unique(id);
    
 检查约束:check(范围)
    建表时添加:create table tbname(id number(6) check(id>0 and id <100000));
    修改时添加:alter table tbname add constraint ck check(id>0 and id <100000);
    
27、更改约束名称
 alter table tbname rename constraint oldname to newname;

28、禁用和删除约束
 alter table tbname disable constraint cons_name;    --禁用约束
 alter table tbname drop constraint cons_name;    --删除约束
 alter table tbname drop primary key;    --删除主键
 
29casewhen … 语句(结果作为一个字段)
 例:
 select id,username,
    case 
        when id<=1 then '一等奖'
        when id>=2 then '二等奖'
    end as 等级奖
 from users;
 
30、常用函数
 字符串函数:
--------------------------------------------+--------------------------------------------------------------------
        函数                                |        描述
--------------------------------------------+--------------------------------------------------------------------
 lower(str)                                    |    将字符串表达式str中的所有大写字母转换为小写字母
--------------------------------------------+--------------------------------------------------------------------
 upper(str)                                    |    将字符串表达式str中的所有小写字母转换为大写字母
--------------------------------------------+--------------------------------------------------------------------
 initcap(str)                                |    首字母转换成大写
--------------------------------------------+--------------------------------------------------------------------
 substr(str,start,length)                    |    返回字符串表达式str中从第start开始的length个字符
--------------------------------------------+--------------------------------------------------------------------
 length(str)                                |    返回字符串表达式str的长度
--------------------------------------------+--------------------------------------------------------------------
 ascii(char)                                |    取char的ascii值
--------------------------------------------+--------------------------------------------------------------------
 chr(ascii)                                    |    取ascii对应的字符值
--------------------------------------------+--------------------------------------------------------------------
 replace(str,search_str[,replace_str])        |    将字符串str中的子串search_str替换成replace_str;如果search_str=null,返回str;
                                            |    如果replace_str=null,则会去掉str中的search_str
--------------------------------------------+--------------------------------------------------------------------
 instr(str1,str2[,n[,m]])                    |    获取子串str2在字符串str1中的位置。n为其实搜索位置,m为子串出现的次数;
                                            |    n为负,则从尾部开始搜索;n、m默认为1
--------------------------------------------+--------------------------------------------------------------------
 lpad(str1,n,str2)                            |    在字符串str1的左端填充字符串str2直到长度达到n;str2默认为空格,
                                            |    如果str1.length>n,则返回str1左端的n个字符
--------------------------------------------+--------------------------------------------------------------------
 rpad(str1,n,str2)                            |    在字符串str1的右端填充字符串str2直到长度达到n;str2默认为空格,
                                            |    如果str1.length>n,则返回str1左端的n个字符
--------------------------------------------+--------------------------------------------------------------------
 ltrim(str[,set])                            |    去掉字符串str左端包含的set中的任意字符
--------------------------------------------+--------------------------------------------------------------------
 rtrim(str[,set])                            |    去掉字符串str右端包含的set中的任意字符
--------------------------------------------+--------------------------------------------------------------------
 trim(str from string)                        |    从字符串string的头尾或者两端截断特定字符str
--------------------------------------------+--------------------------------------------------------------------
 concat(str1,str2)                            |    连接字符串,同"||"的作用一样
--------------------------------------------+--------------------------------------------------------------------

 日期函数:
--------------------------------------------+--------------------------------------------------------------------
        函数                                |        描述
--------------------------------------------+--------------------------------------------------------------------
 sysdate                                    |    返回系统当前日期和时间
--------------------------------------------+--------------------------------------------------------------------
 current_date                                |    返回当前会话时区所对应日期时间
--------------------------------------------+--------------------------------------------------------------------
 next_day(day,char)                            |    返回指定日期day后的第一个工作日char所对应的日期
--------------------------------------------+--------------------------------------------------------------------
 last_day(day)                                |    返回day日期所指定月份中最后一天所对应的日期
--------------------------------------------+--------------------------------------------------------------------
 add_months(day,n)                            |    返回day日期在n个月后(n为正数)或前(n为负数)的日期
--------------------------------------------+--------------------------------------------------------------------
 months_between(day1,day2)                    |    返回day1日期和day2日期之间相差的月份
--------------------------------------------+--------------------------------------------------------------------
 round(day[,fmt])                            |    返回日期的四舍五入结果。如果fmt指定'yyyy',则7月1日为分界线;
                                            |    如果fmt指定'mm',则16日为分界线;如果指定'dd',则中午12:00为分界线;默认舍入到日
--------------------------------------------+--------------------------------------------------------------------
 trunc(day[,fmt])                            |    日期截断函数。如果fmt指定'yyyy',则结果为本年度的1月1日;
                                            |    如果为'mm',则将结果为本月1日;默认截断到'dd',时间部分为0
--------------------------------------------+--------------------------------------------------------------------
 extract(year|month|day from day)            |    从日期中获取年月日
--------------------------------------------+--------------------------------------------------------------------

 类型转换函数:
--------------------------------------------+--------------------------------------------------------------------
        函数                                |        描述
--------------------------------------------+--------------------------------------------------------------------
 to_char(str[,fmt])                            |    将一个数字或日期转换成字符串,fmt如:yyyy-mm-dd hh24:mi:ss
--------------------------------------------+--------------------------------------------------------------------
 to_number()                                |    将字符型数据转换成数字型数据
--------------------------------------------+--------------------------------------------------------------------
 to_date(str,fmt)                            |    将字符型数据转换为日期型数据,fmt如:yyyy-mm-dd hh24:mi:ss
--------------------------------------------+--------------------------------------------------------------------
 cast                                        |    将一种built-in类型转换成另一种built-in类型
--------------------------------------------+--------------------------------------------------------------------

 聚合函数:
--------------------------------------------+--------------------------------------------------------------------
        函数                                |        描述
--------------------------------------------+--------------------------------------------------------------------
 avg(colname)                                |    计算一列值的平均值
--------------------------------------------+--------------------------------------------------------------------
 count(colname)                                |    统计一列中值的个数
--------------------------------------------+--------------------------------------------------------------------
 max(colname)                                |    求一列值中的最大值
--------------------------------------------+--------------------------------------------------------------------
 min(colname)                                |    求一列值中的最小值
--------------------------------------------+--------------------------------------------------------------------
 sum(colname)                                |    计算一列值的总和
--------------------------------------------+--------------------------------------------------------------------

 其它常用函数:
--------------------------------------------+--------------------------------------------------------------------
        函数                                |        描述
--------------------------------------------+--------------------------------------------------------------------
 decode(colname,val1,res1,                    |    类似于case...when语句。
        val2,res2,…[,default])                |    if语句的另一形式。将输入数值与参数列表比较,返回对应值。
                                            |    应用于将表的行转换成列以及if语句无法应用的场合
--------------------------------------------+--------------------------------------------------------------------
 sign(number)                                |    如果number大于0,sign则返回1;如果number小于0,sign则返回-1|    如果number等于0,sign则返回0
--------------------------------------------+--------------------------------------------------------------------
 trunc(number[,decimal_places])                |    number是要截取的数字,decimal_places是要保留的小数位。这个参数必须是个整数。 
                                            |    如果此参数缺省,默认取整
--------------------------------------------+--------------------------------------------------------------------
 greatest(expr1[,expr2]…)                    |    返回表达式中值最大的一个
--------------------------------------------+--------------------------------------------------------------------
 least(expr1[,expr2]…)                        |    返回表达式中值最小的一个
--------------------------------------------+--------------------------------------------------------------------
 nullif(expr1,expr2)                        |    如果expr1=expr2;则返回null,否则返回expr1
--------------------------------------------+--------------------------------------------------------------------
 nvl(expr1,expr2)                            |    如果expr1存在;则返回expr1;如果expr1不存在;则返回expr2
--------------------------------------------+--------------------------------------------------------------------
 nvl2(expr1,expr2,expr3)                    |    如果expr1存在;则返回expr2;如果expr1不存在;则返回expr3
--------------------------------------------+--------------------------------------------------------------------

31、存储过程与存储函数
 含义:存储在数据库中供所有用户程序调用的子程序。
 区别:函数有return,过程没有return。
 
 存储过程简单示例:
 不带参数:
 create procedure hello
 as 
    --声明部分
 begin
    --子程序主体
    dbms_output.put_line('hello world !');
 end;
 
 SQLplus调用:先打开sqlplus输入"set serveroutput on",然后"exec hello()"或"call hello()";

 
 带输入参数:
 create procedure incrsalary(uid in number)
 as
    orisalary users.salary%type;
    lastsalary users.salary%type;
 begin
    select salary into orisalary from users where id = uid;
    update users set salary = salary + 200 where id = uid;
    lastsalary := orisalary + 200;                            --注意!变量赋值用":="
    dbms_output.put_line('旧工资:'||orisalary||'  新工资:'||lastsalary);        --"||",连接符
 end;

32、存储函数
 示例:
 create function querysalary(uid in number)
 return number                --返回值类型
 as
    sal users.salary%type;
    countyear users.salary%type;
 begin
    select salary into sal from users where id = uid;
    countyear := sal * 12;
    return countyear;        --返回一个值
 end;
 
 SQLplus调用:select querysalary(1) from dual;        --不能用"exec"命令

33、in和out参数
 存储过程和存储函数都可以一个或多个out参数;
 存储过程虽无return,但可以通过out参数来实现返回值。
 
 一般原则:若只有一个返回值,用存储函数;否则,就用存储过程。
 
 示例:
 create or replace procedure userinfo(uid in number, uname out varchar2, usalary out number)
 as
 begin
    select username,salary into uname,usalary from users where id = uid;
 end;
 
 SQLplus调用:先申明out的接收变量
    var uname varchar2;
    var usalary number;
    exec userinfo(1,:uname,:usalary);        --":"引用变量来接收输出参数
    select :uname,:usalary from dual;        --使用输出
    

  

  至此。转载请注明出处。

posted @ 2018-12-15 21:59  失恋的蔷薇  阅读(523)  评论(0编辑  收藏  举报