博客
关于我
Oracle笔记
阅读量:569 次
发布时间:2019-03-11

本文共 2849 字,大约阅读时间需要 9 分钟。

Oracle SQL 技巧大全

作为数据库管理员或开发人员,掌握Oracle SQL的高级技巧对于日常工作非常有帮助。本文将从多个方面分享Oracle SQL的实用技能,帮助你提高工作效率。

正则匹配

在某些场景下,我们需要检查数据库中的字段是否仅包含数字。可以通过正则表达式轻松实现这一点。以下SQL可以筛选出非数字字段:

SELECT * FROM 表A WHERE NOT REGEXP_LIKE(字段a, '[[:digit:]]+');

修改字段类型

Oracle不允许直接修改已有数据字段的类型。解决方案是通过创建临时字段转运数据,再进行字段类型修改。以下是具体步骤:

  • 创建临时字段:

    ALTER TABLE 表A ADD new_temp VARCHAR2(50);
  • 复制数据:

    UPDATE 表A SET new_temp = a;
  • 删除原字段并更改类型:

    COMMIT;UPDATE 表A SET a = '';COMMIT;ALTER TABLE 表A MODIFY a VARCHAR2(50);COMMIT;ALTER TABLE 表A DROP COLUMN new_temp;
  • 数据库表数据回滚

    如果需要回滚数据库表数据到过去N分钟,可以使用以下方法:

    ALTER TABLE 表名 ENABLE ROW MOVEMENT;FLASHBACK TABLE 表名 TO TIMESTAMP systimestamp - interval 'N' minute;

    筛选出记录数大于2的记录

    为了筛选出记录数超过2的记录,可使用以下SQL:

    SELECT id, COUNT(*) FROM A WHERE a.test LIKE '%' GROUP BY id HAVING COUNT(*) > 2;

    Oracle 同义词

    创建同义词可以提高数据库的可读性和维护性。以下是创建同义词的语法:

    CREATE PUBLIC SYNONYM FOR USER.table名;

    Oracle 内外连接

    在Oracle中,内连接和外连接的实现方式有所不同。内连接使用+号表示。外连接的方向需注意:

    • 左外连接:+号在右侧。
    • 右外连接:+号在左侧。

    去重关键字

    在Oracle中,DISTINCT关键字用于去重,确保结果集中只保留一条记录。

    不等于符号

    Oracle支持多种不等于符号,常用的是!=^=<><>具有更好的移植性。

    1=1和1=0

    • 1=1始终为真,可用于避免误删或误改操作。
    • 1=0始终为假,可用于生成空结果集。

    创建表空间

    创建表空间时,需指定文件路径和大小。以下是示例:

    CREATE SMALLFILE TABLESPACE "WORKFLOW01" LOGGING DATAFILE 'D:\app\Administrator\oradata\oanet\WORKFLOW01.ora' SIZE 245M EXTENT MANAGEMENT LOCAL SEGMENT SPACE Management AUTO;

    IN关键字与等于符号

    • IN可以匹配多条记录。
    • =在性能上更优,适合使用索引。

    NVL函数

    NVL函数用于处理空值。语法如下:

    NVL(expr1, expr2)

    NVL2函数扩展了NVL的功能:

    NVL2(expr1, expr2, expr3)

    UNION和UNION ALL

    • UNION默认去重,排除重复记录。
    • UNION ALL保留所有记录,包括重复项。

    EXIST和IN

    • EXIST用于子查询,确保子查询结果非空。
    • IN用于检索满足条件的记录。

    递归查询

    递归查询常用于树结构数据。使用CONNECT BYSTART WITH进行实现。以下是示例:

    SELECT * FROM 表名 START WITH 1=1 CONNECT BY id = prior parent_id;

    条件SQL

    CASE WHEN语句用于实现条件判断,可以增强SQL的灵活性。

    数据库还原

    数据库还原可通过以下步骤实现:

  • 复制DMP文件到dpdump目录。
  • 创建用户并授权:
    CREATE USER testdb65 IDENTIFIED BY "testdb65" DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;GRANT CONNECT, DBA TO testdb65;
  • 创建表空间:
    CREATE TABLESPACE HR_DATA01 DATAFILE 'D:\nhsj\hr_data01.dbf' SIZE 500M AUTOEXTEND ON NEXT 50M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K;
  • 导入数据:
    IMPDP testdb65/testdb65@orcl schema=testdb65 dumpfile=TESTDB65.dmp;
  • 导入DMP文件

    重复使用DMP文件时,需遵循以下步骤:

  • sysdba用户登录:
    sqlplus /nologconn /as sysdba
  • 创建表空间:
    CREATE TABLESPACE DATA01 DATAFILE 'D:\tablespace\data01.dbf' SIZE 100M AUTOEXTEND ON NEXT 50M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K;
  • 创建用户并授权:
    CREATE USER job IDENTIFIED BY "job" DEFAULT TABLESPACE DATA01 TEMPORARY TABLESPACE TEMP QUOTA UNLIMITED ON DATA01;GRANT CONNECT, DBA TO job;
  • 导入DMP文件:
    IMPDP job/job@orcl schemas=job dumpfile=EXPDP160810GZ.dmp;
  • VM_CONCAT函数

    VM_CONCAT函数用于将多个字段值拼接成一个字符串。常用在数据转换场景。

    REPLACE函数

    REPLACE函数用于字符串替换。参数说明:

    • char:待替换的字符串。
    • search_string:要搜索的字符串。
    • replacement_string:替换字符串。

    默认情况下,replacement_string可为NULL,此时search_string将被移除。

    INSTR函数

    INSTR函数用于字符串查找。语法如下:

    INSTR(string1, string2 [, start_position [, nth_appearance ]])

    如果需要查找换行符,可以使用以下SQL:

    SELECT * FROM 表名 WHERE INSTR(a, chr(10)) > 0;

    转载地址:http://fqqvz.baihongyu.com/

    你可能感兴趣的文章
    他来了他来了,他带着云栖大会的免费门票走来了
    查看>>
    Oracle笔记
    查看>>
    JS实现删除行按钮只有一行时不能删除
    查看>>
    有问题找男人帮忙- Linux下man命令
    查看>>
    如何复用外部shell脚本
    查看>>
    VTK:小部件之SeedWidgetWithCustomCallback
    查看>>
    JAVA集合类Collection浅析
    查看>>
    Lambda表达式使用整理总结
    查看>>
    嵌入式软件工程师职业路线
    查看>>
    Fastdfs源码分析4----缓存区设计
    查看>>
    获取linux 主机cpu类型
    查看>>
    限流的算法有哪些?
    查看>>
    Failed to notify build listener.
    查看>>
    TextWiew单个线条
    查看>>
    Android Studio butterknife ,Zelezny @InjectView或者是@Bind
    查看>>
    Android Studio updating indices 一直刷新和闪烁
    查看>>
    基于vant-ui的时间选择器二次封装
    查看>>
    个人购买服务器问题?
    查看>>
    pwntools编写技巧
    查看>>
    Python开发常见漏洞
    查看>>