数据库相关知识

news2024/12/23 5:52:03

6bfdc291038d443c96fc4d47a6410d17.jpg一.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

 

未连接数据库前访问数据

 

 

 

异常传播机制:

当异常发生时,若本语句块未做异常处理,控制将转到或传播到外层语句块的异常处理部分。直到外层捕捉到异常,则运行捕捉异常后语句块;若外层块没有该异常的处理程序则传播到调用环境,并立即终止。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/483789.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

js使用splice方法删除数组元素可能导致的问题

splice() 方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。 JavaScript 遍历数组并通过 splice 方法删除该数组符合某些条件的元素将会导致哪些问题? 导致的问题 当使用 splice 方法从 …

QT 中的多线程之继承 Thread

文章目录 1. 概述2. UML 类的关系图3. 代码:4. 运行结果及说明5. 结语 1. 概述 任何继承于QThread的线程都是通过继承 QThread 的run函数来实现多线程的,因此,必须重写QThread的run函数,把复杂逻辑写在QThread的run函数中。然后在…

effective c++ item40-44

item40:谨慎的使用多重继承 多重继承带来的符号的歧义性 #include <iostream> #include <vector> using namespace std; class A { public:void f() { cout << "A" << endl; } }; class B { private:void f(); }; class C : public A, publ…

5.5.1哈夫曼树

知识总览&#xff1a; 概念&#xff1a; 结点的权&#xff1a;有某种现实含义的数值&#xff08;如&#xff1a;表示结点的重要性&#xff09; 结点的带权路径长度&#xff1a;从树的根到该结点的路径长度&#xff08;经过的边数&#xff09;与该结点上权值的乘积。 就比如说要…

ETL工具 - Kettle 案例,拉取网络列表数据

一、Kettle 实战案例 上篇文章对 Kettle 的查询、连接、统计、脚本算子进行了介绍&#xff0c;对 Kettle 的大部分算子都应该有了相应的了解&#xff0c;下面我们基于 Kettle 实战案例&#xff0c;拉取 CSDN 博客列表的全部数据&#xff0c;存放至 Excel 文件中。 实验之前先…

NECCS|全国大学生英语竞赛C类|词汇和语法|词汇题|21:03~21:53

词汇题 语法题 情景对话题 目录 一、词汇题 1. 基本词义辨析题 2. 同义词或近义词辨析题 3. 固定搭配 二、常见词组 一、词汇题 1. 基本词义辨析题 appropriate funds 拨款 slum- clearance programme 贫民窟清理计划 reject 拒绝接受&…

DAY 49 tomcat服务配置优化

什么是Tomcat Tomcat是Java 语言开发的&#xff0c;Tomcat 服务器是一个免费的开放源代码的Web应用服务器&#xff0c;是Apache 软件基金会的 Jakarta 项目中的一个核心项目&#xff0c;由Apache、Sun和其他一些公司及人共同开发而成。 Tomcat属于轻量级应用服务器&#xff0…

外卖项目优化-02-

文章目录 瑞吉外卖项目优化-Day02课程内容前言1. MySQL主从复制1.1 介绍1.2 搭建1.2.1 准备工作1.2.2 主库配置1.2.3 从库配置 1.3 测试 2. 读写分离案例2.1 背景介绍2.2 ShardingJDBC介绍2.3 数据库环境2.4 初始工程导入2.5 读写分离配置2.6 测试 3. 项目实现读写分离3.1 数据…

深入解析PyTorch中的基本数据结构:张量的维度、形状和数据类型

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

【LEAP模型】能源环境发展、碳排放建模预测及不确定性分析

本次内容突出与实例结合&#xff0c;紧密结合国家能源统计制度及《省级温室气体排放编制指南》&#xff0c;深入浅出地介绍针对不同级别研究对象时如何根据数据结构、可获取性、研究目的&#xff0c;构建合适的能源生产、转换、消费、温室气体排放&#xff08;以碳排放为主&…

【Spring框架全系列】Spring更简单的读取和存储对象

