SQL游标实战精讲(从入门到高阶应用)

第一章:SQL游标基础概念与核心原理

什么是SQL游标

SQL游标(Cursor)是一种数据库对象,用于在结果集中逐行处理数据。与一次性操作整批数据的SQL语句不同,游标允许程序对查询返回的每一行数据进行独立处理,适用于需要复杂逻辑控制的场景,如逐条更新、条件判断后执行不同操作等。

游标的工作机制

游标的操作通常遵循四个步骤:声明(DECLARE)、打开(OPEN)、读取(FETCH)和关闭(CLOSE)。首先声明游标并绑定SELECT语句,然后打开游标执行查询,接着通过FETCH逐行获取数据到变量中,最后释放资源。
  1. DECLARE:定义游标名称及其关联的SELECT语句
  2. OPEN:激活游标,执行查询并生成结果集
  3. FETCH:从当前游标位置提取一行数据至变量
  4. CLOSE:释放游标占用的资源
游标使用示例
以下是一个在MySQL中使用游标的简单示例,展示如何遍历员工表中的记录:

-- 声明变量与游标
DECLARE done INT DEFAULT FALSE;
DECLARE emp_name VARCHAR(50);
DECLARE emp_cursor CURSOR FOR 
    SELECT name FROM employees;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN emp_cursor;
read_loop: LOOP
    FETCH emp_cursor INTO emp_name;
    IF done THEN
        LEAVE read_loop; -- 结束循环
    END IF;
    -- 在此处可执行业务逻辑,例如插入日志或更新数据
    INSERT INTO log_table(message) VALUES (CONCAT('Processed: ', emp_name));
END LOOP;
CLOSE emp_cursor;

游标的优缺点对比

优点缺点
支持逐行处理,逻辑灵活性能较低,尤其在大数据量下
适合复杂业务流程控制占用较多内存和数据库资源
可结合条件判断与循环结构代码维护难度较高
graph TD A[DECLARE Cursor] --> B[OPEN Cursor] B --> C[FETCH Row into Variables] C --> D{End of Result Set?} D -- No --> C D -- Yes --> E[CLOSE Cursor]

第二章:SQL游标的基本操作与语法详解

2.1 游标定义与声明:理论解析与实例演示

游标的基本概念
游标(Cursor)是数据库中用于逐行处理查询结果集的机制。它允许程序在结果集中定位、遍历并操作每一行数据,常用于存储过程或函数中进行复杂的数据处理。
声明与使用语法
在PL/pgSQL中,游标的声明需指定查询语句和返回类型。以下为示例代码:

DECLARE
    emp_cursor CURSOR FOR 
        SELECT id, name, salary FROM employees WHERE salary > 5000;
上述代码声明了一个名为 emp_cursor 的游标,用于检索薪资高于5000的员工记录。声明后可通过 FETCH 命令逐行读取数据,结合循环结构实现精细控制。
  • 游标分为静态游标和动态游标,前者绑定固定查询,后者可接受参数化SQL;
  • 使用 OPEN 语句激活游标,CLOSE 释放资源;
  • 合理管理游标生命周期可避免内存泄漏。

2.2 打开与提取数据:逐行处理的实践方法

在处理大规模文本或日志文件时,逐行读取是避免内存溢出的有效策略。通过流式处理,程序可以按需加载数据,提升效率。
使用Go语言实现逐行读取
package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    file, err := os.Open("data.log")
    if err != nil {
        panic(err)
    }
    defer file.Close()

    scanner := bufio.NewScanner(file)
    for scanner.Scan() {
        fmt.Println(scanner.Text()) // 输出每一行内容
    }
}
上述代码利用 bufio.Scanner 创建扫描器,每次调用 Scan() 读取一行,Text() 获取字符串内容。该方式适用于GB级日志分析场景。
常见应用场景对比
场景推荐方法内存占用
小型配置文件一次性读入低
大型日志文件逐行扫描可控

2.3 游标关闭与释放:资源管理最佳实践

