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

Backend - Oracle SQL

目录

一、CRUD 增删改查(基础)

(一)查询

(二)插入

(三)更新

(四)清空

二、常用 SQL

1. exists 搭配 select 1

2. FROM DUAL

3. INSTR()函数

4. 提取字串

5. IF 条件

(1)基本写法

(2)嵌套写法

6. 循环

(1)for循环

(2)loop循环

7. 格式化文本(换行)

8. 游标

(1)游标类型

① 系统自带:SYS_REFCURSOR

② 自定义强类型

(2)游标属性

(3)用法

① 定义游标时赋值

② 打开游标时赋值

9. SQL编辑器中的输出语法

10. SQL编辑器中的异常信息

11. 查询clob字段的值

(1)用PLSQL的Editor查看

(2)用SQL语句查询

① 首先判断clob字符长度

② 查询内容

12. 日期处理(decode、nvl)

(1)decode函数

(2)nvl函数

13. LAG() 和 LEAD() 窗口函数

(1)LAG(column, n)  

(2)LEAD(column, n)  


一、CRUD 增删改查(基础)

(一)查询

查询前10行记录

SELECT ROWNUM, t.* FROM XXX t WHERE ROWNUM <= 10;

(二)插入

INSERT INTO 表名 (栏位名1,栏位名2) VALUES ('值1','值2'));

注意:执行更新和插入、删除时,一定要再三确认好语句后才执行。

(三)更新

UPDATE 表名
SET 栏位名 = '值', 栏位名2 = '值2'
WHERE 栏位名 = '值' and 栏位名2 = '值2';

注意:执行更新和插入、删除时,一定要再三确认好语句后才执行。

(四)清空

TRUNCATE TABLE 表名;

注意:执行更新和插入、删除时,一定要再三确认好语句后才执行。

二、常用 SQL

1. exists 搭配 select 1

        select 1常用于判断子查询是否成功,返回的结果是满足查询条件的每行记录都返回1。

        exists (子查询) 常搭配select 1子查询,用于判断子查询是否包含行,返回的结果是布尔值。

        例如:

select * from Book Bk where exists (select 1 from Author where Bk.id = Author.bookid)

        其中,若 select 1 这个子查询有返回值,则子查询满足条件,exists 返回True(理解:Book表中id是否在Author表中的bookid也有对应)。

2. FROM DUAL

        理解:DUAL 是 Oracle 的虚拟表,不能更改该表(包括数据)。它只有一行一列。

        作用:常用于从系统函数中取值时,保证查询语句完整来正常执行。

        例如,查询当前系统时间:select sysdate from dual。

3. INSTR()函数

        字符查找函数。查找一个字符串在另一个字符串中首次出现的位置,若找不到,则返回0。起始位置从1开始。

        例如:INSTR("这是一个字符串,一个字符串喔", '一个')的结果是3。

4. 提取字串

        substr(string, start_position, length)

5. IF 条件

(1)基本写法

IF … THEN … END IF;

(2)嵌套写法

IF <condition1> THEN-- 处理条件1为TRUE时的逻辑IF <condition2> THEN-- 处理条件2为TRUE时的逻辑ELSE-- 处理条件2为FALSE时的逻辑END IF;ELSE-- 处理条件1为FALSE时的逻辑
END IF;

6. 循环

(1)for循环

FOR i in 1 .. length(变量名) 
LOOP …
END LOOP; 

(2)loop循环

        相当于do..while循环

loop …
exit when 条件;
end loop;

7. 格式化文本(换行)

        写法: CHR(13) || CHR(10)

8. 游标

(1)游标类型

① 系统自带:SYS_REFCURSOR

        举例:

游标名 SYS_REFCURSOR;
② 自定义强类型

        举例:

TYPE 游标类型名 IS REF CURSOR;  --  自定义REF CURSOR 强游标类型
游标名 游标类型名; -- 定义游标

(2)游标属性

%isopen -- 游标是否打开
%rowcount -- 已从游标中读取的记录数
%found -- 该行是否有值
%notfound -- 该行是否没有值

(3)用法

① 定义游标时赋值

        在begin前定义:

cursor 游标名 IS SQL查询语句; --- 赋值SQL语句

        打开: 

open 游标名;  --- 使用前必须先打开

        获取一行游标:

 fetch 游标名 into 变量名 ;  --- (变量名类型定义:表名.栏位名%type)

        关闭: 

close 游标名 ; --- 一经打开记得关闭
② 打开游标时赋值

        在begin前定义:

TYPE 游标类型 IS REF CURSOR; 游标名 游标类型; --  REF CURSOR 类型(强类型)

        打开:

