当前位置: 首页 > news >正文

MySQL到Oracle快速上手

第一次做Oracle项目的时候对一些语法区别不太清楚,这里列出一些开发中发现的与MYSQL不同的点

  1. 一个用户相当于一个数据库

  2. 表空间

    表空间是用于存储表、索引和其他数据库对象的逻辑存储结构。每个表空间由一个或多个数据文件组成,这些文件可以位于不同的物理磁盘上。

    CREATE TABLESPACE example_tbs
    DATAFILE '/u01/app/oracle/oradata/example/example01.dbf'
    SIZE 100M
    AUTOEXTEND ON
    NEXT 50M
    MAXSIZE 500M;
    
  3. 修改列名的语法

    --oracle
    ALTER TABLE table_name RENAME COLUMN old_column_name TO new_column_name;
    --mysql
    ALTER TABLE table_name CHANGE COLUMN old_column_name new_column_name datatype;
    
  4. sysydate 表示当前日期

  5. 在Oracle数据库中,ROWID 是一个伪列,用于标识表中的行。每个 ROWID 可以用于快速定位表中的行。

    ROWID 值是一个字符串,由以下三个部分组成:

    数据对象的编号(Data Object Number,也称为文件标识符)
    数据块的编号(Data Block Number)
    在数据块中的行号(Row Number)
    例如,以下 ROWID 值表示 employees 表中的一行:

    AAAR3zAAEAAAAVvAAA
    

    其中,前六个字符 AAAR3z 是数据对象的编号,接下来的六个字符 AAEAAA 是数据块的编号,最后的三个字符 VVAAA 是在数据块中的行号。

    ROWID 值是基于物理存储结构计算的,并且可能会因为表的重建、分区或其他操作而发生变化。因此,在使用 ROWID 时需要格外小心,并且尽可能使用其他方法来定位表中的行。

  6. 在 Oracle 数据库中,ROWNUM 是一个伪列,用于给查询结果中的行分配行号。ROWNUM 的值是一个整数,从 1 开始递增,表示查询结果中的第几行。

    以下是使用 ROWNUM 的基本语法:

    SELECT ROWNUM, employee_id, first_name, last_name
    FROM employees
    WHERE ROWNUM <= 10;
    

    返回名为 employees 表中前 10 行数据,并为每行分配一个行号

    需要注意的是,ROWNUM 是在查询结果返回之后才分配的行号,因此不能在查询过程中使用它来筛选数据。例如,以下查询不会返回任何数据:

    SELECT ROWNUM, employee_id, first_name, last_name
    FROM employees
    WHERE ROWNUM > 10;
    

    这是因为 ROWNUM 的值在结果返回之前就已经被计算了,而 WHERE 子句只能筛选已经返回的结果。如果要筛选结果集中的行号,可以使用子查询或通用表表达式(CTE)等方法。

    1120 行数据
    SELECT *
    FROM (SELECT t.*, ROWNUM rnFROM my_table tWHERE ROWNUM <= 20
    )
    WHERE rn >= 11;
    按照id升序排序后获取第 1120 行数据
    SELECT *
    FROM (SELECT t.*, ROWNUM rnFROM (SELECT *FROM my_tableORDER BY id) tWHERE ROWNUM <= 20
    )
    WHERE rn >= 11;```
  7. NVL 函数接受两个参数,如果第一个参数不为空,则返回第一个参数的值;否则返回第二个参数的值。

    SELECT NVL(name, 'N/A') AS name, NVL(age, 0) AS age
    FROM my_table;
    

    NVL2 函数接受三个参数,如果第一个参数不为空,则返回第二个参数的值;否则返回第三个参数的值。

    SELECT NVL2(name, 'Name is not empty', 'Name is empty') AS result
    FROM my_table;
    
  8. DECODE 函数接受多个参数,第一个参数是要比较的字段或表达式,后面的参数是一组值和对应的结果。如果要比较的字段或表达式等于某个值,则返回该值对应的结果;否则返回最后一个参数作为默认结果。

    SELECT DECODE(gender, 'M', 'Male', 'F', 'Female', 'Unknown') AS result
    FROM my_table;
    ===============
    如果 gender 字段等于 'M',则返回字符串 "Male";如果 gender 字段等于 'F',则返回字符串 "Female";否则返回字符串 "Unknown"
  9. CASE 表达式根据 gender 字段的值,在查询结果中添加一个名为 gender_desc 的新列。如果 gender 字段等于 ‘M’,则返回字符串 “Male”;如果 gender 字段等于 ‘F’,则返回字符串 “Female”;否则返回字符串 “Unknown”。

    SELECT name, age, gender,CASE genderWHEN 'M' THEN 'Male'WHEN 'F' THEN 'Female'ELSE 'Unknown'END AS gender_desc
    FROM my_table;
    
  10. SELECT name, score, RANK() OVER (ORDER BY score DESC) AS rank
    FROM my_table;
    

    RANK() 函数根据 score 字段的值为每个行分配一个排名,并将排名保存在名为 rank 的新列中。ORDER BY 子句指定了按照 score 字段的值降序排序。如果有多个行具有相同的值,则它们将被分配相同的排名,并且下一个排名将被跳过。dense_rank()则连续,row_number()连续排名无论值是否相同。

  11. 视图

    CREATE [OR REPLACE] VIEW view_name [(column1, column2, ...)]
    AS SELECT statement;
    

    CREATE VIEW 用于创建一个新的视图,OR REPLACE 用于替换一个已经存在的同名视图(如果存在),view_name 是视图的名称,column1, column2, … 是视图中包含的列名,SELECT statement 是用于创建视图的查询语句。

    需要注意的是,在 Oracle 数据库中,视图可以包含复杂的查询和窗口函数等高级特性,而在 MySQL 数据库中,视图的功能相对较为简单。此外,在 Oracle 数据库中,视图可以使用 WITH CHECK OPTION 子句来限制对视图的修改操作;而在 MySQL 数据库中,视图不支持 WITH CHECK OPTION 子句。

    视图和表的数据是相互绑定的。修改视图数据时只会影响键保留表里的数据,也就是主键来自的那张表。

  12. 物化视图:物化视图是一个包含了预先计算好的数据的表,这些数据可以是聚合数据、连接查询或者其他复杂查询的结果。当查询需要访问这些数据时,数据库可以直接从物化视图中读取数据,而不必重新计算查询结果。

    CREATE MATERIALIZED VIEW view_name
    BUILD [IMMEDIATE|DEFERRED]
    REFRESH [FAST|COMPLETE|FORCE] [START WITH date] [NEXT date]
    [on commit]
    AS SELECT statement
    [LOGGING;]手动刷新
    begin
    EXEC DBMS_SNAPSHOT.REFRESH('my_view', 'C');
    end;
    

    CREATE MATERIALIZED VIEW 用于创建一个新的物化视图,BUILD IMMEDIATE 或 BUILD DEFERRED 用于指定何时开始构建物化视图,REFRESH FAST、REFRESH COMPLETE 或 REFRESH FORCE 用于指定何时刷新物化视图,START WITH 和 NEXT 用于指定刷新计划,view_name 是物化视图的名称,SELECT statement 是用于创建物化视图的查询语句。LOGGING 选项表示启用日志记录功能,用于记录增量数据

    在 MySQL 数据库中,创建物化视图的语法与普通视图类似,但是 MySQL 不支持像 Oracle 那样的 REFRESH 选项和 START WITH/NEXT 选项。

  13. 序列:

    CREATE SEQUENCE my_seq
    START WITH 1
    INCREMENT BY 1
    MAXVALUE 999999999
    NOCACHE
    NOORDER;
    

    my_seq 是序列的名称,START WITH 1 表示起始值为 1,INCREMENT BY 1 表示递增量为 1,MAXVALUE 999999999 表示最大值为 999999999,NOCACHE 表示不缓存序列值,NOORDER 表示不保证序列值的顺序。

    需要注意的是,序列是数据库级别的对象,可以被多个表共享。

  14. 在MySQL中,用户定义变量只在当前会话中有效。而在Oracle中,PL/SQL变量的作用域可以是整个程序或子程序。

    --mysql
    SET @my_var = 10;
    SELECT CONCAT('My variable is ', @my_var);--oracle
    DECLAREmy_var NUMBER;
    BEGINmy_var := 10;DBMS_OUTPUT.PUT_LINE('My variable is ' || my_var);
    END;
    --如果不知道v_last_name数据类型但知道其来源列
    DECLAREv_last_name employees.last_name%TYPE;
    BEGINSELECT last_name INTO v_last_name FROM employees WHERE employee_id = 100;DBMS_OUTPUT.PUT_LINE('The last name is ' || v_last_name);
    END;
    --如果不知道v_employee数据类型但知道其来源行
    DECLAREv_employee employees%ROWTYPE;
    BEGINSELECT * INTO v_employee FROM employees WHERE employee_id = 100;DBMS_OUTPUT.PUT_LINE('The employee name is ' || v_employee.first_name || ' ' || v_employee.last_name);
    END;
  15. 异常处理

    BEGIN-- 此处是正常的 PL/SQL 代码...
    EXCEPTIONWHEN exception1 THEN-- 异常处理代码1...WHEN exception2 THEN-- 异常处理代码2...
    END;
    ============================================================
    BEGINSELECT column1 INTO variable1 FROM table1 WHERE column2 = value;EXCEPTIONWHEN NO_DATA_FOUND THEN-- 处理 No Data Found 异常variable1 := NULL;
    END;
    
  16. 循环

    --oracle
    FOR i IN 1..10 LOOP-- 执行循环体中的代码
    END LOOP;WHILE condition LOOP-- 执行循环体中的代码
    END LOOP;
    
  17. 分区,可以把表根据某种规则分区,插入数据时无感知。查询可以根据分区的规则查询

    CREATE TABLE SALES
    (SALES_ID NUMBER,SALE_DATE DATE,CUSTOMER_ID NUMBER,PRODUCT_ID NUMBER,AMOUNT NUMBER
    )
    PARTITION BY RANGE (SALE_DATE)
    (PARTITION SALES_Q1 VALUES LESS THAN (TO_DATE('01-APR-2023', 'DD-MON-YYYY')),PARTITION SALES_Q2 VALUES LESS THAN (TO_DATE('01-JUL-2023', 'DD-MON-YYYY')),PARTITION SALES_Q3 VALUES LESS THAN (TO_DATE('01-OCT-2023', 'DD-MON-YYYY')),PARTITION SALES_Q4 VALUES LESS THAN (TO_DATE('01-JAN-2024', 'DD-MON-YYYY'))
    );SELECT * FROM SALES PARTITION (SALES_Q1);
    SELECT * FROM SALES PARTITION (SALES_Q2);
    SELECT * FROM SALES PARTITION (SALES_Q3);
    SELECT * FROM SALES PARTITION (SALES_Q4);
    

相关文章:

MySQL到Oracle快速上手

第一次做Oracle项目的时候对一些语法区别不太清楚&#xff0c;这里列出一些开发中发现的与MYSQL不同的点 一个用户相当于一个数据库 表空间 表空间是用于存储表、索引和其他数据库对象的逻辑存储结构。每个表空间由一个或多个数据文件组成&#xff0c;这些文件可以位于不同的物…...

机器人CPP编程基础-01第一个程序Hello World

很多课程先讲C/C或者一些其他编程课&#xff0c;称之为基础课程。然后到本科高年级进行机器人专业课学习&#xff0c;这样时间损失非常大&#xff0c;效率非常低。 C/单片机/嵌入式/ROS等这些编程基础可以合并到一门课中进行实现&#xff0c;这些素材已经迭代三轮以上&#xf…...

前后端分离------后端创建笔记(03)前后端对接(下)

本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论&#xff0c;如有侵权请联系 源码&#xff1a;https://gitee.com/green_vegetables/x-admin-project.git 素材&#xff1a;https://pan.baidu.com/s/…...

Leet code1049 最后一块石头的重量II

1049 最后一块石头的重量II 【问题描述】 有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉…...

Rust语法:变量,函数,控制流,struct

文章目录 变量可变与不可变变量变量与常量变量的Shadowing标量类型整数 复合类型 函数控制流if elseloop & whilefor in structstruct的定义Tuple Structstruct的方法与函数 变量 可变与不可变变量 Rust中使用let来声明变量&#xff0c;但是let声明的是不可变变量&#x…...

LVS简介及LVS-DR搭建

目录 一. LVS简介&#xff1a; 1.简介 2. LVS工作模式&#xff1a; 3. LVS调度算法&#xff1a; 4. LVS-DR集群介绍&#xff1a; 二.LVS-DR搭建 1.RS配置 1&#xff09;两台RS&#xff0c;需要下载好httpd软件并准备好配置文件 2&#xff09;添加虚拟IP&#xff08;vip&…...

Java基础篇--日期时间类

目录 前言 Instant&#xff08;时间戳&#xff09;类 LocalData(日期)类 LocalTime(时间)类 LocalDataTime(日期时间)类 Duration(时间间隔)类 Period(日期间隔)类 Clock&#xff08;获取时区&#xff09;类 前言 在开发中经常需要处理日期和时间&#xff0c;Java提供…...

Vue生命周期函数 详解

以下是Vue生命周期函数的流程图和每个周期的代码详解&#xff1a; 流程图&#xff1a; beforeCreate -> created -> beforeMount -> mounted -> beforeUpdate -> updated -> beforeDestroy -> destroyed详解&#xff1a; beforeCreate&#xff1a; 触发时…...

判断链表有环的证明

目录 1.问题 2.证明 3.代码实现 1.问题 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用…...

百度屏蔽词有哪些?其中就有移民关键词指数被屏蔽?

我是百收网SEO&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 今日tombkeeper消息爆料&#xff1a;百度指数已经屏蔽“移民”等关键词指数。 大家好&#xff0c;我是百收网SEO商学院的狂潮微课老师&#xff0c;今天我们来讲解第 12 节课关键词优化难度分析…...

代码随想录day02

977.有序数组的平方 ● 力扣题目链接 ● 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 思路 ● 暴力排序&#xff0c;时间复杂度O(n nlogn) ● 使用双指针&#xff0c;时间复杂度O(n) …...

VR时代真的到来了?

业界对苹果的期待是&#xff0c;打造一台真正颠覆性的&#xff0c;给头显设备奠定发展逻辑底座的产品&#xff0c;而实际上&#xff0c;苹果只是发布了一台更强大的头显。 大众希望苹果回答的问题是“我为什么需要一台AR或者VR产品&#xff1f;”&#xff0c;但苹果回答的是“…...

docker run 命令转化为 docker-compose 工具

工作当中需要将 docker run 转换为更方便的 docker-compose 格式&#xff0c;可以使用下面的工具来完成。 转换工具&#xff1a;https://www.composerize.com/?utm_sourceappinn.com 使用介绍&#xff1a;https://www.appinn.com/composerize-for-docker-compose/...

php如何对接伪原创api

在了解伪原创api的各种应用形态之后&#xff0c;我们继续探讨智能写作背后的核心技术。需要说明的是&#xff0c;智能写作和自然语言生成、自然语言理解、知识图谱、多模算法等各类人工智能算法都有紧密的关联&#xff0c;在百度的智能写作实践中&#xff0c;常根据实际需求将多…...

设计模式行为型——模板模式

目录 模板模式的定义 模板模式的实现 模板模式角色 模板模式类图 模板模式举例 模板模式代码实现 模板模式的特点 优点 缺点 使用场景 注意事项 实际应用 模板模式的定义 模板模式&#xff08;Template Pattern&#xff09;属于行为型设计模式&#xff0c;又叫模版…...

12.Eclipse导入Javaweb项目

同事复制一份他的项目给我ekp.rar (懒得从SVN上拉取代码了)放在workspace1目录下 新建一个文件夹 workspace2&#xff0c;Eclipse切换到workspace2工作空间 选择Import导入 选择导入的项目(这里是放到workspace1里面) 拷贝一份到workspace2里面 例子 所有不是在自己电脑上开发…...

探索自动化网页交互的魔力:学习 Selenium 之旅【超详细】

"在当今数字化的世界中&#xff0c;网页自动化已经成为了不可或缺的技能。想象一下&#xff0c;您可以通过编写代码&#xff0c;让浏览器自动执行各种操作&#xff0c;从点击按钮到填写表单&#xff0c;从网页抓取数据到进行自动化测试。学习 Selenium&#xff0c;这一功能…...

css常用样式和不常用样式

文章目录 1、hover鼠标变小手2、ul去除点3、文字溢出显示省略号&#xff08;1&#xff09;一行文字溢出显示省略号&#xff08;2&#xff09;多行文字溢出显示省略号 4、文字单词超出&#xff08;1&#xff09;文字单词超出换行&#xff08;word-wrap&#xff09;&#xff08;2…...

【小练习】交互式网格自定义增删改错误记录及解决(进行中)

经过之前的学习&#xff0c;已经能创建简单的交互式网格并设置自定义增删改按钮&#xff0c;但是实现上还是存在一些问题&#xff0c;来完善优化一下。 首先是修改&#xff0c;正常修改都会弹出修改框&#xff0c;里面是之前存储的信息&#xff0c;根据实际需要对其进行修改&a…...

云渲染效果不对?云渲染前的四个细节表明你的问题出在这里!

云渲染针对3D渲染行业&#xff0c;帮助本地电脑解决渲染慢的问题&#xff0c;大幅提高设计师的工作效率。但小编发现&#xff0c;有不少小伙伴在使用云渲染时&#xff0c;出现了渲染效果不对或丢失的问题&#xff0c;根据小伙伴们的问题和我们创意云云渲染平台给出的解决方案&a…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...