1.自带三种登录方式:

Scott/tiger   sys/manager   system/manager

2.基本的操作

1)  建数据库
create tablespace 表空间的名称

datafile ‘路径+文件.dbf’

size 初始大小m

autoextend on    --是否为自动增长

eg:

create tablespace myspace

datafile 'e:\a.dbf'

size 5m

autoextend
on

2)建用户

create  user 用户名

identified  by 密码     --当密码为全数字是用”全数字”

[default  tablespace 该用户默认的表空间即(数据库)]

[default  temporary 
tablespace  该用户默认的临时表空间]

--系统当前的临时表空间  --系统默认的Temp

Eg:

create user myuser

identified by myuser

default tablespace myspace

3) 修改用户:

alter 
user  用户名

identified  by 新密码

alter  user  用户名

default 
tablespace  新表空间名称

修改用户名:

i.             
查找数据库user$ 中的对应的用户名,得到user#的值

select  user# 
from  user$  where 
name = ‘用户名’

ii.             
根据查到的user#的值,修改用户的名称信息

update  user$ set name = ‘新用户名’  where user# = ‘查到的用户编号’

iii.             
提交修改

commit  system 
checkpoint

alter  system 
checkpoint

alter  system 
share_ pool

4) 授权、撤销

grant /revoke
 connect | resource | dba  to 用户名

5) 用户账号的锁定和解锁

alter user 用户名 account unlock/lock;

6)常见的表和视图

Select * from cat;//查看该用户所有的表

Desc 表名;//查看该表的所有信息

select
* from user_tables;//该用户下所有的表,与cat对应,只是这个查出的表的信息比cat详细

7)创建表

Create table 表名(

字段1  类型  primary key //主键

,字段2 类型  not null,default 20  //非空

,字段3 类型 unique//唯一索引

,字段4 类型
check(gender in (‘男’,’女’))

,字段5 类型
references 主表名(主表中的字段)

[on
delete cascade|set null   | deferrable
initially deffered]

//级联删除、级联设空、级联更新

在所有字段后边,一起写

Create
table 表名(

Constraint
约束名 primary key (字段名)

Constraint
约束名 foreign key 本表的外键字段名 references 主表(主表字段名)

创建表后,添加约束

Alter table 表名

Add
primary key (主键字段名)

Modify
现有字段名 not null

Add
constraint 约束名  check(约束条件)

Add
unique(字段名称)

Add
constraint 外键名称 foreign key (本表的外键名称) references 主表(主表的逐渐名称)

8)修改表

a)  
修改表名 rename 旧名 to 新名

b)  
删除表   delete from 表名  / truncate table 表名   删除表中的数据

Drop table 表名 删除表

c)  
修改表

Alter table 表名

Add 字段名   字段类型 [约束]

Modify 字段名  字段类型

Drop column 字段名   --删除字段

Drop constraint 约束名  -- 删除约束

9)查询

模糊查询 ‘%’(多个)’_’(一个)

10)函数

a)Add_months(日期,要加的月份)  sysdate//当前的时间

select add_months(sysdate,10) as a from dual;

A

-----------

2014-7-9
11

b)Months_between(日期1,日期2)  (日期1-日期2)的月份

Select months_between(to_date('2013/9/6','yyyy/mm/dd'), to_date('2013/5/6','yyyy/mm/dd')) as b from dual

B

----------

4

c)last_day(日期) 该月份的最后一天

d)next_day(date,week)

select next_day(to_date('2013/5/6','yyyy/mm/dd'),'星期五') as b from dual

B

-----------

2013-5-10

e)连接字符串

concat(字符a,字符b)

f)求子串

substr(待处理的字符串,起始位置(从1开始),截取的长度)

h)定位函数

instr(待处理的字符串,需要查找的字符串,开始查找的起始位置,第几次查找到)

返回位置要查找的字符串的位置

i)       修改大小写

Lower(字符串) 小写   upper(字符串) 大写

j) 首字符大写

initacap(字符串)

k)替换

replace(待处理的字符串,要替换的,替换为)

select
replace('afafdsa','a','c') from dual;--将a替换为c

l)长度

length(字符串)

select
length('afafdsa') from dual;

m)数字

