iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >【数据库_06】Oracle
  • 322
分享到

【数据库_06】Oracle

【数据库_06】Oracle 2017-03-10 16:03:40 322人浏览 才女
摘要

二、数据库操作 1. 创建表空间 CREATE TABLESPACE "FIRSTDEMO" DATAFILE  "C:/oracle/firstdemo"  SIZE 100M  AUTOEXTEND ON  NEXT 10M 2. 创

【数据库_06】Oracle

二、数据库操作

1. 创建表空间

CREATE TABLESPACE "FIRSTDEMO"
DATAFILE  "C:/oracle/firstdemo" 
SIZE 100M 
AUTOEXTEND ON 
NEXT 10M

2. 创建用户

CREATE USER "scott" 
IDENTIFIED BY "tiger" 
DEFAULT TABLESPACE "EXAMPLE"

# 授权
GRANT dba TO "scott"    --- 开发人员一般为 resource

3. 建表

CREATE TABLE FIRST (
    ID NUMBER(6,2) ,
    NAME VARCHAR2(10)
)  
oralce 的数据类型
- number
  er(n):一个长度为n的整数
              number(n,m):整数部分为  n - m, 小数部分为 m
- varchar、varchar2
  varchar2长度可变
- date
- clob
  据类型,4G
- blob
  据,4G

4. CRUD

insert
delete
update
select

5. 序列

- oracle 无法想 Mysql 一样字节实现自增,需要使用序列
- create sequence s_xxxx;   -- 一般前缀为 s_ 或者 seq_

- currval  : 获取当前值
- nextval : 获取下一个值

- 自增
- insert into emp values(s_emp.nextval,"name","money");

- 虚拟表
- oracle 中一些方法不写 from dual 将会报错,故引入虚拟表 dual
  elect s_xxx.currval from dual;

# 补充 
- 获取系统时间
- select sysdate from dual;

三、单行函数

1. 字符函数

① 转小写
    lower("XXX")
② 转大写
    upper("xxx")

2. 数值函数

* round(xxx.xxx) : 四舍五入,取整
        round(xxx.xxx,n) : 四舍五入,取指定位数

3. 转换函数

- to_char() : 转为字符  to_char(date,"yyyy-MM-dd HH:mm:ss") 指定格式将日期转换为字符串
- to_date(): 转为日期

4. 通用函数

- nvl(m,n) 当 m 为 null 时,m 取 n
- 判断    
select ename,
    case
           when i = "Y" then "及格"
    case
        "不及格"
    end
from emp;

//Oracle特有
select ename,
decode( 
    i,
    "Y"  "及格",
    "不及格"
) from emp
        
- 多行函数 --- 聚合函数

5. 分页函数

select b.* from (
    select rownum rn,a.* from (
           select * from emp order by sal desc
    ) a
    where rownum < 10
) b where rn > 5

select 查询后产生 roenum;且不能跳,所以 rownum 只支持小于不支持大于(使用别名)

四、视图

1.概述

* 视图封装了一组复杂的查询语句。

2. 创建

create [or replace] view viewdemo
as
select * from emp where sal > 1000
with read only

# 视图可以进行修改,其实质时修改原始数据,一般设置为只读(with read only)

五、索引

就是在表的列上构建一个二叉树,提高查找效率但是会降低增删改效率。

1.单列索引

- create index index_ename on emp(ename)
- 单列索引触发条件为,必须是索引列中的原始值  
- 如: select * from emp where ename = "SCOTT";

2. 复合索引

- create index index_ename_deptno on emp(ename,deptno)
- 符合索引第一列为优先检索条件,要想触发复合索引必须包含符合索引原始值
    * 如:select * from emp where ename = "SCOTT";  -- 触发单列索引
          select * from emp where ename = "SCOTT" and job = ""abc;  -- 触发复合索引
          select * from emp where ename = "SCOTT" or job = "abc";  -- 不触发索引

六、PL/sql

1. 语法

declare
    //声明
begin
    //执行
end;


# 例如
declare
    i number(3) := 10;
begin
    dbms_output.put_line(i);
end;

2. 常量与变量

① 常量定义
    name varchar2(3) := "张无忌";
    id number(3) := 11;
② 变量定义
    name varchar2(3);
    id number(3);
③ 引用变量
    name emp.ename%type;  // name 的类型与 emp 表的 ename 字段类型一致
④ 记录型变量
    erow emp%rowtype;    //emp 表的一行数据

3. if

# 示例【从控制台输入分数,打印等级】
declare
    i number(3) := &i;
begin
    if i > 85 then "及格";
           elsif i > 60 then "优秀";
    else
        "不及格";
    end if;
end;

4. 循环

# 示例【第一种】
declare
    i number(3) := 1;
begin
    while i <= 10 loop
        dbms_output.put_line(i);
        i := i + 1;
    end loop;
end;
    

# 示例【第二种】
declare
    i number(3) := 1;