在数据库操作中,游标(Cursor)用于逐行处理查询结果。若未正确关闭,可能导致连接泄漏、内存溢出或性能下降。
显式关闭游标
始终在使用完毕后显式关闭游标,尤其是在异常路径中也需确保释放。
cursor = connection.cursor()
try:
    cursor.execute("SELECT id, name FROM users")
    for row in cursor:
        print(row)
finally:
    cursor.close()  # 确保资源释放
该代码通过 finally 块保证无论是否发生异常,游标都会被关闭,避免资源泄露。
使用上下文管理器自动化管理
推荐使用支持上下文协议的数据库接口,自动处理关闭逻辑。
with connection.cursor() as cursor:
    cursor.execute("SELECT id, name FROM users")
    results = cursor.fetchall()
# 游标在此自动关闭
利用上下文管理器(with 语句),游标在作用域结束时自动释放,提升代码安全性和可读性。

2.4 简单循环遍历场景下的游标应用

在处理大型数据集时,直接加载所有记录可能导致内存溢出。此时,数据库游标提供了一种逐行读取数据的机制,适用于简单循环遍历场景。
游标基本使用流程
  • 声明游标并绑定查询语句
  • 打开游标开始数据读取
  • 循环获取每一行数据并处理
  • 关闭游标释放资源
代码示例:Python中使用游标遍历用户表
cursor = connection.cursor()
cursor.execute("SELECT id, name FROM users")
for row in cursor:
    print(f"Processing user: {row[0]}, {row[1]}")
上述代码中,cursor() 创建游标对象,execute() 执行查询,循环直接迭代游标,每次仅加载一行数据,显著降低内存占用。该方式适合日志处理、数据迁移等需顺序访问全表的场景。

2.5 错误处理与状态检测机制剖析

在分布式系统中,可靠的错误处理与状态检测是保障服务可用性的核心。系统通过心跳机制与超时探测实现节点状态监控。
健康检查流程
节点间周期性交换心跳包,若连续三次未响应,则标记为临时失联,触发故障转移。
错误码设计规范
  • 1xx:临时性重试错误
  • 4xx:客户端请求异常
  • 5xx:服务端内部错误
func HandleError(err error) *ErrorResponse {
    if err == context.DeadlineExceeded {
        return &ErrorResponse{Code: 1001, Msg: "timeout retry"}
    }
    return &ErrorResponse{Code: 5000, Msg: "server error"}
}
上述代码展示了基于Go语言的错误分类处理逻辑,通过判断上下文超时类型返回对应错误码,提升调用方重试决策效率。

第三章:不同数据库中的游标实现对比

3.1 SQL Server中游标的使用特点与限制

游标的基本概念与适用场景
SQL Server中的游标(Cursor)是一种用于逐行处理查询结果集的数据库对象,适用于需要对每一行数据进行复杂逻辑操作的场景。与集合式操作不同,游标提供了一种类似编程语言中循环的机制。
游标使用示例

DECLARE @EmployeeID INT, @Name NVARCHAR(50)
DECLARE EmployeeCursor CURSOR FOR
    SELECT EmployeeID, Name FROM Employees WHERE Department = 'IT'

OPEN EmployeeCursor
FETCH NEXT FROM EmployeeCursor INTO @EmployeeID, @Name

WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT 'Processing: ' + @Name
    FETCH NEXT FROM EmployeeCursor INTO @EmployeeID, @Name
END

CLOSE EmployeeCursor
DEALLOCATE EmployeeCursor
该代码声明了一个游标,遍历IT部门员工信息。其中,OPEN启动游标,FETCH NEXT读取下一行,@@FETCH_STATUS判断是否成功获取数据,最后需显式关闭并释放资源。
性能与使用限制
  • 游标占用较多内存和锁资源,影响并发性能
  • 不支持所有查询类型,如包含聚合函数的视图可能无法使用
  • 应优先考虑基于集合的操作(如JOIN、子查询)替代游标

3.2 Oracle数据库游标的行为差异与优化策略

