当前位置: 代码迷 >> 综合 >> Oracle数据库常用SQL
  详细解决方案

Oracle数据库常用SQL

热度:79   发布时间:2024-03-10 01:14:45.0

一、新建表空间

1、创建表空间

--表空间名称、序列化的文件名、表空间初始化大小
create tablespace wubm_tablespace
datafile 'D:\software\Oracle\table_space\wybm.dbf'
size 5M

2、为表空间创建用户 pg

create user pg identified by root
default tablespace wubm_tablespace

3、为用户分配权限

grant connect,resource,dba to pg;

4、撤销权限

revoke dba from liugang;

二、对新建表空间进行操作

1、为表空间创建表 bm

create table bm(bmid number(8,0) primary key,bmname varchar2(30) not null,worktime date not null,age number(2,0) not null,descr varchar(100) null --可以为null
)

2、表中添加数据

--(1)sysdate为系统时间
insert into bm (bmid,bmname,worktime,age,descr) values (1,'赵四',sysdate,18,'中国第一男保姆');
--(2)默认添加日期格式 29-10月-2020 ,汉字月必须有
insert into bm (bmid,bmname,worktime,age,descr) values (2,'刘能','29-10月-2020',22,'中国第二男保姆');

3、查看表中所有数据

select * from bm;
select * from bm for update;

4、为表添加检查约束

alter table bm 
add constraints CK_AGE check (age between 18 and 50);

三、Oracle对象之序列

因为Oracle数据库中主键不是自增的,所以要单独创建一个序列,作为唯一标识。

1、创建序列 seq_bm

create sequence seq_bm
start with 15  --从1开始
increment by 1  --递增 1
nomaxvalue
nocycle
cache 10 --缓存10个方便使用

2、查看序列

select * from user_sequences;

3、使用序列

insert into bm (bmid,bmname,worktime,age,descr) values (seq_bm.nextval,'广坤','29-10月-2020',22,'中国第四男保姆');

4、查看序列的当前值

select seq_bm.currval from dual;

5、删除序列

drop sequence seq_bm;

四、索引

1、创建普通索引

-- 索引名 表名 列名
create index index_bmname on bm(bmname);

2、创建联合索引

									  列名,列名
create index index_workandage on bm (worktime,age);

五、分页

--当前页 n 每页条数 3
--当前页起始条数:当前页 (n-1)*3 结束条数 3n
select * from 
( select rownum rn ,e.* from (select * from bm) e where rownum <=6 )
where rn >3

六、PL/SQL编程

1、声明、赋值、输出

declarev_name varchar2(20):='科比';  --声明属性并赋值科比v_addr varchar2(40);  --声明属性v_age bm.age%type;  --声明属性,该属性与bm表里的age属性一致
beginv_addr:='辽宁省大连市';  --赋值select age into v_age from bm where bmid=10; --查询id为10的age并赋值给v_agedbms_output.put_line('名字:'||v_name||',地址:'||v_addr||',年龄:'||v_age);
end;

2、声明属性、聚合函数计算值

--如果是NULL的话相加为0 ,所以 sal+nvl(comm,0) 当comm列为NULL的话赋值0
declarev_totalage bm.age%type;v_name bm.bmname%type:='科比';
beginselect sum(age) into v_totalage from bm where bmname=v_name;dbms_output.put_line(v_name||'的总年龄是'||v_totalage);
end;

3、if else

declarescore number(3,0) :=30;detail varchar2(10);
beginif score >=60 thendetail:='及格了';elsedetail:='没及格';end if;dbms_output.put_line('考试结果:'||detail);
end;

4、case

declarescore number(3,0):=99;det varchar2(20);
begincasewhen score >0 and score<60 then det:='不及格';when score >=60 and score<70 then det:='一般';when score >=70 and score<80 then det:='较好';when score >=80 and score <90 then det:='良好';else det:='优秀';end case;dbms_output.put_line('考试结果:'||det);
end;

5、select语句使用case

select bmid,bmname,age,
case age when 18 then '成年了'when 22 then '长大了'end 经验
from bm;

6、loop循环

declarescore number(3,0):=30;
beginloopif score>=60 then exit;end if;  score:=score+5;dbms_output.put_line('值:'||score);end loop;
end;

7、while循环

declarescore number(3,0):=30;
beginwhile score<60loopscore:=score+5;dbms_output.put_line('值:'||score);end loop;
end;

8、for循环

beginfor i in 1..10 loopdbms_output.put_line('值:'||i);end loop;  
end;
  相关解决方案