begin
    loop
        exit when i > 10;
            dbms_output.put_line(i);
        i := i + 1;
    end loop;
end;
    

# 示例【第三种】
declare
    i number(3) := 1;
begin
    for i in 1 .. 10 loop
        dbms_output.put_line(i);
    end loop;
end;

5. 游标

- 游标类似于集合,用于存储返回的多条数据
- 示例
declare
    cursor c1 is
        select * from emp;
    c_emp emp%rowtype;
begin
    open c1;        //打开游标
        loop
            fetch c1 into c_emp;     //取出一行数据
            exit when c1%notfound;    //游标结束条件
            dbms_output.put_line(c_emp.ename || " 工资 " || c_emp.sal);
        end loop;
    close c1;        //关闭游标
end;

七、存储过程与存储函数

1. 存储过程

将一组完成特定功能的SQL语句集。经过编译后存储到数据库中。

//创建一个打印 Hello World 的存储过程
create or replace procedure p1 is
    string varchar2(20) := "Hello World";
begin
    dbms_output.put_line(string);
end;    

//有参数的存储过程
create or replace procedure p1(str1 varchar2) is
    str2 varchar2(20) := "传入的数据为";
begin
    dbms_output.put_line(str2 || str1);
end;

//有返回的存储过程
create or replace procedure p1(str1 varchar2,s out varchar2) is
    str2 varchar2(20) := "传入的数据为";
begin
    s := str1 || str2;
end;

2. 存储函数

//创建一个存储函数
create or replace function fun1(str varchar2) 
return varchar2 
as  // is 也可以
        s varchar2(20) := "Hello";
begin
    dbms_output.put_line(s);
    return str;
end;

3. 存储过程与存储函数的区别

- 存储函数有一个返回值而存储过程没有返回值
- 二者都可以通过 out 指定多个输出参数

八、触发器

1. 语法

//语句级触发器 不论这条语句影响多少行,在触发后执行一次
//执行 emp 表 插入操作时触发
create tirgger first 
before     // 执行时机 before 之前   after 之后
insert on     //触发的操作
emp            //哪张表
declare

begin
  dbms_output.put_line("将要执行插入操作");
end;

//行级触发器  语句作用的每一条记录都会被触发,使用 old 和 new 伪记录变量
//更新 emp 表 sal 字段时触发
create or replace trigger tt 
before update of sal on emp
for each row
begin
    if :old.sal > :new.sal then        -- 涨薪前 大于 涨薪后
        raise_application_error(-20002,"涨薪幅度不能为负");
    end if;
end;

2. 伪记录变量

:old   --->  代表旧数据
:new   --->  代表新数据

九、java 使用 oracle

1. 普通操作

//注册驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//获取 connection
Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/orcl", "scott", "tiger");
//定义 sql
String sql = "select * from emp where empno = ?";
//预编译sql
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//赋值
preparedStatement.setObject(1,7788);
//执行sql
ResultSet resultSet = preparedStatement.executeQuery();

2. 使用存储过程

//注册驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//获取 connection
Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/orcl", "scott", "tiger");
//定义 sql
String sql = "{call p1(?,?)}";
//编译
CallableStatement callableStatement = connection.prepareCall(sql);
//赋值,
callableStatement.setObject(1,7788);
//输出参数 out
callableStatement.reGISterOutParameter(2, OracleTypes.NUMBER);
//执行
callableStatement.execute();
//获取输出参数的值
callableStatement.getInt(2);

3. 使用存储方法

//注册驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//获取 connection
Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/orcl", "scott", "tiger");
//定义 sql
String sql = ""{? = call f1(?)}"";
//编译
CallableStatement callableStatement = connection.prepareCall(sql);
//输出参数 out
callableStatement.registerOutParameter(1, OracleTypes.NUMBER);
//赋值,
callableStatement.setObject(2,7788);
//执行
callableStatement.execute();
//获取输出参数的值
callableStatement.getInt(1);

4. jar包坐标


    
        com.oracle
        ojdbc14
        10.2.0.4.0
    

您可能感兴趣的文档:

--结束END--

本文标题: 【数据库_06】Oracle