Oracle数据库中的游标分为隐式游标和显式游标,二者在资源管理与执行效率上存在显著差异。隐式游标由系统自动管理,适用于简单查询;而显式游标需手动打开、提取和关闭,适用于复杂结果集处理。
游标类型对比
  • 隐式游标:SQL%ROWCOUNT 可获取影响行数,自动释放资源
  • 显式游标:支持参数传递、循环提取,但需注意游标泄漏风险
性能优化建议
DECLARE
  CURSOR emp_cursor IS 
    SELECT employee_id, salary FROM employees WHERE department_id = 10;
  v_emp_id employees.employee_id%TYPE;
  v_salary employees.salary%TYPE;
BEGIN
  OPEN emp_cursor;
  LOOP
    FETCH emp_cursor INTO v_emp_id, v_salary;
    EXIT WHEN emp_cursor%NOTFOUND;
    -- 处理数据
  END LOOP;
  CLOSE emp_cursor; -- 必须显式关闭
END;
上述代码展示了显式游标的完整生命周期。关键点在于使用 %NOTFOUND 判断结束条件,并确保最终调用 CLOSE 释放资源。频繁开启大结果集游标时,建议结合 BULK COLLECT 提升性能。

3.3 MySQL对游标的支持现状与替代方案探讨

MySQL支持存储过程中的游标,但仅限于读取数据的只进游标(forward-only),且性能开销较大,不适用于大规模数据处理。
游标的基本语法示例

DECLARE done INT DEFAULT FALSE;
DECLARE emp_name VARCHAR(50);
-- 声明游标
DECLARE cur CURSOR FOR 
  SELECT name FROM employees WHERE salary > 5000;
-- 声明结束处理
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN cur;
read_loop: LOOP
  FETCH cur INTO emp_name;
  IF done THEN
    LEAVE read_loop;
  END IF;
  -- 处理逻辑
  INSERT INTO high_earners VALUES (emp_name);
END LOOP;
CLOSE cur;
上述代码定义了一个游标遍历高薪员工,逐行插入目标表。DECLARE声明变量与游标,FETCH提取数据,LOOP实现迭代。由于每行操作触发一次上下文切换,效率较低。
常见替代方案
  • 批量处理:使用INSERT ... SELECT直接批量插入,避免逐行操作;
  • 临时表+JOIN:将中间结果存入临时表,通过集合操作提升效率;
  • 应用层迭代:在应用程序中处理结果集,利用语言级控制结构增强灵活性。

第四章:高阶应用场景与性能优化技巧

4.1 嵌套游标设计模式及其典型用例分析

嵌套游标设计模式常用于数据库操作中,当需要在遍历主数据集的同时对关联子集进行逐行处理时尤为有效。该模式通过外层游标控制整体流程,内层游标则针对每条主记录的关联数据执行精细操作。
典型应用场景
  • 报表生成:逐部门统计员工绩效
  • 数据清洗:主表与日志表联动校验
  • 批量更新:基于主订单处理明细项
代码实现示例

DECLARE
  CURSOR cur_dept IS SELECT dept_id FROM departments;
  CURSOR cur_emp(p_dept_id NUMBER) IS 
    SELECT emp_name, salary FROM employees WHERE dept_id = p_dept_id;
BEGIN
  FOR r_dept IN cur_dept LOOP
    FOR r_emp IN cur_emp(r_dept.dept_id) LOOP
      DBMS_OUTPUT.PUT_LINE(r_emp.emp_name || ': ' || r_emp.salary);
    END LOOP;
  END LOOP;
END;
上述PL/SQL代码中,外层游标遍历所有部门,内层游标接收部门ID参数并查询对应员工。嵌套结构实现了按部门分组输出员工信息的逻辑,体现了层级数据访问的自然表达。

4.2 游标与存储过程的协同开发实战

在复杂业务场景中,游标与存储过程的结合使用能有效处理逐行数据操作。通过游标遍历结果集,可在存储过程中实现精细控制逻辑。
游标基本结构
DELIMITER //
CREATE PROCEDURE ProcessOrders()
BEGIN
  DECLARE done INT DEFAULT FALSE;
  DECLARE order_id INT;
  -- 声明游标
  DECLARE cur CURSOR FOR SELECT id FROM orders WHERE status = 'pending';
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

  OPEN cur;
  read_loop: LOOP
    FETCH cur INTO order_id;
    IF done THEN LEAVE read_loop; END IF;
    -- 处理每条记录
    UPDATE order_logs SET processed = 1 WHERE order_id = order_id;
  END LOOP;
  CLOSE cur;
