PL/SQL 异常处理
目录
一、命名的系统异常
1.常见命名的系统异常
2.预定义的系统异常数量以及描述
3.处理命名的系统异常的一般步骤
二、程序员定义的异常
1.概念
2.自定义异常的定义与抛出
3.自定义异常的处理
三、未命名的系统异常
1.概述
2.处理未命名的系统异常的方法
3.使用场景
四、未命名的程序员自定义的异常
1.概述
2.作用
3. 使用方法及示例
未命名的程序员自定义异常与程序员定义异常的区别
1.声明与抛出
2.错误代码和信息
3.使用场景
引言
在设计PL/SQL程序时,经常会发生这样或者那样的错误,异常处理就是针对错误进行处理的程序段,Oracle中的异常处理分为系统预定义异常处理和自定义异常处理两部分。
异常的类型大概分为四类:
1.命名的系统异常
2.程序员定义的异常
3.未命名的系统异常
4.未命名的程序员定义的异常
一、命名的系统异常
命名的系统异常是Oracle数据库为了处理常见的错误情况而预定的一组异常。它们由Oracle数据库在特定条件下自动抛出,开发者就可以在PL/SQL程序中通过异常机制来捕获和处理这些异常。
1.常见命名的系统异常
NO_DATA_FOUND
错误代码:ORA-01403
错误描述:当执行SELECT INTO语句时,如果没有返回任何数据,就会抛出此异常。
示例:
DECLAREv_name varchar(10);
BEGINSELECT s_name INTO v_name from Students WHERE s_id = '001';
EXCEPTIONWHEN NOT_DATA_FOUND THENDBMS_OUTPUT.PUT_LINE('未找到编号为001的学生');
END;
TOO_MANY_ROWS
错误代码:ORA-01422
描述:当执行SELECT INTO语句时,如果返回多行,则会抛出异常。
示例:
DECLAREv_name varchar(10);
BEGINSELECT s_name INTO v_name from Students WHERE s_id = '001';
EXCEPTIONWHEN TOO_MANY_ROWS THENDBMS_OUTPUT.PUT_LINE('有多个编号为001的学生');
END;
2.预定义的系统异常数量以及描述
数量:大约24种。
| 异常名称 | 异常编号(SQLCODE) | 描述 |
|---|---|---|
| ACCESS_INTO_NULL | -6530 | 尝试为未初始化的对象属性赋值时触发。 |
| CASE_NOT_FOUND | -6592 | CASE语句中没有匹配的WHEN子句且没有设置ELSE子句时触发。 |
| COLLECTION_IS_NULL | -6531 | 尝试使用未初始化的集合元素时触发。 |
| CURSOR_ALREADY_OPEN | -6511 | 尝试打开一个已经打开的游标时触发。 |
| DUP_VAL_ON_INDEX | -1 | 尝试插入或更新数据时,唯一索引对应的列上有重复的值时触发。 |
| INVALID_CURSOR | -1001 | 尝试使用无效的游标时触发。 |
| INVALID_NUMBER | -1722 | 尝试将字符转换为数字失败时触发。 |
| LOGIN_DENIED | -1017 | 尝试使用无效的用户名或密码登录Oracle数据库时触发。 |
| NO_DATA_FOUND | -1403 | SELECT INTO语句未返回任何数据时触发。 |
| NOT_LOGGED_ON | -1012 | 尝试在未登录的情况下访问Oracle数据库时触发。 |
| PROGRAM_ERROR | -6501 | PL/SQL内部错误,可能需要重装数据字典或PL/SQL系统包时触发。 |
| ROWTYPE_MISMATCH | -6504 | 宿主游标变量与PL/SQL游标变量的返回类型不兼容时触发。 |
| SELF_IS_NULL | -(无固定编号) | 使用对象类型时,在NULL对象上调用对象方法时触发。 |
| STORAGE_ERROR | -6500 | 运行PL/SQL时,超出内存空间或内存被破坏时触发。 |
| SUBSCRIPT_BEYOND_COUNT | -6533 | 尝试访问嵌套表或VARRAY时,元素下标超出最大值时触发。 |
| SUBSCRIPT_OUTSIDE_LIMIT | -6532 | 使用嵌套表或VARRAY时,元素下标为负数时触发。 |
| SYS_INVALID_ID | -1410 | 尝试使用无效的ROWID字符串时触发。 |
| TIMEOUT_ON_RESOURCE | -51 | 等待资源时超时触发。 |
| TOO_MANY_ROWS | -1422 | SELECT INTO语句返回多行时触发。 |
| VALUE_ERROR | -6502 | 赋值时,变量长度不足以容纳实际数据时触发。 |
| ZERO_DIVIDE | -1476 | 尝试执行除数为零的除法运算时触发。 |
| CURSOR_IS_OPEN | -(非标准,示例) | 尝试在游标已打开的情况下进行非法操作(如重复打开)时触发。 |
| COLLECTION_IS_LOCKED | -(非标准,示例) | 尝试访问已锁定的集合元素时触发。 |
| INVALID_TRANSACTION | -(非标准,示例) | 尝试执行无效的事务操作时触发。 |
| NETWORK_ERROR | -(非标准,示例) | 网络通信错误时触发。 |
说明:
-
异常编号(SQLCODE):Oracle数据库为每种异常分配了一个唯一的错误编号(SQLCODE),用于标识该异常。在异常处理中,可以通过捕获异常编号来判断具体的错误类型。
-
异常名称:Oracle数据库为每种异常提供了一个名称,便于开发人员在代码中引用和处理。
-
描述:简要说明了触发每种异常的条件和场景。
-
非标准异常:上述列表中最后几种异常(如CURSOR_IS_OPEN、COLLECTION_IS_LOCKED、INVALID_TRANSACTION、NETWORK_ERROR)是示例性的,用于说明可能的异常类型,并非Oracle数据库标准预定义的异常。实际开发中,这些异常可能需要开发人员根据业务需求自定义。
-
异常处理:在PL/SQL程序中,可以通过
EXCEPTION块来捕获和处理这些预定义异常,以确保程序的健壮性和可靠性。
3.处理命名的系统异常的一般步骤
捕获异常:在PL/SQL程序中,使用EXCEPTION块来捕获可能抛出的命名系统异常。
处理异常:在捕获到异常后,执行相应的处理逻辑,如输出错误信息、记录日志、回滚事务等。
继续执行或者退出程序:根据需求,决定是继续执行后续代码还是退出程序。一旦进EXCEPTION块,后续的代码(指在BEGIN ... END块中EXCEPTION部分之后的代码)将不会被执行。(这过程简直和Java一摸一样)
示例:
DECLAREv_error_occurred BOOLEAN := FALSE;--变量v_error_occurred用于跟踪是否发生了错误,以便在后续代码中采取适当的操作。
BEGIN-- 尝试执行一些可能引发异常的代码BEGIN-- 这里是可能抛出异常的代码RAISE NO_DATA_FOUND; -- 示例异常EXCEPTIONWHEN NO_DATA_FOUND THENDBMS_OUTPUT.PUT_LINE('No data found, continuing with the next step.');v_error_occurred := TRUE; -- 标记错误已发生END;-- 后续的代码,无论是否发生异常都会执行IF v_error_occurred THENDBMS_OUTPUT.PUT_LINE('An error occurred, but we are continuing with the process.');END IF;DBMS_OUTPUT.PUT_LINE('This is the subsequent code that will always be executed.');-- 更多的后续代码...
END;
二、程序员定义的异常
1.概念
自定义异常是程序员根据业务逻辑需求,在PL/SQL程序中显示声明的异常。当程序中出现特定条件时,程序员可以显式地抛出这些自定义异常,并在异常处理部分(EXCEPTION)进行捕获和处理。
2.自定义异常的定义与抛出
定义异常:在块声明部分,使用DECLARE关键字声明异常
DECLAREmy_custom_exception EXCEPTION;
抛出异常:在程序执行部分,使用RAISE语句抛出自定义异常。
BEGINIF condition THENRAISE my_custom_exception;END IF
3.自定义异常的处理
捕获异常:在EXCEPTION块中,使用WHEN...TEHN语句捕获并处理自定义异常。
EXCEPTION WHEN my_custom_exception THENDBMS_OUTPUT.PUT_LINE('自定义异常被触发');--处理异常,记录日志,事务回滚等
END
与其他异常一起处理:在EXCEPTION块中,程序员可以捕获和处理多种异常,包括预定义异常和自定义异常。
EXCEPTIONWHEN NO_DATA_FOUND THENDBMS_OUTPUT.PUT_LINE('未找到数据');WHEN my_custom_exception THENDBMS_OUTPUT.PUT_LINE('自定义异常被触发');WHEN OTHERS THENDBMS_OUTPUT.PUT_LINE('发生其他异常: ' || SQLERRM);
OTHERS子句用于捕获和处理所有未显式捕获的异常。
三、未命名的系统异常
在PL/SQL中,未命名的系统异常是指那些由Oracle数据库系统内部产生的、没有预定义异常名称的错误。这些异常通常以错误代码(Oracle错误号)的形式出现,而没有与之直接对应的异常名。为了处理这些未命名的系统异常,PL/SQL提供了相应的机制和语法。
1.概述
未命名的系统异常通常是由于违反Oracle数据库的内部规则或系统限制而产生的。这些异常没有预定义的异常名称,但Oracle数据库为每个异常分配了一个唯一的错误代码(Oracle错误号)。例如,当尝试删除一个具有子记录的父表记录时,Oracle会抛出错误代码为-2292的未命名系统异常。
2.处理未命名的系统异常的方法
声明异常名称:使用EXCEPTION关键字声明一个自定义的异常名称。
DECLAREchild_record_exception EXCEPTION
将异常名称与错误代码关联:使用PRAGMA EXCEPTION_INT伪指令将自定义的异常名称与未命名的系统异常的错误代码关联起来。
PRAGMA EXCEPTION_INIT(child_record_exception, -2292);
在异常处理部分捕获异常:
在PL/SQL块的异常处理部分,使用WHEN关键字捕获自定义的异常名称,并执行相应的处理逻辑。
BEGIN-- 执行可能导致异常的操作,例如删除具有子记录的父表记录DELETE FROM parent_table WHERE id = 1;
EXCEPTIONWHEN child_record_exception THENDBMS_OUTPUT.PUT_LINE('无法删除父记录,因为存在子记录。');
END;
完整示例
DECLAREchild_record_exception EXCEPTION;PRAGMA EXCEPTION_INIT(child_record_exception, -2292);
BEGIN-- 尝试删除一个具有子记录的父表记录DELETE FROM departments WHERE department_id = 10;
EXCEPTIONWHEN child_record_exception THENDBMS_OUTPUT.PUT_LINE('无法删除父记录,因为存在子记录。');WHEN OTHERS THENDBMS_OUTPUT.PUT_LINE('发生其他异常:' || SQLERRM);
END;
3.使用场景
-
处理特定的系统错误:Oracle数据库在运行时会产生各种系统错误,这些错误通常以错误代码的形式出现,而没有与之直接对应的异常名。例如,当尝试删除一个具有子记录的父表记录时,Oracle会抛出错误代码为
-2292的系统错误。为了处理这种特定的系统错误,可以使用未命名的系统异常。 -
增强代码的可读性和可维护性:通过为未命名的系统异常定义一个明确的异常名称,并使用
PRAGMA EXCEPTION_INIT伪指令将其与错误代码关联起来,可以使代码更加清晰易懂。这样,在异常处理部分,就可以直接使用自定义的异常名称,而不需要记住复杂的错误代码。 - 实现更细粒度的异常处理:在PL/SQL中,可以使用
WHEN OTHERS子句来捕获所有未捕获的异常。然而,这种方式过于笼统,可能无法准确地定位问题。通过为特定的系统错误定义未命名的系统异常,可以实现更细粒度的异常处理,从而更好地定位问题并采取适当的解决措施。
四、未命名的程序员自定义的异常
1.概述
RAISE_APPLICATION_ERROR 在 Oracle PL/SQL 中用于引发用户自定义的异常。它主要用于在应用程序中主动抛出自定义的错误代码和错误消息,以便更好地处理异常情RAISE_APPLICATION_ERROR 引发的是用户自定义的异常。 这种异常不是由 Oracle 系统自动抛出的,而是由开发人员根据业务需求,在 PL/SQL 代码中显式抛出的。
2.作用
提供详细的错误信息:RAISE_APPLICATION_ERROR 允许开发人员自定义错误代码和错误消息。这样,当异常被抛出时,调用程序可以接收到更详细、更有意义的错误信息,而不是仅仅依赖于 Oracle 的标准错误消息。
增强错误处理灵活性:通过引发自定义异常,开发人员可以更灵活地控制错误处理流程。例如,可以在不同的业务逻辑分支中抛出不同的异常,以便调用程序根据异常类型采取相应的处理措施。
提高程序的可维护性:使用 RAISE_APPLICATION_ERROR 可以将错误处理逻辑与业务逻辑分离,使得程序更加清晰易读。同时,自定义的异常处理机制也便于后续的代码维护和升级。
3. 使用方法及示例
基本语法
RAISE_APPLICATION_ERROR(error_number,error_message [, kee_error]);
-
error_number:自定义的错误代码,必须是一个介于 -20000 和 -20999 之间的整数。这个范围内的错误代码不会与 Oracle 的保留错误代码冲突。
-
error_message:自定义的错误消息,是一个字符串。该消息的长度不应超过 2048 个字符。它将被传递给调用程序,以便调用程序了解异常的具体原因。
-
keep_errors(可选):这是一个布尔值参数,用于指示是否将当前的错误堆栈信息包含在异常中。在 Oracle 12c 及更高版本中引入。如果设置为
FALSE(默认值),则当前的错误信息会替换已有的错误堆栈。如果设置为TRUE,则当前的错误信息会被添加到已有的错误堆栈中。
使用示例
假设我们有一个存储过程,用于检查员工的薪水是否低于某个最低值。如果薪水低于最低值,则使用 RAISE_APPLICATION_ERROR 抛出异常:
CREATE OR REPLACE PROCEDURE check_salary (p_emp_id IN NUMBER, p_min_salary IN NUMBER) ISv_salary NUMBER;
BEGIN-- 查询员工薪水SELECT salary INTO v_salary FROM employees WHERE employee_id = p_emp_id;-- 检查薪水是否低于最低值IF v_salary < p_min_salary THEN-- 抛出自定义异常RAISE_APPLICATION_ERROR(-20001, 'Employee salary is below the minimum required.');END IF;EXCEPTIONWHEN NO_DATA_FOUND THEN-- 处理未找到员工数据的情况RAISE_APPLICATION_ERROR(-20002, 'Employee ID not found.');
END;
未命名的程序员自定义异常与程序员定义异常的区别
1.声明与抛出
- 自定义异常需要先声明,然后才能抛出。声明是在 PL/SQL 块的声明部分进行的,而抛出是在执行部分进行的。
RAISE_APPLICATION_ERROR则不需要事先声明异常,它直接在执行部分抛出自定义的错误代码和消息。
2.错误代码和信息
- 自定义异常本身不包含错误代码和消息,这些需要在抛出异常时通过其他方式(如注释或文档)进行说明。
RAISE_APPLICATION_ERROR则直接包含了错误代码和消息,使得异常信息更加完整和直观。
3.使用场景
- 自定义异常更适合用于处理那些与 Oracle 系统错误无关的业务逻辑错误,例如数据验证失败、业务规则违反等。
RAISE_APPLICATION_ERROR则更适合用于处理那些需要自定义错误代码和消息的异常情况,例如当应用程序需要向用户显示特定的错误消息时。
相关文章:
PL/SQL 异常处理
目录 一、命名的系统异常 1.常见命名的系统异常 2.预定义的系统异常数量以及描述 3.处理命名的系统异常的一般步骤 二、程序员定义的异常 1.概念 2.自定义异常的定义与抛出 3.自定义异常的处理 三、未命名的系统异常 1.概述 2.处理未命名的系统异常的方法 3.使用场景 …...
【自学笔记】Spring Boot框架技术基础知识点总览-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Spring Boot框架技术基础知识点总览一、Spring Boot简介1.1 什么是Spring Boot?1.2 Spring Boot的主要特性 二、Spring Boot快速入门2.1 搭建Spring Boo…...
Redis 缓存穿透、击穿、雪崩:问题与解决方案
在使用 Redis 作为缓存中间件时,系统可能会面临一些常见的问题,如 缓存穿透、缓存击穿 和 缓存雪崩。这些问题如果不加以解决,可能会导致数据库压力过大、系统响应变慢甚至崩溃。本文将详细分析这三种问题的起因,并提供有效的解决…...
第一个CMAKE项目hello cmake
#注意! 这篇文章是为WINDWOS用户写的 #请检查你的电脑上已经安装了MINGW和CMAKE 快速检查方法如下 C:\Users\Basicoperation>g --version g (x86_64-win32-seh-rev1, Built by MinGW-Builds project) 14.2.0 Copyright (C) 2024 Free Software Foundation, Inc. …...
骶骨神经
骶骨肿瘤手术后遗症是什么_39健康网_癌症 [健康之路]匠心仁术(七) 勇闯禁区 骶骨肿瘤切除术...
基于Django的购物商城平台的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
摘要 当今社会进入了科技进步、经济社会快速发展的新时代。国际信息和学术交流也不断加强,计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考方式也产生了变化。传统购物管理采取了人工的管理方法,但这种管理方法存…...
使用快捷键高效管理 VSCode:提升工作效率,告别鼠标操作
如果你想提高工作效率,减少鼠标操作,掌握键盘快捷键是一个非常有效的方式。在编程过程中,熟练使用快捷键能够快速管理文件、标签页,节省时间并提升效率。比如,Ctrl P 和 Ctrl W 可以快速打开和关闭文件,而…...
【找工作】C++和算法复习(自用)
文章目录 C头文件自定义排序函数stl 算法数据结构树状数组 数学 自用随便记录 C 排序 stl 头文件 全能头文件: #include<bits/stdc.h>自定义排序函数 bool compare(const int &odd1,const int &odd2) {return odd1>odd2; }stl 枚举map map&…...
大语言模型基础
简介 AI大模型是“人工智能预训练大模型”的简称,包含了“预训练”和“大模型”两层含义,二者结合产生了一种新的人工智能模式,即模型在大规模数据集上完成了预训练后无需微调,或仅需要少量数据的微调,就能直接支撑各类应用。AI大模型主要分为三类:大语言模型、CV大模型…...
深入浅出机器学习:概念、算法与实践
目录 引言 机器学习的基本概念 什么是机器学习 机器学习的基本要素 机器学习的主要类型 监督学习(Supervised Learning) 无监督学习(Unsupervised Learning) 强化学习(Reinforcement Learning) 机器…...
2024年国赛高教杯数学建模A题板凳龙闹元宵解题全过程文档及程序
2024年国赛高教杯数学建模 A题 板凳龙闹元宵 原题再现 “板凳龙”,又称“盘龙”,是浙闽地区的传统地方民俗文化活动。人们将少则几十条,多则上百条的板凳首尾相连,形成蜿蜒曲折的板凳龙。盘龙时,龙头在前领头&#x…...
老游戏回顾:d2
游戏中玩家创建属于自己的角色,在一片片暗黑大地上奔跑、杀敌、寻宝、成长,最终打败统治各个大陆的黑暗势力,拯救游戏中的各个种族。 《暗黑破坏神II》的制作团队包括编程小组、运动物体制作小组和背景制作小组。游戏设计很大程度上是开放的&…...
【深度学习】Pytorch的深入理解和研究
一、Pytorch核心理解 PyTorch 是一个灵活且强大的深度学习框架,广泛应用于研究和工业领域。要深入理解和研究 PyTorch,需要从其核心概念、底层机制以及高级功能入手。以下是对 PyTorch 的深入理解与研究的详细说明。 1. 概念 动态计算图(D…...
什么是 Vue 的自定义事件?如何触发和监听?
Vue 的自定义事件详解 什么是自定义事件? 在 Vue 中,自定义事件是组件之间通信的重要机制。自定义事件允许子组件向父组件发送消息,通常用于处理用户交互或异步操作的结果。这种机制使得组件间的通信更加灵活和解耦。 自定义事件的基本概念…...
windows上vscode cmake工程搭建
安装vscode插件: 1.按装fastc(主要是安装MinGW\mingw64比较方便) 2.安装C,cmake,cmake tools插件 3.准备工作完成之后,按F1,选择cmake:Quick Start就可以创建一个cmake工程。 4.设置Cmake: G…...
DEMF模型赋能多模态图像融合,助力肺癌高效分类
目录 论文创新点 实验设计 1. 可视化的研究设计 2. 样本选取和数据处理 3. 集成分类模型 4. 实验结果 5. 可视化结果 图表总结 可视化知识图谱 在肺癌早期筛查中,计算机断层扫描(CT)和正电子发射断层扫描(PET)作为两种关键的影像学手段,分别提供了丰富的解剖结构…...
Android:权限permission申请示例代码
Android应用项目每次最开始都要进行权限申请,贴一下权限申请的示例代码,方便后续Ctrl CV使用 1.AndroidManifest.xml 配置要申请的权限 <uses-permission android:name"android.permission.READ_CONTACTS" /> <uses-permission and…...
AI Agent Service Toolkit:一站式大模型智能体开发套件
项目简介 该工具包基于LangGraph、FastAPI和Streamlit构建,提供了构建和运行大模型Agent的最小原子能力,包含LangGraph代理、FastAPI服务、用于与服务交互的客户端以及一个使用客户端提供聊天界面的Streamlit应用。用户可以利用该工具包提供的模板快速搭建基于LangGraph框架…...
大数据SQL调优专题——Hive执行原理
引入 Apache Hive 是基于Hadoop的数据仓库工具,它可以使用SQL来读取、写入和管理存在分布式文件系统中的海量数据。在Hive中,HQL默认转换成MapReduce程序运行到Yarn集群中,大大降低了非Java开发者数据分析的门槛,并且Hive提供命令…...
Python程序打包 |《Python基础教程》第18章笔记
《Python基础教程》第1章笔记👉https://blog.csdn.net/holeer/article/details/143052930 第18章 程序打包 程序可以发布后,你可能想先将它打包。如果程序只包含一个.py文件,这可能不是问题。然而,如果用户不是程序员࿰…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...
