Oracle常用命令~

一、DDL操作:数据定义语言

--  创建表空间
create tablespace 表空间名称
 datafile '文件路径'
 size 10m;  -- 文件大小

-- 删除表空间
drop tablespace 表空间名称;

-- 创建用户
create user 用户名称 identified by 用户密码
 default tablespace 表空间名称
 tempporary tablespace temp; //临时的表空间

-- system用户进行用户授权
grant connect,resource  to 用户名;

-- 修改用户口令
alter user 用户名 identified by 新的口令;

-- 切换用户
conn 用户名/密码 as 用户权限(sysdba:实际切换为sys);

-- 撤销权限
revoke 权限|角色 from 用户名;

-- 创建表
create table 表名( 列名 数据类型);

-- 删除表中的记录而不删除表结构
truncate table 表名;

-- 创建序列
create sequence 序列名称
  start with integer  //指定要生成的第一个序列号
  increment by integer  //用于指定序列号之间的间隔,其默认值为1
  maxvalue integer  //指定序列可以生成的最大值
  minvalue integer  //指定序列的最小值
  cycle|nocycle   // cycle:继续从头开始生成值、nocycle:不能再继续生成值
  cache integer|nocache; //cache:可以预先分配一组序号、nocache:不分配

例 :
CREATE SEQUENCE SEQ_DEMO 
INCREMENT BY 1 
START WITH 1 
NOMAXvalue 
NOCYCLE 
NOCACHE;


-- 访问序列
序列名.nextval:增加序列值,并返回
序列名.currval:返回当前的值

-- 更改序列
alter sequence 序列名
  increment by integer
  maxvalue integer|nomaxvalue
  minvalue integer|nominvalue
  cycle|nocycle
  cache integer|nocache;

-- 删除序列
drop sequence 序列名;

-- 使用序列
currval 表示序列的当前值,新序列必须使用一次nextval 才能获取到值,否则会报错

nextval 表示序列的下一个值。新序列首次使用时获取的是该序列的初始值,从第二次使用时开始按照设置的步进递增

查询序列的值:select seq_name.[currval,nextval] from dual;

SQL语句中使用:insert into table (id) values (seq_name.nextval)


-- 创建同义词(私有同义词)
create or replace synonym 别名 for 对象.列名;

-- 创建同义词(公有同义词)
create or replace public synonym 别名 for 对象.列名;

-- 删除同义词
drop [public] synonym 同义词别名;

-- 创建索引
create [unique:唯一,bitmap:位图] index 索引名称 on 表名 [reverse];

-- 删除索引
drop index 索引名称;

-- 显示错误
  show errors;


二、DML操作:数据操作语言

-- 选择无重复的行
distinct

例:select distinct 列名 from 表名;

-- 带条件和排序的select命令
order by 列名  【asc:升序、desc:降序】

例:select 列名 from 表名 where order by 列名 asc,列名 desc;

-- 使用列别名
as    --->别名中有特殊字符的情况,需要加上双引号“”

例:select 列名 as “别名”from 表名;

-- 利用现有的表创建新表

例:create table 新表 AS select 列名 from 旧表 [where....];
例:只创建新表:create table 新表 as select * from 旧表名 where 1=2;

-- 查看表中行数

例:select  count(*) form 表名;-- 效率底  、select  count(1) form 表名;-- 效率高

-- || 操作符为连接操作符

例:select stuName,stuAge 
      from stuInfo
      group by stuName,stuAge
      having(count(stuName || stuAge) < 2);

-- oracle数据库分页:
    三层嵌套:
       最内层:用于过滤及排序
       中间层:采用rownum指明上限
       最外层:采用rownum的别名指明下限
例:1.select * from (select t.*,rownum rn from(select * from emp order by empId)t where rownum<=6) where rn>=3;
      2.select t.* from (select stu.*,rownum rn from student where rownum<=6) t where rn>=3;
      3.select t.* from (select stu.*,rownum rn from student) t where rn between 3 and 6;
      4.select * from (select * from emp where rownum<=6) minus (select * from emp where rownum<=3);  -- 效率低,不稳定

-- 批量添加数据
insert into 表名(列名,列名,...)
select 列名,列名,...
union
select 列名,列名,...;

-- 常量
select 常量 form dual;


三、TCL操作:事务控制语言

-- 事务提交
commit;

-- 事务回滚
rollback;

-- 存储点、保存点
savepoint 存储点名称;

-- 回滚到存储点
rollback to 存储点名称;


四、DCL:数据控制语言

-- 添加外键约束
alter table 表名 add contraint fk_外键名称 foreign key(列名) references 主表(列名);

-- 添加列
alter table 表名 add (列名 数据类型 ,列名 数据类型);


五、SQL操作符

算术操作符:
  +、-、*、/

比较操作符:
 =、!=、<、>、<=、>=、BETWEEN...AND、IN、LIKE、IS NULL

逻辑操作符:
 AND(与)、OR(或)和NOT(非)

集合操作符:
 UNION(联合)、
 UNION ALL(联合所有)、
 INTERSECT(交集)、
 MINUS(减集)