round(数字,精度)

select
round (5.3157,2) as b from dual;

trunc(数字)  取整,不进行四舍五入

ceil(3.1) 
-- 4

floor(3.9) –3

n)混合函数

nvl(e1,e2) 
如果e1为空,则取e2

coalesce(e1,e2,e3,…en)  如果e1为空,则取e2,如果e2为空,则取e3…

11)序列

a)创建序列

Create sequence <序列名>

Increment 
by n

Start with n

b)删除序列

drop sequence 序列名

c)修改序列 alter sequence 序列名

d) 使用序列的值

序列名.nextval—该序列下一个值

序列名.currval –该序列的当时的值

12)视图

a)  创建视图

Create or replace view 视图名

As

Select
语句

b)  使用视图

Select * from 视图名

c)  特殊

没有使用连接 集合 组函数

select 语句中没有聚合 group by   distinct(不重复)

13)同义词

Create or replace public synonym 用户名.同义词名 for 用户名.表或视图

Eg:

create or replace synonym scott.k for scott.m

14)索引

Create index 索引名称 on 表名(字段名称)

15)存储过程

procedure-存储过程

封装名字的PL块

create or replace procedure 存储过程名称 (参数列表)

as

去除declare关键字的pl/sql块;

end;

1)无参存储过程

create or replace procedure mypro1

as

cursor mycursor is

select * from emp where deptno =
30;

myrow emp%rowtype;

begin

for myrow in mycursor

loop

dbms_output.put_line(myrow.ename);

end loop;

end;

执行

exec 存储过程名称

pl/SQL中执行

begin

mypro1;

end;

2)有参存储过程(输入类型-默认 in)

create or replace procedure
mypro2(myempno in emp.empno%type)

as

myrow emp%rowtype;

begin

select * into myrow

from emp

where empno = myempno;

dbms_output.put_line(myrow.ename);

end;

执行:exec
mypro2(7788)

3)有参存储过程(输出类型-out)

create or replace procedure
mypro3(myempsal out emp.sal%type)

as

--       myrow emp%rowtype;

begin

select sal into myempsal

from emp

where empno = 7788;

end;

执行:pl/sql块的形式

declare

ms emp.sal%type;

begin

mypro3(ms);

dbms_output.put_line(ms);

end;

16)函数

function-函数

语法:

create or replace function 函数名称

return 类型

as

局部变量声明

begin

。。。。。

return 返回函数值

end;

create or replace function myfunc

(num1 number, num2 number)

return number

as

sum1 number := 0;

begin

sum1 := num1 + num2;

return sum1;

end;

执行:

select myfunc(10, 20) from dual;

17)触发器

触发器-tigger

*满足、实现:用户自定义数据完整性

1)创建日志表:

create table userlog

(

empname varchar2(10)

, operateDate date

)

2)完成触发器:

create or replace trigger mytrigger

after|before  insert|update|delete on 表名

for each row

begin

....

end;

+++++

create or replace trigger mytrigger

after 
delete on emp

for each row

begin

insert into userlog values(:old.ename,
sysdate);

end;

==================

3)执行:满足条件,自动执行

3.数据库的概念

sql语句的分类

DDL:数据库定义语言

Create/alter/drop/truncate(都不存入日志文件)

DML:数据修改语言

CIUD:select /insert/update/delete ==将计入日志

DCL:控制语言

Revoke/grant

DTL:事务语言

Commit/rollback/savapoint

Truncate 和 delete 的区别

1、TRUNCATE速度快。

2、TRUNCATE是一个DDL语言,向其他所有的DDL语言一样,他将被隐式提交,不能对TRUNCATE使用ROLLBACK命令。

4、TRUNCATE不能触发任何DELETE触发器。

5、不能授予任何人清空他人的表的权限。

6、当表被清空后表和表的索引讲重新设置成初始大小,而delete则不能。

7、不能清空父表。 TRUNCATE TABLE
(schema)table_name DROP(REUSE) STORAGE 在默认是 DROP
STORAGE 当使用DROP STORAGE时将缩短表和表索引,将表收缩到最小范围,并重新设置NEXT参数。REUSE STORAGE不会缩短表或者调整NEXT参数在特殊情况下使用 REUSE ST

DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的的删除操作作为事务记录在日志中保存以便进行进行回滚操作。

TRUNCATE
TABLE 则一次性地从表中删除所有的数据页并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。

*********************************

4. pl/sql语言

1)基本语句

Declare

变量名  变量类型

Begin

执行语句体(多句);

Exception

异常处理代码

End

Eg:

declare

empid emp.empno%type;

begin

empid
:= 15;

dbms_output.put_line(empid);

end;

输入:

declare

empid emp.empno%type;

begin

empid := &雇员号;--弹出输入框,输入框的给的提示

dbms_output.put_line(empid);

end;

2)循环

for:

for 循环变量 in 起始数值..终止数值

loop

具体语句

end loop;

eg:

begin

--外重循环1-9

for i in 1 .. 9

loop

--内重循环 1- i

for j in 1 .. i

loop

--内重循环,首先显示一行的信息

dbms_output.put( i || '*' || j || '='
|| (i*j) || '   ');

end loop;

--完成换行

dbms_output.put_line(' ');

end loop;

end;

while:

while 条件

loop

。。。循环语句

end loop;

eg:

declare

--定义循环变量

i number(2);

begin

--定义循环变量的初始值

i := 1;

--给出终止条件

while i <= 10

loop

dbms_output.put_line(i);

--循环变量自增

i := i + 1;

end loop;

end;

loop:

loop

exit when 条件;

end loop;

eg:

declare

--定义循环变量

i number(2);

begin

--定义循环变量的初始值

i := 1;

loop

--给出终止条件

exit when i > 10;

dbms_output.put_line(i);

--循环变量自增

i := i + 1;

end loop;

end;

3)选择

if 条件 then

.....;

[

elsif 条件 then

。。。。;

]

else

....;

end if;

例子:

输入用户名(zhangsan)、密码(zhangsan),判断登陆。

declare

--定义变量,用来保存用户名和密码

username varchar2(10);

password varchar2(10);

--定义一个用来存储用户名的变量,从数据表中获取

empname varchar(10);

begin

--输入用户名和密码

username := '&用户名';

password := '&密码';

--查出指定的用户名,并放入变量中

select ename into empname from emp where empno=7788;

--判断用户名和密码是否等于指定的数据

if username = empname and password = 'zhangsan' then

dbms_output.put_line('ok');

else

dbms_output.put_line('error');

end if;

end;

4)异常:使用when .. then 处理异常  ===  catch  
--- others

1)处理Oracle已知的异常

exception

when
异常种类(大写!) then

。。。。。

***异常种类:others表示所有的异常-顶级异常

2)自定义异常

raise   === throw 
抛给Oracle系统

raise_application_error  == throw 
抛给调用的语言程序

raise:

declare

--定义异常变量

异常变量   exception;

begin

if
条件 then

raise
异常变量;

.....

end
if;

exception

when
异常变量 then

。。。。;

例子:

输入年龄,20-60,输入错误,抛出异常,并提示

***输入:

age  := 
&年龄

***判断:

if age < 20 or age > 60 then

raise ...

end if;

***异常处理:

exception

when  异常变量

declare

--定义年龄变量

age
number(2);

--定义异常变量

myexp exception;

begin

--完成年龄输入

age
:= &年龄;

--判断是否抛出异常

if
age < 20 or age > 60 then

--异常的抛出  --- 给Oracle系统用  给when用

raise myexp;

--raise_application_error(错误号, '错误消息') ;   -- 给语言处理程序使用

end
if;

--如果有异常抛出,后续语句不执行

dbms_output.put_line(age);

--异常处理

exception

--开始匹配异常  -- 可以配准确异常,也可以用others匹配全部的异常

when myexp then

dbms_output.put_line('age is in 20--30....');

end;

5)游标

游标:  结果集, 多行数据集合

定义、存储、处理多行数据组成的结果集。

分类:

隐式、显示《定义一个游标变量的名称,存游标数据》

显示游标:

使用显示游标的步骤:

1)定义、创建一个游标变量,定义游标的时候放入数据

declare

cursor 游标名称 is SQL 查询语句;

例子:

cursor mycur is
select * from emp;