END//
DELIMITER ;
上述代码定义了一个游标,用于读取待处理订单。声明阶段定义变量与游标,OPEN启动游标,LOOP中逐行提取并更新日志状态,最后关闭游标。
应用场景
  • 批量数据校验与修正
  • 跨表关联更新
  • 异步任务调度中的状态机管理

4.3 性能瓶颈识别与集合操作替代方案

在高并发数据处理场景中,频繁的集合操作常成为性能瓶颈。通过 profiling 工具可定位耗时热点,常见于切片遍历、map 查找及重复合并操作。
常见瓶颈示例

// 低效的切片合并
func mergeSlices(a, b []int) []int {
    for _, v := range b {
        a = append(a, v) // 每次扩容可能导致内存复制
    }
    return a
}
该实现每次 append 可能触发底层数组扩容,时间复杂度不稳定。建议预分配容量:append(make([]int, 0, len(a)+len(b)), a...)。
高效替代方案对比
操作类型原生方式优化方案
去重合并双层循环判断使用 map 集合缓存已存在元素
交集计算嵌套查找哈希预建,单次遍历
利用空间换时间策略,可显著降低算法复杂度。

4.4 动态SQL结合游标的高级编程技巧

在复杂的数据处理场景中,动态SQL与游标的结合能够实现高度灵活的行级操作。通过在运行时构造SQL语句并配合游标逐行处理结果,可应对多变的查询条件和目标表结构。
动态SQL与游标协同流程
  • 使用 EXECUTE IMMEDIATE 构造带参数的SELECT语句
  • 将结果集绑定至游标变量进行遍历
  • 在循环中执行定制化业务逻辑
DECLARE
  TYPE ref_cursor IS REF CURSOR;
  cur ref_cursor;
  v_sql VARCHAR2(1000);
  v_name VARCHAR2(100);
BEGIN
  v_sql := 'SELECT employee_name FROM ' || :table_name || ' WHERE dept = :dept';
  OPEN cur FOR v_sql USING 'HR';
  LOOP
    FETCH cur INTO v_name;
    EXIT WHEN cur%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE('Employee: ' || v_name);
  END LOOP;
  CLOSE cur;
END;
上述代码中,v_sql 在运行时拼接表名,实现跨表查询;USING 子句安全传参,防止注入;游标逐行提取结果并输出。该模式适用于数据迁移、报表生成等场景。

第五章:游标使用的未来趋势与替代技术展望

随着数据库规模的不断增长和实时性要求的提升,传统游标的性能瓶颈日益凸显。在高并发场景下,逐行处理数据的方式已难以满足现代应用对响应速度的需求。
批处理与集合操作的普及
现代数据库优化器更倾向于执行集合级别的操作。例如,在 PostgreSQL 中使用 RETURNING 子句批量获取插入结果,避免了逐条读取:
INSERT INTO orders (product_id, qty)
VALUES (101, 5), (102, 3), (103, 8)
RETURNING order_id, product_id;
这种模式显著减少了客户端与数据库之间的往返次数。
流式查询接口的应用
许多新一代 ORM 框架开始支持流式查询,如 GORM for Go 提供了基于游标的迭代接口,但底层采用分块读取机制:
rows, _ := db.Model(&User{}).Rows()
defer rows.Close()
for rows.Next() {
    var user User
    db.ScanRows(rows, &user)
    // 处理单条记录,但实际从网络缓冲区批量拉取
}
物化视图与变更数据捕获
对于需要持续追踪数据变化的场景,CDC(Change Data Capture)结合 Kafka 等消息系统正逐步取代轮询式游标。例如,Debezium 可实时捕获 MySQL 的 binlog 变更,推送到下游消费者。
技术方案延迟资源开销适用场景
传统游标高高小数据集、复杂逐行逻辑
批量 LIMIT/OFFSET中中分页导出
CDC + 流处理低低实时同步、事件驱动架构
函数式数据管道的兴起
借助 Apache Flink 或 Spark Streaming,开发者可构建无状态的数据处理流水线,将原本依赖游标的状态维护转移到分布式运行时,实现横向扩展。
Oracle从入门到精通教程_数据库实战精讲 本套Java视频教程详细讲解了MySQL的相关知识,包括MySQL概述,MySQL应用环境,MySQL系统特性,MySQL初学基础,MySQL管理工具,如何安装MySQL及MySQL新特性,通过观看本套Java视频教程就可掌握MySQL全套知识。... 阅读详情