&#x1f4ec;&#x1f4ec;哈喽&#xff0c;大家好&#xff0c;我是小浪。上篇博客我们介绍了如何创建一个spring项目&#xff0c;并且如何的存、取对象&#xff0c;介绍了相关方法&#xff0c;那么本篇博客将接着上篇博客的内容介绍如何更加简单的读取和存储对象。 &#x1f…

从源码角度看Linux进程组和线程组

1.进程ID 线程组ID&#xff1a; 设置了CLONE_THREAD flag创建的进程(线程&#xff09;同属于同一个线程组&#xff0c;拥有同一个线程组ID(TGID)。pthread_create创建线程的时候&#xff0c;底层通过clone函数实现就指定了CLONE_THREAD参数&#xff0c;即一个进程中的各个线程…

前端搭建猜数字游戏(内附源码)

The sand accumulates to form a pagoda ✨ 写在前面✨ 功能介绍✨ 页面搭建✨ 样式设置✨ 逻辑部分✨ 完整代码 ✨ 写在前面 上周我们实通过前端基础实现了打字通&#xff0c;当然很多伙伴再评论区提出了想法&#xff0c;后续我们会考虑实现的&#xff0c;今天还是继续按照我…

架构设计-数据库篇

大家好&#xff0c;我是易安&#xff01; 之前我们讲过架构设计的一些原则&#xff0c;和架构设计的方法论&#xff0c;今天我们谈谈高性能数据库集群的设计与应用。 读写分离原理 读写分离的基本原理是将数据库读写操作分散到不同的节点上&#xff0c;下面是其基本架构图。 读…

【ansys】project may be corrupted and recovery information is available

一、问题背景 在网上找一个fluent算例打算在自己机器上运行。 打开fluent求解器&#xff0c;因为路径上有中文&#xff0c;在求解计算的时候出错了。 于是我通过任务管理器强制退出fluent和workbench程序&#xff0c;再将项目文件复制到一个没有中文的目录路径中。 重新打开…

15-2-线程-线程的创建,等待,退出

一、相关API 1. 线程创建 1. 线程创建 #include <pthread.h> int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);参数&#xff1a;参数1&#xff1a;&#xff08;创建的线程 的地址…

【JavaEE】TCP回写服务器简易翻译服务器(网络编程)

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE初阶 上一篇我们讲解了UDP回写服务器和简易翻译服务器&#xff0c;想了解本篇文章&#xff0c;建议先看看上篇文章&#xff0c;学起来会更容易一些~~传送门&#xff1a;(1条消息) 【JavaEE】UDP数…

创新案例|香氛新品牌观夏如何以DTC模式仅4年实现年收过亿

国产香氛品牌观夏的DTC战略&#xff0c;正是从产品创新、全渠道布局、社交电商营销等方面创新&#xff0c;实现更高效地直接触达和转化消费者。观夏作为香氛DTC品牌的创新模式值得更多国内新品牌的关注与借鉴&#xff0c;同时也能为传统品牌的DTC转型提供全球化视野的启示。 1.…

改进YOLOv8: | ICLR 2022 | 涨点神器!Intel提出ODConv:即插即用的动态卷积 | 轻量化涨点创新必备

OMNI-DIMENSIONAL DYNAMIC CONVOLUTION ODConv实验核心代码修改文件yaml文件运行论文链接: https://openreview.net/forum?id=DmpCfq6Mg39 本文介绍了一篇动态卷积的工作:ODConv,其通过并行策略采用多维注意力机制沿核空间的四个维度学习互补性注意力。作为一种“即插即用…

3。数据结构(1)

嵌入式软件开发第三部分&#xff0c;各类常用的数据结构及扩展&#xff0c;良好的数据结构选择是保证程序稳定运行的关键&#xff0c;&#xff08;1&#xff09;部分包括数组&#xff0c;链表&#xff0c;栈&#xff0c;队列。&#xff08;2&#xff09;部分包括树&#xff0c;…