本文链接: https://www.lsjlt.com/news/4401.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • oracle数据库
    用户(user)是定义在数据库中的一个名称,访问数据库时,要提供合适的用户名和口令。模式(Schema)是用户所拥有对象的集合。用户与模式是一一对应的关系,并且二者名称相同。在Oracle 数据库中建立用户...
    99+
    2024-04-02
  • oracle数据库如何备份数据库
    oracle 提供多种备份方法来保护数据库完整性,包括全备份、增量备份、差异备份和归档日志备份。最佳备份类型取决于数据库大小、恢复目标和可用资源。rman(恢复管理器)是 oracle ...
    99+
    2024-04-19
    oracle 数据丢失
  • oracle数据库与sql数据库的区别
    oracle 数据库和 sql 数据库的主要区别如下:所有权:oracle 数据库归 oracle 公司所有,而 sql 数据库归 microsoft 公司所有。编程语言:oracle ...
    99+
    2024-05-10
    oracle linux docker
  • oracle数据库怎么建库
    在Oracle数据库中,可以使用`CREATE DATABASE`语句来创建数据库。首先,确保你有适当的权限来创建数据库。然后,打开...
    99+
    2023-08-29
    Oracle
  • oracle数据库数据存在哪
    oracle 数据库数据存储位置:数据文件:存储实际数据块。重做日志文件:记录对数据文件的更改,用于崩溃后恢复数据。控制文件:存储数据库结构和数据文件位置信息。临时表格空间:存储临时数据...
    99+
    2024-04-19
    oracle
  • ORACLE数据库备份
    ORACLE数据库备份 三种模式:表备份,用户备份,完全备份。 两种方式: DOS命令执行: 表备份: 导出:exp scott/tiger@orcle tables=emp,dep...
    99+
    2024-04-02
  • oracle数据库在哪
    oracle 数据库是一种可在各种平台上部署的关系型数据库管理系统:本地部署:物理服务器或虚拟机云部署:oci、aws、azure、gcp Oracle 数据库在哪里? Oracle ...
    99+
    2024-04-19
    oracle 数据丢失
  • Java38: 数据库二(Oracle)
      group by 分组--每个工作的人数 select count(job) from emp group by ...
    99+
    2024-04-02
  • oracle数据库是什么类型的数据库
    oracle 数据库是一种关系型数据库管理系统 (rdbms),以其可靠性、可扩展性、高性能和安全性而闻名。它广泛用于商业和政府组织的事务处理、数据仓库、erp 和 crm 等应用。 ...
    99+
    2024-04-02
  • oracle数据库怎么导入数据
    在Oracle数据库中,可以使用SQL*Loader工具来导入数据。以下是一些基本步骤: 创建一个控制文件,用于指定要导入的数据文...
    99+
    2024-04-09
    oracle
  • oracle如何备份数据库数据
    oracle 数据库提供了三种备份方法:完整的数据库备份:复制整个数据库文件和日志文件。增量备份:仅备份自上次备份后更改的数据块。归档日志备份:记录数据库所有更改,用于恢复。 Orac...
    99+
    2024-04-19
    oracle
  • oracle数据库和mysql数据库怎么选择
    oracle 和 mysql 数据库的选择取决于应用程序需求。oracle 数据库适合关键任务应用程序,需要企业级功能、高性能和强安全性的关键任务应用程序;mysql 数据库适合预算有限...
    99+
    2024-05-10
    mysql oracle 敏感数据
  • oracle数据库能存多少数据
    oracle数据库的存储容量取决于硬件限制、磁盘空间、内存、数据块大小、表空间、索引、数据类型、压缩等因素。一般来说,大型企业数据库可以存储数tb甚至数pb字节的数据,而小型企业或个人数...
    99+
    2024-05-10
    oracle 压缩技术
  • oracle数据库怎么查询数据
    oracle 数据库中使用 sql 查询数据的方法:使用 "sqlplus" 命令连接到数据库;执行 "select" 语句,指定要提取的列和表;可选:使用 "order by...
    99+
    2024-04-08
    oracle 排列
  • oracle怎么删除数据库数据
    要删除Oracle数据库中的数据,您可以使用DELETE语句。以下是一个简单的例子: DELETE FROM table_n...
    99+
    2024-04-09
    Oracle 数据库
  • oracle数据库怎么备份数据
    oracle数据库提供多种备份数据的方法:rman备份:使用recovery manager (rman)进行完整备份和恢复;exp/imp导出和导入:导出和导入数据,适用于小到中型数据...
    99+
    2024-04-08
    oracle
  • oracle数据库如何备份数据
    在Oracle数据库中,有多种备份数据的方法可供选择,包括: 使用Oracle Data Pump工具进行逻辑备份:Oracle...
    99+
    2024-04-13
    oracle
  • ORACLE数据库 开窗函数
    开窗函数 2.1开窗函数的定义及语法 开窗函数(又名:分析函数,窗口函数,OLAP函数) 聚合函数:将数据按照一定的规则分组,统一分析各组的某项情况,每个分组返回一行结果 开窗函数:将数据按照一定的规则分组,统一分析各组的某项情况,每行数据...
    99+
    2023-09-02
    数据库 oracle python
  • pg数据库和oracle数据库有什么区别
    数据模型:PostgreSQL 使用了一种基于 SQL 标准的关系型数据模型,而 Oracle 数据库也是基于 SQL 标准的关...
    99+
    2024-04-19
    pg数据库 oracle
  • Python 连接 Oracle数据库
    1.环境设置[root@oracle ~]# cat /etc/redhat-release CentOS release 6.9 (Final)[root@oracle ~]# python -VPython 2.6.6版本:Oracle...
    99+
    2023-01-31
    数据库 Python Oracle
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作