Oracle Database,又名Oracle RDBMS,或简称Oracle
是目前世界上流行的关系型数据库管理系统,是目前最流行的C/S或B/S体系结构的数据库之一,它具有系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的 适应高吞吐量的数据库解决方案
oracle目前是世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系型数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能
第一种
第一步:使用PL/SQL,登录名为system,数据库名称不变,选择类型的时候把Normal修改为Sysdba;
第二步:选择myjob,查看users;
第三步:选择system,右击点击“编辑”;
第四步:修改密码,把“帐户被锁住”的勾去掉;
第五步:点击“应用”再点击“关闭”;
第六步:重新登录就可以通过验证了;
第二种
ALTER USER 用户名(自带一个用户scott) ACCOUNT UNLOCK;
一 、字符串类型
1.1:CHAR类型,定长字符串,会用空格填充来达到其最大长度。非NULL的CHAR(12)总是包含12字节信息。
1.2: NCHAR类型;NCHAR字段最多可以存储2,000字节的信息。它的最大长度取决于国家字符集。
1.3: VARCHAR类型;不要使用VARCHAR数据类型。使用VARCHAR2数据类型。
1.4: VARCHAR2类型;变长字符串,与CHAR类型不同,它不会使用空格填充至最大长度。VARCHAR2最多可以存储4,000字节的信息。
1.5: NVARCHAR2类型;这是一个包含UNICODE格式数据的变长字符串。 NVARCHAR2最多可以存储4,000字节的信息。
二. 数字类型
2.1 NUMBER类型;NUMBER(P,S)是最常见的数字类型,可以存放数据范围为1013010126(不包含此值),需要122字节(BYTE)不等的存储空间。
P 是Precison的英文缩写,即精度缩写,表示有效数字的位数,最多不能超过38个有效数字
S是Scale的英文缩写,可以使用的范围为-84~127。Scale为正数时,表示从小数点到最低有效数字的位数,它为负数时,表示从最大有效数字到小数点的位数。
2.2 INTEGER类型
INTEGER是NUMBER的子类型,它等同于NUMBER(38,0),用来存储整数。若插入、更新的数值有小数,则会被四舍五入。
2.3 浮点数
Oracle 数据库提供了专为浮点数的两种数值数据类型:
BINARY_FLOAT 是 32 位、 单精度浮点数字数据类型。可以支持至少6位精度,每个 BINARY_FLOAT 的值需要 5 个字节,包括长度字节。
BINARY_DOUBLE 是为 64 位,双精度浮点数字数据类型。每个 BINARY_DOUBLE 的值需要 9 个字节,包括长度字节。
2.5 FLOAT类型
FLOAT类型也是NUMBER的子类型。
三. 日期类型
3.1 DATE类型
DATE是最常用的数据类型,日期数据类型存储日期和时间信息。虽然可以用字符或数字类型表示日期和时间信息,但是日期数据类型具有特殊关联的属性。为每个日期值,Oracle 存储以下信息: 世纪、 年、 月、 日期、 小时、 分钟和秒。一般占用7个字节的存储空间。
3.2 TIMESTAMP类型
这是一个7字节或12字节的定宽日期/时间数据类型。它与DATE数据类型不同,因为TIMESTAMP可以包含小数秒,带小数秒的TIMESTAMP在小数点右边最多可以保留9位。
在Oracle中没有数据库之间的分类,所以就有了表空间
表空间主要是为了整理 分类数据
ORACLE创建之初就有一个默认的表空间users
创建表空间的方式:
-- 创建表空间
-- 表空间真实存在,所以要指定路径
-- 分配存储大小
create tablespace tp_Space
datafile 'D:\oracleSpace\tp_Space01.dbf' size 60M;
-- 删除表空间
drop tablespace tp_Space including contents;
-- 赋予新用户权限
grant connect,resource to test;
-- 赋予具体的实体操作权限
grant all on scott.student to test;
在Oracle中我们在创建列没有自增长的属性,但是可以通过创建序列来实现
序列是独立存在的,能够实现自增长的
查询序列 select 序列名 from dual;`–序列
序列是独立存在的,能够实现自增长的
查询序列 select 序列名 from dual;currval (现在的值) nextval(执行下一次的值)
Oracle中索引分为一下几种:
主键索引 唯一索引 反向键索引 位图索引 大写函数索引
创建索引:
create index index_u_age on student(sage) reverse; --反向键索引
create bitmap index index_u_age on student(sage);--位图索引
create bitmap index index_u_age on student(upper(sid)) ;--函数索引
drop index index_u_age; --删除索引
declare
-- 变量
v_a student.sage%type;
v_b student.sname%type;
-- 常量
c_c constant number(5):=100;
begin
--直接赋值
v_a:=10;
v_b:='Hello';
-- sql语句赋值
select sname,sage into v_b,v_a from student where sid=2;
dbms_output.put_line('变量的值是'||v_a);
dbms_output.put_line('变量的值是'||v_b);
end;
/* if判断 */
declare
v_a student.sage%type;
begin
select sage into v_a from student where sid=3;
if v_a<18 then
dbms_output.put_line('未成年');
elsif v_a>18 and v_a<30 then
dbms_output.put_line('青年');
elsif v_a>30 and v_a<50 then
dbms_output.put_line('中年');
elsif v_a>50 then
dbms_output.put_line('老年');
end if;
dbms_output.put_line(v_a);
end;
/* 循环 */
declare
v_a number(4):=1;
begin
loop
v_a:=v_a+1;
dbms_output.put_line(v_a);
if v_a>10 then
dbms_output.put_line('今天好冷');
exit;
end if;
end loop;
end;
/* case */
declare
v_a number(4):=1;
begin
case
when v_a=1 then dbms_output.put_line('周一');
when v_a=2 then dbms_output.put_line('周二);
when v_a=3 then dbms_output.put_line('周三');
when v_a=4 then dbms_output.put_line('周四');
end case;
end;
-- 游标使用
declare
--定义游标
cursor cursor_a is select * from student;
--定义变量
v_sid student.sid%type;
v_sname student.sname%type;
v_sage student.sage%type;
v_ssex student.ssex%type;
begin
-- 打开游标
open cursor_a;
--提取游标
loop
fetch cursor_a into v_sid,v_sname,v_sage,v_ssex;
-- 使用游标
dbms_output.put_line(v_sid||v_sname||v_sage||v_ssex);
exit when cursor_a%notfound;-- 是否有下条数据
end loop;
--关闭游标
close cursor_a;
end;
/* 存储过程 */
-- 存储过程
create procedure add_student
(sid student.sid%type,
sname student.sname%type,
sage student.sage%type,
ssex student.ssex%type,
out_flah out number)
is
begin
insert into student values(sid,sname,sage,ssex);
commit;
out_flah:=1;
end;
call add_student(10,'史子',29,'男');-- 调用没有返回值的存储过程
declare
flag number;
begin
add_student(13,'邝邝',22,'男',flag);
dbms_output.put_line(flag);
end;