相关推荐

软考 SQL 与 2PL 真题精讲:3类事务并发控制与恢复场景分析

本文深入解析软考数据库系统工程师下午题中的SQL与两段锁协议(2PL)结合考点,涵盖游标事务、事务调度与可串行化验证、基于检查点的故障恢复三大场景。通过真题案例和详细步骤,帮助考生掌握并发控制与恢复的核心技术,提升解题效率。

weixin_31528001的博客 242

ORACLE进阶(三)存储过程|游标|触发器|SQL语句块精讲

ORACLE进阶(三)存储过程|游标|触发器|SQL语句块精讲 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。 迷之疑问——存储过程到底是干嘛用的? 存储过程到底是干嘛用的...

编程技术分享,Java后端、Vue前端 589

PL/SQL语法参考实例精讲与实战应用

PL/SQL的变量系统设计严谨,支持从简单标量类型到复杂记录结构的多种数据表达方式。合理使用这些类型不仅能增强代码的语义清晰度,还能有效避免类型转换错误和运行时异常。本节重点分析标量类型的声明方法、特殊类型的适用场景,以及%TYPE和%ROWTYPE属性带来的动态类型优势。

weixin_42627459的博客 1099

DAY3:PL/SQL编程入门实战精讲

PL/SQL(Procedural Language extensions to SQL)是Oracle数据库对SQL的过程化扩展,支持封装逻辑、流程控制、异常处理等高级特性。高性能:通过减少应用与数据库的交互次数,支持批量操作(如BULK COLLECT),显著提升数据处理效率。模块化:通过存储过程、函数、包等程序单元封装业务逻辑,实现代码复用。可维护性:支持分层设计和版本控制,便于团队协作开发。安全性:在数据库层实现业务规则校验,防止非法数据侵入。事务控制。

java2cy 811

Oracle 11g PL/SQL基础入门与实战精讲

PL/SQL(Procedural Language/SQL)是Oracle数据库提供的过程化SQL扩展语言,它结合了SQL的强大性和传统编程语言的流程控制、变量声明、错误处理等特性。PL/SQL旨在提高Oracle SQL语言的数据处理能力,允许开发者在数据库服务器端执行复杂的逻辑处理。在PL/SQL中,变量是用于存储数据的基本单元。声明变量时,必须指定其数据类型,这样编译器才能知道如何处理数据。变量的声明格式如下:是变量的名称,必须以字母或下划线开头,遵循标识符命名规则。

weixin_30700095的博客 1224

BBS实战项目中的PLSQL编程精讲第四讲

PL/SQL(Procedural Language/SQL)是Oracle公司推出的过程化SQL扩展语言,广泛应用于数据库编程和服务器端逻辑处理。它继承了SQL强大的数据操作能力,并增加了一系列编程语言的控制结构,如条件判断、循环控制、异常处理等,为数据库应用开发提供了便利。在PL/SQL编程中,变量是存储信息的内存位置,可以在程序中对其进行读取和修改。变量的定义包括变量名和变量类型,作用域指的是变量能够被访问和修改的程序区域。PL/SQL中变量的作用域通常受限于声明它的块、过程或函数内部。

weixin_42610010的博客 620

《Oracle PL/SQL实例精讲》学习笔记13——游标 (高级概念)