连接操作符:
 ||:用于将两个或多个字符串合并成一个字符串,或者将一个字符串与一个数值合并在一起。


六、SQL函数

转换函数:
 to_char():转换成字符串类型
 to_date():转换成日期类型
 to_number():转换成数值类型

其他函数:
 NVL(exp1,exp2):exp1的值为null,返回exp2的值,否则exp1的值
NVL2(exp1,exp2,exp3):exp1的值为null,返回exp3的值,否则exp2的值
DECODE(value,if1,then1,if2,then2,...,else):value的值为if1,返回then1

分析函数:
 函数名([参数]) OVER([分区子句][排序子句])

函数:rank:返回一个唯一的值,当遇到相同的数据时,所有相同数据的排名是一样的,同时会在最后一条相同记录和下一条不同记录的排名之间空出排名。、
         dense_rank:返回一个唯一的值,当遇到相同数据时,所有相同数据的排名都是一样的。、
         row_number:返回一个唯一的值,当遇到相同数据时,排名按照记录集中记录的顺序一次递增。


七、PL/SQL

1.结构:
declare
  声明变量、常量等等
begin
  执行部分
  exception
    异常处理部分
end;

2.运算符和表达式
   关系运算符: =:等于、<>,!=,~=,^=:不等于、<:小于、>:大于、<=:小于等于、>=:大于等于
   一般运算符: +:加号、-:减号、*:乘号、/:除号、:=:赋值运算符、=>:关系号、..:范围运算符、||:字符连接符
   逻辑运算符: is null:是空值、between and :介于两者之间、in:在一列值中间、or :逻辑或、 and:逻辑与、not:取反

3.常量和变量的声明
 变量:
    变量名 类型 := 初始值;
 常量:
    常量名 类型 := 初始值;

4.给变量赋值:
    1.使用select into
        select 列名 into 变量名 from 表名 where 条件;
    2.使用:=赋值运算符
        变量名 := 值;

5.数据类型
  char、varchar2、binary_integer、number(p,s) long、date、boolean
  lob:bfile、blob、clob、nclob

6.record 记录:相当与Java中的类
declare
   type 记录名 is record(属性名 类型);

%type:数量可以不同
%rowtype:类型结构相同

6. 输出语句
set serveroutput on;

dbms_output.put_line();

7.PL/SQL控制语句

条件控制:
  1)if 条件表达式 then 
          sql语句
       else
          sql语句
       end if;
  2)if 条件表达式 then
           sql语句
       elsif 条件表达式 then     //elsif    没有e,和Java中不太一样
           sql语句
        else 
            sql语句
        end if;
   3) case 条件表达式 
         when  表达式结果 then 
            sql语句
         ...
         else
            sql语句
       end case;
    4)case
            when 条件表达式 then
               sql语句
            ...
            else
               sql语句
          end case;

循环语句:
   1) loop
          sql语句
          exit when 条件语句
       end loop;
    2)while  条件语句 loop
             sql语句
         end loop;
    3)for 循环计数器(变量) in [reverse:反] 下限(最小值) ... 上限(最大值) loop
            SQL语句
          end loop;

8.游标   ****重点*****     : Java中resultSet底层就是游标实现的

游标分类:
  一、静态游标:是再编译时知道明确的select语句的游标
    1)隐式游标
       
    2)显式游标 
         a.声明游标
    cursor 游标名称 (参数 类型) is 查询语句;
         b.打开游标
                open 游标名称(参数);
         c.提取游标  (作用:1.进行游标的下一步指向,2.如果查询有结果,则游标 into 赋值给变量名,否则,游标保持原来的状态)
                fetch 游标名称(参数) into 变量名;
         d.关闭游标
                close 游标名称;

        显式游标属性: %found :发现值,返回true、%notfound:没发现值,返回true、
                               %rowcount:返回DML语句影响的行数、%isopen:返回游标是否已打开
  二、动态游标:
    1)强类型动态游标:在游标使用之前,虽未指定游标的查询定义,但是游标的类型已经确定
         type 游标类型 is ref cursor return 记录类型
     例:
            declare 
            type ref_deptrow is ref cursor return dept%rowtype; /*强类型动态游标声明*/
    2)弱类型动态游标:在游标使用之前,游标的类型无法具体确定,要等到程序执行时,才能确定游标的类型。弱类型动态游标没有返回值。
         type 游标类型 is ref cursor 
      例:
            declare 
            type ref_deptrow is ref cursor; /*弱类型动态游标声明*/


触发器:级联删除(慎用)、自动的日志添加、模拟自增列的值
  含义:当特定时间出现时自动执行的存储过程
  语法:create or replace trigger 触发器名称
                after|before|instead of
                [insert] [[or] [update] [of column_list]]
                [[or] delete]
                on table_or_view_name
                [referenceing{old [as] old/new [as] new}]
                [for each row]
                [when (condition)]
                pl/sql_block;

例:
create or replace trigger trigger_dept_insert
    before insert
    on dept
    for each row
begin
    select seq_dept.nextval into NEW.deptno from dual;
end;
/


   

猜你喜欢

转载自blog.csdn.net/weixin_43552143/article/details/87744490