数据库相关知识

这篇具有很好参考价值的文章主要介绍了数据库相关知识。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据库相关知识一.1 数据库

 

与Sybase不同,一个用户就对应于一个数据库。

 

create user CBMAIN

 

identified by "sunline"   

 

default tablespace CBMAIN_DATA  -- 表空间

 

temporary tablespace CBMAIN_TEMP; -- 临时表空间

 

一.2 表空间

表空间由一个或多个物理文件组成,一个表空间只能用于一个数据库。

 

create temporary tablespace CBMAIN_TEMP datafile

 

'D:\Oradata\CBMAIN_TEMP01.dbf' size 200M,

 

'D:\Oradata\CBMAIN_TEMP02.dbf' size 200M

 

一.3 登录身份

与Sybase不同,用户登录时需指定身份登录。 分为Normal、sysdba、sysoper

 

三种不同身份。各自对数据库拥有的权限不同,sysdba最高,normal 最低。如:

 

c:\> sqlpuls /nolog

 

sql>connect sys as sysdba

 

一.4 普通数据类型

Varchar2\Varchar:在建表语句中系统保留使用varchar,但建立的表结构实际为varchar2。PL\SQL中只允许使用varchar2。

 

Char:在建表语句中,字段内容长度固定可使用char,如状态字段。其它情况下不建议使用Char来建表。

 

Boolean:不能用于建表,只用于PL\SQL;

 

Date\Timestamp:日期时间型,可用于建表,也可用于PL\SQL语句编写。但在Ltts5.0表结构设计中不对其做广泛应用,日期字段用char(8)来存储。

 

Sys_refcursor:游标数据类型,采用此种类型定义的游标,在定义时无须编写SELECT子句,打开时采用Open Cur_var For Select c1,c2 from tab1的方式。

 

一.5 结构

类似于C中的结构体,常在包、过程、函数中定义。如:

 

TYPE t_Result IS RECORD(

 

      Instam NUMBER(18, 2) default 0.00,

 

      Intxst NUMBER(18, 2) default 0.00,

 

      Intxam NUMBER(18, 2) default 0.00,

 

      Sqltxt VARCHAR2(2000),

 

      Instrt NUMBER(11, 7)

 

      );

 

行类型(rowtype)是个特殊的结构体,select * into xxxx时即可into到行类型变量,也可into到要素雷同的结构体。

 

常用于返回结果(Oracle out 型的参数必须传入,便于扩展)。

 

一.6 包

包具有部分OO特征:封装性、多态性。

 

简单的理解为一个容器,可以将若干个过程或者函数组合成一个更大的单位。

 

包体编写过程体或函数体,包头申明过程说明或函数说明。只有在包头申明过的过程或函数才能被外部程序调用。

 

除过程和函数外,还可以申明包变量、常量、结构;其中包头定义可以被外部直接访问或修改(public)。包体部分定义的只能被包自身访问(priavte)。

 

包的生命周期:起始于此包的第一次调用,结束于当前session的断开。根据此特性,可用包头或包体的变量、常量、结构存储运算结果,甚至是系统级别的参数缓存。

 

不建议在包头申明变量;通常方法是在包体申明变量同时配以一组方法访问它。

 

通常在包头定义某个结构,用来在过程传递或返回一组信息。

 

常用系统包

UTL_FILE ----------处理外部文件

 

DBMS_OUTPUT ----调试PL/SQL,DEBUG

 

DBMS_SQL ----------执行动态SQL PL\SQL

 

dbms_job ------管理JOB

 

dbms_system -------跟踪用户,SESSION

 

dbms_transaction -------- 管理SQL事务

 

 

 

一.7 过程与函数

原则上,过程和包不允许独立编写,必须封装在包中。

 

与sybase不同, out 型的参数必须传入,不能缺省。

 

函数虽可定义out型变量,但不建议如此应用。当且仅当所实现只返回一个(含预估未来)基础数据类型(字符、数字、布尔、日期)的时候才将此功能申明为函数。其它情况下都申明为方法。

 

在包头有申明的过程在定义out型变量时,建议用一个结构体。目的是在未来扩展输出参数时,无须修改已修改的代码。

 

过程或函数定义基础类型参数时,varchar2, number 等即可。没必要使用用户自定义类型如:sys_type.u_acctno%type 或者kna_accs.acctno%type;

 

对于out 或in out 参数定义时 nocopy 关键字的意义:

 

不加nocopy传递的是复制(by value),否则传递的是地址(by reference)。

 