这章的主要内容有: 1. 带参数游标 2. 游标的嵌套 3. For update (of)和where current of游标   代码如下: -- *** Chapter Exercises *** -- -- For Example ch12_2.sql SET SERVEROUTPUT ON /* Formatted on 2018/11/6 2:34:30 (QP5 v...

预见未来to50的专栏 304

Oracle ProC/C++编程源代码及应用实践

本文还有配套的精品资源,点击获取 简介:Oracle ProC/C++编程是一种将C++语言与Oracle数据库结合的技术,适用于编写数据库操作相关的存储过程、函数等。Oracle 11g版本对ProC/C++的支持加强,允许开发者利用C++的性能优势。本课程内容包括ProC语法、绑定变量、游标操作、异常处理、类型映射、预编译和编译过程、动态链接库生成、性能优化,以及Ora...

weixin_36001279的博客 1463

Oracle数据库核心语法精讲:从SQL基础到PL/SQL编程实战

数据库管理系统是现代信息系统的核心组件,负责数据的存储、管理和高效访问。其工作原理基于结构化查询语言(SQL)实现对数据的增删改查操作,并通过事务机制保证数据的一致性与完整性。掌握扎实的数据库技术对于构建稳定、高性能的应用具有重要价值,尤其在数据密集型应用场景中,如企业级ERP、金融交易系统等。本文聚焦于Oracle数据库这一主流商业数据库,深入解析其核心SQL语法规范、PL/SQL编程基础以及日常开发中的实用技巧,旨在帮助开发者规避常见错误,提升代码质量与执行效率。文中将结合ORA-28547等典型连接错

weixin_32520095的博客 369

保姆级教程:用CST 2023一步步复现一个1-8GHz Vivaldi天线(含参数优化与结果分析)

本文提供了一份详细的CST 2023教程,指导读者如何从零开始设计并优化1-8GHz Vivaldi天线。内容涵盖工程设置、参数化建模、仿真加速技巧以及性能优化策略,特别适合需要实现宽带天线设计的工程师和研究人员。通过实战案例,帮助用户掌握Vivaldi天线的核心设计要点和CST高级功能应用。

weixin_30800987的博客 619

ISP Tuning实战指南:从基础到高级的色彩与亮度优化

本文详细介绍了ISP Tuning的基础概念与高级调优技术,包括黑电平校正(BLC)、自动白平衡(AWB)、色彩校正矩阵(CCM)和Gamma曲线调整等核心算法。通过实战案例和调试技巧,帮助工程师提升摄像头成像质量,解决高光过曝、暗部噪点等常见问题,适用于智能门铃、车载摄像头等多种场景。

weixin_30879169的博客 110

MYSQL数据库入门学习

MySQL是整个IT基础课程,SQL贯穿整个IT人生,俗话说,SQL写的好,工作随便找。 MySQL 是最流行的关系型数据库之一,广泛的应用在各个领域。本课程主要讲解了MySQL中的常见对象,并详细讲解了优化策略,并通过案例使我们深入理解SQL优化策略,学习完本课程使我们能够独立自主的完成各种SQL优化,提升系统的性能。 那如何学习MySQL呢? 入门到精通一站式学习: 最新MySQL知识精讲+mysql实战案例_零基础mysql入门到高级全套教程 资料笔记链接:https://pan.baidu.com/

Aa112233aA1的博客 547

金蝶云苍穹-插件开发(一)加载数据

此系列博客是进行金蝶云苍穹开发时的插件开发的教程,一是在明年要是还要参加软件杯金蝶A6赛题的话,可以看此系列教程的博客来进行复习,同时如果要是我实验室的学弟学妹要参加的话,我这个系列的博客可以给他们提供学习参考,因为插件开发学习的路上很艰难,我学习的时候,能参照的讲解少,要花费大量工夫去猜测去调试才能学会那些语法。在插件开发上,希望我这个系列的博客能帮助到别人。这个系列的博客只专门讲解插件开发,基本的那些金蝶云苍穹的知识点在这里不多作讲解。

二狗mao的博客 3590

27、Python 数据库操作入门(SQLite)从基础到实战精讲

本文针对Python操作SQLite数据库进行系统化讲解,涵盖**连接管理、游标控制、CRUD操作、事务处理、SQL注入防护**等核心内容。通过学生信息管理系统案例,演示实际开发场景中的技术应用,并提供索引优化、备份恢复等高级技巧。读者将掌握安全高效的数据库操作范式,并具备解决复杂业务需求的能力。

朗朗的博客 840

【机器学习】实验3,贝叶斯垃圾邮件识别(完整代码实现+报告)

电子邮件是互联网的一项重要服务,在大家的学习、工作和生活中会广泛使用。但是大家的邮箱常常被各种各样的垃圾邮件填充了。有统计显示,每天互联网上产生的垃圾邮件有几百亿近千亿的量级。因此,对电子邮件服务提供商来说,垃圾邮件过滤是一项重要功能。而朴素贝叶斯算法在垃圾邮件识别任务上一直表现非常好,至今仍然有很多系统在使用朴素贝叶斯算法作为基本的垃圾邮件识别算法。本次实验数据集来自的中文垃圾邮件数据集,目录解压后包含三个文件夹,其中data目录下是所有的邮件(未分词),已分词好的邮件在data_cut目录下。

高丽大学人工智能硕士在读|专注大模型、RAG、OCR与AI工程实践 5031

Claude Code本地Windows安装教程

本文介绍了在Windows系统上安装和配置Claude Code本地调用的详细步骤。首先需要确保网络畅通和账号余额充足,然后安装Node.js v22版本作为基础环境。接着通过npm全局安装Claude Code包,并进行版本验证。安装完成后,使用命令行登录并可以指定模型启动。最后还提供了切换API秘钥的方法,通过setup-token命令重新授权账号。整个过程配有详细的命令行示例和操作截图,方便用户按步骤完成安装配置。

猿小白的博客 2万+

MySQL 存储过程精讲

在实际开发中,程序员相较于 DBA 来说,对数据库的理解不是特别的深。存储过程相比于一般的 SQL,可以做复杂的逻辑判断,实现更加复杂表操作,比如根据一张表的数据去更新另一张表的数据、多张表数据比较结果等。本文将对 MySQL 的存储过程从零开始讲解,结合实际案例,让你从入门到实际运用;主要包括下面几部分: 存储过程的基本结构 存储过程的变量、参数 存储过程的条件、循环语句 存储过程的游标使用 ...

GitChat 445

论文翻译:Automatic Lesson Plan Generation via Large Language Models with Self-critique Prompting

在本文中,我们利用大型语言模型(LLMs)的理解和生成能力来自动生成定制化的课程计划。这解决了传统计划可能无法充分满足不同教学环境和学生群体的特定需求的常见挑战。我们提出了一个新颖的三阶段过程,包括使用检索增强生成(RAG)逐步生成课程计划的每个关键组成部分,通过LLMs进行自我批评,以及随后的细化。我们使用这种方法为小学2至5年级生成了涵盖80多个主题的数学课程计划。邀请了三位经验丰富的教育工作者制定全面的课程计划评估标准,然后使用这些标准将我们的LLM生成的课程计划与同一主题的实际课程计划进行基准比较。

CSPhD-winston的博客 1103

Oracle 19c 隐式游标超全详解:彻底规避FOR UPDATE死锁与长锁血案(业务系统取号实战)

本文系统讲解了Oracle隐式游标在企业级开发中的核心应用。隐式游标由Oracle自动管理生命周期,通过SQL%属性获取执行状态,相比显式游标更简洁高效。重点分析了传统FOR UPDATE加锁方案的缺陷(长锁阻塞、死锁风险),并提出基于隐式游标+UPDATE RETURNING的原子操作方案,实现短锁、高并发的业务处理。文中详细演示了生产级单据取号存储过程,涵盖动态SQL、异常处理、重试机制等实战技巧,为高并发场景提供了优化方案。最后总结了隐式游标的使用要点和避坑指南,强调其在高性能PL/SQL开发中的核心

weixin_42767242的博客 505

远程声控系统(MATLAB代码见优快云资源)

远程声控系统技术报告 一、题目要求 实现一个远程声音控制系统。首先采集不同的语音指示信号,进行适当压缩;然后通过噪声信道实现远程传输,远端接收后再通过适当计算识别出是何指示,最后送入一个处于未知状态、但能控/能观的控制系统,完成不同的控制动作。 二、问题分解与解决思路 2.1 系统设计 实验中以汉语数字语音1~9作为指令,数字语音“1”代表一号指令,数字语音“2”代表二号指令,依次类推。发送端发出语音“1”,发送端对应的数字语音文件为“1b.wav”,通过信源编码对语音进行压缩编码,然后进行信道编码并进行基

业精于勤,荒于嬉 5736

3D 结构光相机工作原理全解 | 从编码投射到三维重建,原理 + 代码 + 工业实战一站式掌握

本文从3D结构光相机的整体架构出发,层层拆解了编码投射、相位计算、相位解包裹、三维重建的核心原理,补充了工业实战所需的公式推导、代码实现、参数调优、设备选型和案例落地,核心总结如下:相位是3D结构光成像的“灵魂”,其精度、稳定性直接决定3D重建的效果,包裹相位与绝对相位的区分的是工业实战的基础;编码投射的核心是“正弦条纹+格雷码条纹”组合,正弦条纹负责高精度相位提取,格雷码条纹辅助解包裹,适配工业场景的精度与稳定性需求;

getusushu的博客 418

带游标的存储过程的使用

老大布置了个任务,将一个表中几个字段同步到另一个表。 第一想法是去公司图书馆找相关的书,七翻八翻找到《Oracle PL/SQL实例精讲》一书,如获至宝,昼夜读之,大有收获。 于是乎,一边翻书,一边百度,一边代码,历时两天,终于完成。 表结构如下 wawa表 ID userName userAge userNumber SYNC_FLAG 1 vvin

1198

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

数据库系统核心原理与应用实战精讲

本文深入解析数据库系统核心原理与应用实战,涵盖SQL优化、关系代数、范式设计、事务管理等关键技术。通过电商平台等实际案例,展示如何运用索引优化、并发控制等技术提升系统性能,帮助开发者掌握数据库设计与调优的实用技巧。

weixin_34387468的博客 419

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Oracle数据库精讲(八)PLSQL、光标、例外

PLSQL:可以对SQL进行编程。 开发工具: plsql developer oracle sql developer plsql: set serveroutput on; declare --定义变量、常量、光标(游标)、例外(自定义异常) psex char(3) := '男'; pname varchar2(10) (也可以不写死,emp.ename%type) ; emp_info emp%rowtype; begin //写代码 select ename into pname

深海的鱼 201

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

MySQL 8.0 存储过程实战:12个实验案例解析参数、游标与异常处理

本文通过12个实验案例详细解析MySQL 8.0存储过程的核心技术,包括参数传递、游标操作与异常处理。内容涵盖数据库系统开发中的存储过程基础、多表关联查询、数据更新操作、动态SQL构建等实战技巧,帮助开发者提升数据库编程效率与安全性。每个案例均提供完整代码实现与执行演示,适合中高级数据库开发人员学习参考。

dfdfadsf3443的博客 468

第02篇:SQL 基础精讲与 Java JDBC / JPA 全景实战(含 N+1、批量写入优化)

本文系统讲解 SQL 的实际执行顺序(与书写顺序不同)、JOIN 的连接语义差异、GROUP BY 的聚合行为,帮你彻底理解"为什么 WHERE 里不能用别名"、"LEFT JOIN 里 ON 和 WHERE 的过滤差异"等经典困惑。Java 侧覆盖 JDBC 原生批量写入、MyBatis-Plus 复杂查询边界、Spring Data JPA 自定义查询最佳实践,以及 N+1 问题的完整诊断与修复方案。

qq_23625847的博客 379
上一篇: 【SQL索引设计黄金法则】:揭秘高效查询背后的5大设计原则
下一篇: 函数式编程从入门到精通,Scala中不可错过的7个经典编码范式
IterStream
博客等级 码龄1年 152粉丝 2112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值