博客
关于我
Oracle笔记
阅读量:570 次
发布时间: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/

    你可能感兴趣的文章
    Windows2016 FTP用户隔离
    查看>>
    js传入参数是中文的时候出现 “******”未定义错误
    查看>>
    responded with a status of 404 ()
    查看>>
    吴恩达机器学习课程笔记(英文授课) Lv.1 新手村(回归)
    查看>>
    pair的用法
    查看>>
    SQL基本操作命令
    查看>>
    强制类型转换原理
    查看>>
    伪类选择器
    查看>>
    C# WinForm程序退出的方法
    查看>>
    ubuntu安装gem和fastlane
    查看>>
    ViroMedia集成android报错Lcom/facebook/react/bridge/WritableMap
    查看>>
    onFailure unexpected end of stream
    查看>>
    android 集成weex
    查看>>
    《C Prime Plus》(第六版) 第03章 编程练习 5 unsigned long int 格式化输出
    查看>>
    【echarts】中国地图china.js 在线引用地址
    查看>>
    Flex 布局的自适应子项内容过长导致其被撑大问题
    查看>>
    PL/SQL 动态Sql拼接where条件
    查看>>
    Lua-table 一种更少访问的安全取值方式
    查看>>
    虚函数
    查看>>
    菱形继承
    查看>>