数据库相关知识

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

数据库相关知识一.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日
    浏览(31)
  • 关于两个不同数据库的两张表建立数据库链接,关联查询数据

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2024年01月25日
    浏览(35)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包