传递地址对大型结构或大数据时可以提高效率。

 

在出现异常时,不加nocopy的情况下,外层程序读到的仍然是原值。加nocopy的情况下,若有修改,外层程序读到的是修改之后的值。因此使用nocopy 时,需要确保在被调用过程中处理所有的异常。

 

一.8 事务

Sybase需要用Begin tran来控制是否需要手动commit或rollback; Oralce无此语句,但有一开关Set autocommit OFF/ON;将commit或rollback的权力交给用户。默认关闭,即由用户来控制事务的提交或回滚;也就没有事务积数器这一全局变量(@@transcount)。

 

DDL语句与事务

Alter … create …等都属于DDL语句。

 

由于Oracle执行DDL语句时会自动调用Commit,因此禁止在业务程序里使用DDL语句。

 

独立事务

PRAGMA AUTONOMOUS_TRANSACTION;

 

可在某个子过程或函数中单独申明一段事务,有关其涉及到的业务逻辑处理,由自身commit或rollback,不会影响到主程序已处理的事务。

 

注意:函数中若有事务语句,必须申明独立事务。即:若无特殊情况,涉及事务处理都不写成函数,都应写成过程。

 

相关应用:生成流水号、记录密码错误等。

 

一.9 异常

概念要点

Sybase由系统控制异常,Oracle则可主动捕捉异常。每当PL/SQL违背了ORACLE原则或超越了系统依赖的原则就会隐式的产生内部异常。

 

异常分为两类:分为系统异常和用户自定义异常。用户定义异常则需要显现的抛出。

 

抛出方式

 

异常类型

 

通过PL/SQL运行引擎

 

系统内部异常

 

使用RAISE语句

 

用户定义异常

 

调用RAISE_APPLICATION_ERROR存储过程

 

用户定义异常

 

异常处理是用来处理正常执行过程中未预料的事件。如果PL/SQL程序块一旦产生异常而又没有指出如何处理时,程序会自动终止。

 

系统内部异常分为:预定义的内部异常和未定义内部异常。未定义内部异常只能在Other部分捕捉。

 

常见预定义异常

 

sqlerrm

 

sqlcode

 

描述

 

no_data_found

 

ora-01403

 

+100

 

Select into无符合条件的记录

 

too_many_rows

 

ora-01422

 

-1422

 

Select into符合条件的记录有多条

 

dup_val_on_index

 

ora-00001

 

-1

 

违反唯一约束

 

value_error

 

ora-06502

 

-6502

 

发生算数、转换、截断或大小约束错误

 

storage_error

 

ora-06500

 

-6500

 

内存溢出

 

zero_divide

 

ora-01476

 

-1476

 

除数为零

 

case_not_found

 

ora-06592

 

-6530

 

无匹配when子句也无默认else子句

 

cursor_already_open

 

ora-06511

 

-6511

 

试图打开已经打开的游标

 

timeout_on_resource

 

ora-00051

 

-51

 

等待某一资源,超时

 

access_into_null

 

ora-06530

 

-6530

 

试图给未初始化对象的属性赋值

 

invalid_cursor

 

ora-01001

 

-1001

 

游标操作错误,如:关闭未打开

 

login_denied

 

ora-01017

 

-1017

 

登录时用户名或密码非法

 

program_error

 

ora-06501

 

-6501

 

PL/SQL内部错误

 

rowtype_mismatch

 

ora-06504

 

-6504

 

赋值变量与游标返回变量不兼容

 

self_is_null

 

ora-30625

 

-30625

 

 

 

sys_invalid_rowid

 

ora-01410

 

-1410

 

字符串转化成rowid失败

 

subscript_beyond_count

 

ora-06533

 

-6533

 

 

 

subscript_outside_limit

 

ora-06532

 

-6532

 

 

 

collection_is_null

 

ora-06531

 

-6531

 

 

 

invalid_number

 

ora-01722

 

-1722

 

字符串转化成数字失败

 

not_logged_on

 

ora-01012

 

-1012

 

未连接数据库前访问数据

 

 

 

异常传播机制:

当异常发生时,若本语句块未做异常处理,控制将转到或传播到外层语句块的异常处理部分。直到外层捕捉到异常,则运行捕捉异常后语句块;若外层块没有该异常的处理程序则传播到调用环境,并立即终止。文章来源地址https://www.toymoban.com/news/detail-432695.html

