Oracle---基础知识篇

Posted Shall潇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle---基础知识篇相关的知识,希望对你有一定的参考价值。

一、基本数据类型

查看自己的oracle支持的数据类型命令

select distinct data_type from user_tab_cols;

1、字符型

Char:定长最大2000字符。如char(10),当填入’abc’不足10个字符时,自动用空格填充剩余部分。较浪费空间,但查询速度快。

Varchar2:可变长最大4000字符。如varchar(20),当填入’abc’时,占用空间3个字符,剩余的部分不占用。节省空间,但查询会比较慢。

Clob(character large objiect):用于存储字符型大对象(如一篇文章),最大4G。

NCHAR:即国家字符集,使用方法和CHAR相同。如果开发的项目需要国际化,那么数据类型选择NCHAR数据类型。NCHAR数据类型和CHAR数据类型最大的区别在于NCHAR用来存储Unicode字符集类型,即双字节数据。

2、 数字型

Number 范围-10ˆ38 -10ˆ38。可以是表示整数,也可以表示小数

Number(5,2)表示一个小数有5位有效数字,2为小数

Number(5)表示一个5位整数

Long表示长整型

Float表示浮点型

NCLOB 数据类型用于存储大的NCHAR字符数据。NCLOB数据类型同时支持固定宽度字符和可变宽度字符(Unicode字符数据)。大字符对象的大小不大于4GB。

3、日起类型

Date :包含年月日时分秒

Timestamp:是对date的扩展,精确到小数秒(毫秒级),用的较少

4、文件存储类型

Blob:二进制数据 可用于存储图片、声音、视频等 最大4G。

注:一般文件很少会往数据库里放,一般会放到文件夹内,数据库里放文件路径。但对于一些安全性要求非常的文件往往会用到。

二、相关命令

创建用户

--创建用户
create user shall IDENTIFIED by 123456;

--赋予权限给指定用户
GRANT CONNECT,RESOURCE,dba to shall;

创建命名空间

--创建表空间
CREATE tablespace ts1 datafile '/home/oracle/tablespace/ts1.dbf'size 50M;

--修改默认表空间
ALTER database DEFAULT tablespace ts1;

创建表

--创建表
create table tb_stu(
id number,
name VARCHAR(32)
primary key (id)
);

三、自增长

由于Oracle不像mysql一样拥有auto increment 可以实现某一列自增长,在Oracle中实现起来就比较麻烦一点,下面就来讲解一下,Oracle如何实现自增长

1、创建表

create table tb_stu(id number,name VARCHAR(32));

2、创建一个序列

【其实下面很多参数可以不用写,只是为了展示序列的所有参数】

--创建序列完整版
create sequence kt minvalue 1 nomaxvalue INCREMENT by 1 start with 1 nocache;

下面是序列的引伸知识,这里千万别执行,因为执行了第一个,最后你会发现结果并不是从 1 开始,执行第二个会报错,只有先执行第一个,再执行第二个才会正常显示

select user_seq2.nextval from dual;
select user_seq2.currval from dual;

3、创建触发器

--创建触发器
create or replace trigger tb_stu_trigger_insertId
before insert on tb_stu for each row
begin
select kt.nextval into:new.id from dual;
end;

4、插入数据

insert into tb_stu (name) values ('Jerry');

可以自己select 一下,检验一下结果

四、触发器

和MySQL几乎一样

1、创建表
【书籍表的typeId 参考 书籍类型表的id】

--创建书籍表
create table t_book(
id NUMBER,
bookName varchar(32),
typeId number,
primary key(id)
);

--创建书籍类型表 t_book_type
create table t_book_type(
id NUMBER,
typeName varchar(32),
primary key (id)
);

--创建历史表
create table t_book_oplog(
actionuser VARCHAR2(32),
actionname VARCHAR2(32),
actiontime DATE
);

2、创建触发器
【对 t_book 表进行update、insert、delete操作时,会将数据写入t_book_oplog中】

create or replace TRIGGER tr_t_book_oplog
after insert or update or delete on t_book
begin
	if updating then
		insert into t_book_oplog values(user,'update',SYSDATE);
	else if inserting then
		insert into t_book_oplog values(user,'insert',SYSDATE);
	else if deleting then
		insert into t_book_oplog values(user,'delete',SYSDATE);
	end if;
	end if;
	end if;
end;

五、自定义函数

1、统计表中数据行数

--创建函数--统计行数
create or replace FUNCTION GETOPCOUNT return number as
begin
	declare op_count number;
	begin
		select count(1) into op_count from t_book_oplog;
		return op_count;
	end;
end GETOPCOUNT;

--调用自定义函数
select getopcount() from dual;

2、第一种执行sql

--创建带参数函数
create or replace FUNCTION getopcountBy(opName VARCHAR2) return number as
begin
	declare op_count number;
	begin
	--第一种字符串拼接:=+ ,不用考虑字段加 '' 
		select count(1) into op_count from t_book_oplog where actionName =+ opName;
		return op_count;
	end;
end getopcountBy;

select * from t_book_oplog;

select getopcountBy('insert') from dual;
select getopcountBy('update') from dual;

3、第二种执行sql

--自定义函数,里面执行sql
create or replace FUNCTION getopcountBy2(opName VARCHAR2) return number as
begin
	declare op_count number;
	query_sql varchar2(300);
	begin
	--第二种字符串拼接 a || b , 想要加 ' 请使用 ''''
		query_sql:='select count(1) from t_book_oplog where actionName ='||''''|| opName||'''';
		execute immediate query_sql into op_count;
		return op_count;
	end;
end getopcountBy2;

select getopcountBy2('insert') from dual;

以上是关于Oracle---基础知识篇的主要内容,如果未能解决你的问题,请参考以下文章

Oracle---基础知识篇

Oracle---基础知识篇

我的oracle生涯基础内容篇

Oracle---基础知识篇

Oracle---基础知识篇

Oracle---基础知识篇