2)打开游标:

begin

open 游标名称;

举例:

open mycur;

3)对游标数据进行处理  --- 遍历 
loop|for

LOOP:

loop

fetch 游标名称 into 行变量

--对该行变量进行处理

exit
when  游标名称%notfound;   --- 放在循环的首句

end loop;

**FOR:

for 行级变量 in  游标名称

loop

--对行级变量处理

end loop;

4)关闭游标

close 游标名称。

例子:输入部分号,显示该部门的所有员工信息。使用游标实现。

动态游标:一个游标可以获取不同类型的数据集合

在代码动态通过select语句创建并赋予游标。**游标中数据集类型不确定,可以多次赋予。。

===declare

1)定义引用游标类型

type mycurtype is ref cursor;

2)定义该类型的游标变量

mycur mycurtype;

===begin

3)打开游标同时赋予游标的数据

open mycur for
select * from emp  -- = 变量-输入获取;

4)遍历游标

。。。

5)关闭游标

带参数的游标--静态游标

定义游标的时候,使用格式:

cursor
mycur(mydeptno emp.deptno%type)

is select *
from emp where deptno = mydeptno

用游标时:

mycur(&部门编号)

********************** 动态游标

declare

type mycurtype is ref cursor;

mycur mycurtype;

erow emp%rowtype;

begin

open mycur for select * from emp;

loop

fetch mycur into erow;

exit when mycur%notfound;

dbms_output.put_line(erow.ename);

end loop;

close mycur;

end;

*******************************

***********************带参数游标

declare

cursor mycur(mydeptno emp.deptno%type)

is select * from emp where deptno =
mydeptno;

myrow emp%rowtype;

begin

for myrow in mycur(&部门编号)

loop

dbms_output.put_line(myrow.ename);

end loop;

end;

包的例子:

创建一个程序包,名为scottemp,并在其中加入四个函数或存储过程,具体要求如下

  1. 通过empid得到用户名,以存储过程的方式实现
  2. 通过empid修改薪水,以函数的方式实现,返回修改后的薪水

create or replace package scottemp AUTHID CURRENT_USER is

FUNCTION
modifies(empid emp.empno%type,esal emp.sal%type)

RETURN emp.sal%type

is

begin

update emp set emp.sal =esal  where emp.empno = empid;

return esal;

end
modifies;

PROCEDURE getname(ename2 out emp.ename%type,empid in emp.empno%type)

as

begin

select
emp.ename into ename2 from emp where emp.empno = empid;

end;

end;

5.Jdbc调用存储过程以及函数

package com.icss.dao;

import java.sql.SQLException;

import java.sql.Types;

public class ChangeDao extends BaseDao {

public boolean modifies(int empid,double esal){

try {

openDB();

String sql = "{?=call
scottemp.modifies(?,?)}";

cstmt = conn.prepareCall(sql);

cstmt.setInt(2, empid);

cstmt.setDouble(3, esal);

cstmt.registerOutParameter(1, Types.DOUBLE);

rsi = cstmt.execute();

System.out.println(cstmt.getDouble(1));

} catch (SQLException e) {

// TODO Auto-generated
catch block

e.printStackTrace();

}finally{

closeDB();

}

return rsi;

}

public String getname(int empid){

String ename = "";

try {

openDB();

String sql = "{call
scottemp.getname(?,?)}";

//第一个问号是out类型的数据

cstmt = conn.prepareCall(sql);

cstmt.registerOutParameter(1, Types.NVARCHAR);

System.out.println(Types.NVARCHAR);

cstmt.setInt(2, empid);

cstmt.execute();

ename = cstmt.getNString(1);

} catch (SQLException e) {

// TODO Auto-generated
catch block

e.printStackTrace();

}

closeDB();

return ename;

}

}