到了这里,关于数据库相关知识的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Spring Boot应用中如何动态指定数据库,实现不同用户不同数据库的场景

    当在 Spring Boot 应用程序中使用Spring Data JPA 进行数据库操作时,配置Schema名称是一种常见的做法。然而,在某些情况下,模式名称需要是动态的,可能会在应用程序运行时发生变化。比如:需要做数据隔离的SaaS应用。 所以,这篇博文将帮助您解决了在 Spring Boot 应用程序中如

    2024年04月26日
    浏览(15)
  • 关于两个不同数据库的两张表建立数据库链接,关联查询数据

    关于两个不同数据库的两张表建立数据库链接,关联查询数据

    数据库链接(database link)是用于跨不同数据库之间进行连接和数据传输的工具或方法。它允许在一个数据库中访问另一个数据库中的对象和数据。 --1.建立链接tjpt 上述示例中的  pt_user 、 pt_password  和  10.70.231.130/orcl 需要替换为实际的用户、密码和数据库信息。 创建链接后

    2024年02月10日
    浏览(12)
  • [大数据 Flink,Java实现不同数据库实时数据同步过程]

    目录 🌮前言: 🌮实现Mysql同步Es的过程包括以下步骤: 🌮配置Mysql数据库连接 🌮在Flink的配置文件中,添加Mysql数据库的连接信息。可以在flink-conf.yaml文件中添加如下配置: 🌮在Flink程序中,使用JDBCInputFormat来连接Mysql数据库,并定义查询语句,获取需要同步的数据。具体代

    2024年02月10日
    浏览(13)
  • Mysql不同数据库之间表结构同步

    Mysql不同数据库之间表结构同步

    开发环境的Mysql表结构做了修改,要同步到其他环境数据库中使用数据库管理工具JookDB的表结构同步功能就很方便。虽然Navicat也有这个功能但是有免费的当然是用免费的。 用JookDB添加数据库后在数据库节点上右键选择“同步结构”即可开始表结构同步。 1.选择结构同步的源库

    2024年02月05日
    浏览(13)
  • Spring Boot如何访问不同的数据库

            在Spring Boot应用中连接多个数据库或数据源可以使用多种方式,下面介绍两种常用的方法: 1、使用Spring Boot官方支持的多数据源配置         spring boot提供了官方支持的多数据源配置,可以简单地配置和管理多个数据源。         需要在application.properties文件中

    2024年02月13日
    浏览(20)
  • 数据库、数据仓库相关

    1. 数据库与数据仓库的区别 数据库 Database (Oracle, Mysql, PostgreSQL)主要用于事务处理。 数据仓库 Datawarehouse (Amazon Redshift, Hive)主要用于数据分析。 数据库和数据仓库是两种不同的数据存储方式,它们的设计目的和使用场景也有所不同。数据库通常用于存储和管理应用程序的事务

    2024年02月06日
    浏览(13)
  • SQlite3数据库相关相关命令

    SQlite3数据库相关相关命令

    1. 创建表格 2. 插入数据 3. 查看数据库记录 4. 删除信息 5. 更新数据 6. 增加一列 7. 删除一列 (sqlite3 不支持直接删除一列) 1. 打开数据库 2. 关闭数据库 3. 错误信息 4. 执行一条sql语句 5. 查询回调函数 6. 查询函数 小知识:如果结构体中定义的是一级指针,那么你要定义变量取

    2024年02月16日
    浏览(14)
  • MySQL数据库相关

    1、内联,左外联,右外联,全连接,交叉连接的区别 2、什么是视图?以及视图的使用场景有哪些? 视图是一种虚拟的表,具有和物理表相同的功能 只暴露部分字段给访问者,所以就建一个虚表,就是视图。 查询的数据来源于不同的表,而查询者希望以统一的方式查询,这

    2024年02月09日
    浏览(9)
  • 数据库相关面试题

    数据库相关面试题

    巩固基础,砥砺前行 。 只有不断重复,才能做到超越自己。 能坚持把简单的事情做到极致,也是不容易的。 mysql怎么优化 : MySQL的优化可以从以下几个方面入手: 数据库设计优化:合理设计表结构,选择合适的数据类型,规范化表结构,避免冗余数据等。 索引优化:为经常

    2024年02月12日
    浏览(10)
  • 数据库SQL查询相关练习

    1、显示所有职工的基本信息。 2、查询所有职工所属部门的部门号,不显示重复的部门号。 3、求出所有职工的人数。 4、列出最高工和最低工资。 5、列出职工的平均工资和总工资。 6、创建一个只有职工号、姓名和参加工作的新表,名为工作日期表。 8、列出所有姓刘的职工

    2024年01月25日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包