OPEN 游标名 FOR SQL查询语句; --- 赋值SQL语句

9. SQL编辑器中的输出语法

DBMS_OUTPUT.PUT_LINE(' ');

注意:

DBMS_OUTPUT最大長度为32767。若想全部打印且不报异常,则如下:

        首先定义时,

maxLength CONSTANT NUMBER := 32767;  -- DBMS_OUTPUT最大長度

        然后begin时,

curLength := LENGTH(SQL变量名); --- 获取当前SQL语句的最大长度
FOR i IN 1..CEIL( curLength / maxLength) LOOP  --- 循环打印出SQL语句DBMS_OUTPUT.PUT_LINE(SUBSTR(SQL变量名, (i - 1) * maxLength + 1, maxLength));
END LOOP;

10. SQL编辑器中的异常信息

DBMS_UTILITY.format_error_backtrace

例如,打印出异常信息:

DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.format_error_backtrace);

11. 查询clob字段的值

该内容针对的是字段,若是Test,直接使用下方的变量值输出框即可查看CLOB值(注意使用 “=> :变量名”的冒号形式)。

(1)用PLSQL的Editor查看

在PLSQL中的表格数据中,右击,选择Open in Editor。

或者直接点击该单元格旁边的三点符号。

(2)用SQL语句查询

① 首先判断clob字符长度
SELECT DBMS_LOB.GETLENGTH(栏位名) 
FROM 表名
WHERE ROWNUM <10;
② 查询内容
-- 查询某栏位的前3500个字符,从第1个位置开始。
-- 使用SUBSTR方法时,长度不可超出4000。
SELECT  DBMS_LOB.SUBSTR(栏位名, 3500, 1) 
FROM 表名 
WHERE ROWNUM <10; 

12. 日期处理(decode、nvl)

(1)decode函数

decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值) 
--- 若条件1等于值1,则返回值1,然后依次检查,若都不满足,则默认缺省值,若没有缺省值,则默认为null。

(2)nvl函数

nvl(column, 默认值) --- 若某字段为null,则显示默认值。

13. LAG() 和 LEAD() 窗口函数

(1)LAG(column, n)  

        访问当前行之前的最近某行中的数据。

LAG(column, 1, 默认值) OVER(ORDER BY column)  --- 查询column该字段中每行的前面最近1行的数据,若无值则默认值。

(2)LEAD(column, n)  

        访问当前行之后的最近某行中的数据。

LEAD(column,2, 默认值) OVER(ORDER BY column)  --- 查询column该字段中每行的后面次近1行(第2近行)的数据,若无值则默认值。

注意:

        一般需要搭配排序(如OVER(ORDER BY column)),LAG和LEAD函数才有意义。

相关文章:

  • Sql刷题日志(day9)
  • Ansible模块——管理100台Linux的最佳实践
  • Ansible模块——通过 URL 下载文件
  • HTTP/HTTPS与SOCKS5协议在隧道代理中的兼容性设计解析
  • django回忆录(Python的一些基本概念, pycharm和Anaconda的配置, 以及配合MySQL实现基础功能, 适合初学者了解)
  • 人工智能+:职业技能培训的元命题与能力重构
  • HarmonyOS NEXT~鸿蒙系统与Uniapp跨平台开发实践指南
  • 从混乱到高效:我们是如何重构 iOS 上架流程的(含 Appuploader实践)
  • 自动化测试脚本点击运行后,打开Chrome很久??
  • ArcGIS操作16:添加经纬网
  • 创建一个使用 GPT-4o 和 SERP 数据的 RAG 聊天机器人
  • DeepSeek-V3 vs GPT-4:技术对比与性能评测
  • 从零开始创建React项目及制作页面
  • Linux跨网络通信中IP与MAC的作用
  • [Git] 初识 Git 与安装入门
  • 21. 自动化测试框架开发之Excel配置文件的测试用例改造
  • Python、Pytorch、TensorFlow、Anconda、PySide、Jupyter
  • 能碳一体化的核心功能模块
  • React Flow 数据持久化:Django 后端存储与加载的最佳实践(含详细代码解析)
  • [SpringBoot]Spring MVC(6.0)----图书管理系统(初)
  • 德国放弃长期以来的反核立场,寻求修复德法合作关系
  • 来论|以法治之力激发民营经济新动能
  • 国家发改委:进一步完善促进民营经济发展的制度机制
  • 央媒:安徽凤阳鼓楼坍塌楼宇部分非文物,系违规复建的“假古董”
  • 上海电视节发布海报、宣传片:三十而励,光影新程
  • 国家统计局:要持续加大好房子建设供应力度,积极推动城市更新行动和保障房建设