Oracle知识整理的更多相关文章

  1. 【面试虐菜】—— Oracle知识整理《收获,不止Oracle》

    普通堆表不足之处:     表更新有日志开销     表删除有瑕疵     表记录太大检索较慢     索引回表读开销很大     有序插入难有序读出   DELETE产生的undo最多,redo也最 ...

  2. 【面试虐菜】—— Oracle知识整理《DBA的思想天空》

    Inventory Oracle安装工具OUI用来管理Oracle安装目录的   Oracle的参数文件,启动后按照下面的顺序读取参数文件,如果读取失败,启动数据库 失败: 1  $ORACLE_HO ...

  3. ORACLE FLASHBACK DATABASE 知识整理

    1.知识储备 1)    只有SYSDBA有权执行,闪回前一定要记录当前SCN 2)    需要停机,并要求处于ARCHIVELOG模式中 3)    闪回日志不能被复用和归档,是自动管理的.RVWR ...

  4. ORACLE DATABASE 10G FALSHBACK 知识整理

    1.知识储备 1)    当出现介质损坏时(如数据文件丢失),任何闪回方法都毫无用处,只能执行标准的备份.还原与恢复. 2.SCN记录方法 SQL>variable x_scn number; ...

  5. 数据库知识整理<一>

    关系型数据库知识整理: 一,关系型数据库管理系统简介: 1.1使用数据库的原因: 降低存储数据的冗余度 提高数据的一致性 可以建立数据库所遵循的标准 储存数据可以共享 便于维护数据的完整性 能够实现数 ...

  6. 【OGG】OGG基础知识整理

    [OGG]OGG基础知识整理 一.GoldenGate介绍 GoldenGate软件是一种基于日志的结构化数据复制软件.GoldenGate 能够实现大量交易数据的实时捕捉.变换和投递,实现源数据库与 ...

  7. js事件(Event)知识整理

    事件(Event)知识整理,本文由网上资料整理而来,需要的朋友可以参考下   鼠标事件 鼠标移动到目标元素上的那一刻,首先触发mouseover 之后如果光标继续在元素上移动,则不断触发mousemo ...

  8. Kali Linux渗透基础知识整理(四):维持访问

    Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...

  9. Kali Linux渗透基础知识整理(二)漏洞扫描

    Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网 ...

随机推荐

  1. Simulating a Fetch robot in Gazebo

    Installation Before installing the simulation environment, make sure your desktop is setup with a st ...

  2. BSGS模版 a^x=b ( mod c)

    kuangbin的BSGS: c为素数: #define MOD 76543 int hs[MOD],head[MOD],next[MOD],id[MOD],top; void insert(int ...

  3. JS学习笔记(五) HTML DOM

    参考资料: 1. http://www.w3school.com.cn/js/js_htmldom.asp 2. http://www.runoob.com/htmldom/htmldom-tutor ...

  4. new,delete和malloc,free以及allocator<T>

    一)new和delete,自己觉得一句话就是:最好同一作用域内,必须成对使用 先给出自己的认识: malloc,free,申请和释放一段heap堆中的内存. new:申请heap内存并在申请的内存中放 ...

  5. Thinking in Java 笔记初衷

    当读到第十章的时候,发现之前读过的内容很难准确的记忆起来,这样给后续的阅读带来了一定的困惑,而之前也没有做适当的可读性的复习笔记,所以发现重新找后续阅读需要的知识点时,是有一定的困难的. 同时在知乎今 ...

  6. Docker-创建支持ssh服务的镜像

    这里测试tomcat镜像安装ssh服务 1.启动镜像 [root@wls12c docker]$ docker run -d tomcat:centos 844bdde121a03174f3abd22 ...

  7. (三)主控板生级uboot与内核

    一.升级uboot 把我的电脑增加一个192.168.1.3的ip,方便升级boot. 1.连接串口,连接网口到GE1; 2.登陆电脑后到D:\MTG3000MAIN\first目录打开tftp32 ...

  8. (二)再议MII、RMII、GMII接口

    概述:         MII (Media Independent Interface(介质无关接口)或称为媒体独立接口,它是IEEE-802.3定义的以太网行业标准.它包括一个数据接口和一个MAC ...

  9. android实现系统电话通话过程中自动感应黑屏

    package com.developmenttools.customui.activity; import java.util.HashSet;import java.util.Set; impor ...

  10. uva 10692 Huge Mods 超大数取模

    vjudge上题目链接:Huge Mods 附上截图: 题意不难理解,因为指数的范围太大,所以我就想是不是需要用求幂大法: AB % C = AB % phi(C) + phi(C) % C ( B ...