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

PL/SQL 安装配置与使用

目录

一、安装与配置

(一)下载PLSQL Developer

(二)下载并配置免安装Oracle客户端

1. 下载Instantclient_11_2

2. 配置环境

(1)配置电脑的环境变量

(2)配置PLSQL Developer的环境变量

3. 配置PLSQL的Oracle数据库链接

二、objects 说明

(一)Tables、Views

(二)Packages、package bodies、Procedures

(三)Function、Types

(四)DBMS_Jobs

        查看所有job任务:

        终止某个job任务:

        开启某个job任务:

        终止所有job任务:

        开启所有job任务:

        注意:

(五)查询存储过程、函数或包体中是否引用某内容

三、基础设置

(一)快捷键

1. 快捷键设置

2. 快捷键说明

(二)记住登录密码

(三)关键字自动大写

(四)SQL Windows显示行号

(五)解决软件过期

(六)解决执行时的问题弹窗

四、包和包体

呈现方式:

作用:

使用:

1. 查看

2. 拷贝

五、procedure 存储过程

(一)定义(创建)

1. 组成

2. 写法(未涉及包和包体)

3. 写法(涉及包和包体)

(1)创建包(内含procedure定义)

(2)创建包体(内含procedure实现)

4. 修改

(二)知识点

1. 字符串必须用单引号括起来

2. “:=”符号

3.“||”符号

4. 在后续的Oracle SQL知识点这一篇中

六、包、存储过程的SQL查询

(一)查询名称(针对包、存储过程)

(二)查询内容(针对包、存储过程)

七、存储过程的断点调试

1. 打断点

2. 打开断点调试框

3. 输入和输出

(1)输入值

(2)输出格式

4. 开始调试

5. 查看调试过程中的变量值

(1)鼠标放在变量上,查看当前值。

(2)在下方工具栏中的Script中输入想查看的变量值

八、SQL调试

九、搜索查询


一、安装与配置

以下内容是针对PLSQL Developer 14(免安装客户端)、Oracle数据库(免安装客户端)。

(一)下载PLSQL Developer

        下载的是PLSQL Developer 14免安装包。

(二)下载并配置免安装Oracle客户端

1. 下载Instantclient_11_2

        该包是PL/SQL免安装Oracle客户端所需。

        官方链接:https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html

2. 配置环境

(1)配置电脑的环境变量

若使用免安装客户端的Oracle,需要配置环境变量。

右击此电脑 > 内容 > 新增系统变数(以下三个),并重启电脑。

变量名 变量值备注
TNS_ADMIN E:\PLSQL\Instantclient_11_2\network\admin 用于配置Oracle,以自己存放的位置为准
ORACLE_HOMEE:\PLSQL\Instantclient_11_2用于配置Oracle,以自己存放的位置为准
NLS_LANGAMERICAN_AMERICA.AL32UTF8用于配置语言
(2)配置PLSQL Developer的环境变量

用系统管理员身份打开plsqldev.exe,找到工具栏的Configure > Preferences,配置Oracle的Connection中Oracle Home和OCI library的路径,其中,

Oracle Home的配置路径是:E:\PLSQL\Instantclient_11_2

OCI library的配置路径是:E:\PLSQL\Instantclient_11_2\oci.dll

如果未配置的话,PL/SQL连数据库时会报错报Ora-12557

3. 配置PLSQL的Oracle数据库链接

        每个数据库链接,都需要在Instantclient_11_2文件夹的network\admin的tnsnames.ora文件中设置。

        首次需要新建network\admin目录,并新建tnsnames.ora文件,文件路径为:

                E:\PLSQL\Instantclient_11_2\network\admin\tnsnames.ora 。

        文件内容如下:

                以下只是配置数据库HOST和SID,而用户和密码是在打开PL/SQL软件时在登录弹出框中输入填写。

DB名=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.XX.XX.XXX)(PORT=1521)))(CONNECT_DATA=(SID=DB名)(SERVER=DEDICATED)))
DB名2=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.XX.XX.XXX)(PORT=1521)))(CONNECT_DATA=(SID=DB名2)(SERVER=DEDICATED)))

二、objects 说明

主要的objects有:

(一)Tables、Views

        作用:Views是查询另一个账户中的表数据,Tables是对Views中的数据进一步处理,存入报表数据。

(二)Packages、package bodies、Procedures

        作用:供代码调用包中的存储程序。

(三)Function、Types

        作用:供存储程序中的SQL调用。

(四)DBMS_Jobs

        作用:设置定时任务。

        查看所有job任务:

SELECT * FROM all_jobs; 或 SELECT * FROM user_jobs;

        终止某个job任务:

BEGINDBMS_JOB.BROKEN(job => job的ID, broken => TRUE);COMMIT;
END;

        开启某个job任务:

BEGINDBMS_JOB.BROKEN(job => <job_id>, broken => FALSE);COMMIT;
END;

        终止所有job任务:

BEGINFOR job IN (SELECT job FROM all_jobs WHERE broken = 'N') LOOPDBMS_JOB.BROKEN(job.job, TRUE);END LOOP;COMMIT;
END;

        开启所有job任务:

BEGINFOR job IN (SELECT job FROM all_jobs WHERE broken = 'Y') LOOPDBMS_JOB.BROKEN(job.job, FALSE);END LOOP;COMMIT;
END;

        注意:

        针对tables创建数据的SQL语句,即,使用PL/SQL执行插入SQL语句时,一定要在insert语句后加上COMMIT;。或者执行插入SQL语句后,再点击提交按钮,如下图:

(五)查询存储过程、函数或包体中是否引用某内容

SELECT owner, name,  type, line, text
FROM   all_source
WHERE  UPPER(text) LIKE '%MUSIC%'
ORDER  BY owner, name, line;

三、基础设置

(一)快捷键

1. 快捷键设置

        在工具栏的Configure > Preference > User Interface > Key Configuration中设置

2. 快捷键说明

        F8:执行SQL语句

        Ctrl+/:注释(需要先选中需要注释的句子)

        Ctrl+/+Shift:取消注释(需要先选中句子)

(二)记住登录密码

        在工具栏的Configure > Preference > Oracle > Logon History中设置,默认勾选“Store history”,还需勾选“Store with password”。

(三)关键字自动大写

        在工具栏的Configure > Preference > User Interface > Editor中设置,Keyword case选择:Uppercase。

(四)SQL Windows显示行号

        在工具栏的Configure > Preference > Window Types > SQL Window中设置,勾选show gutter(line numbers)。

(五)解决软件过期

若反复出现下图的问题:

解决办法如下:

        首先,Windows + R ,输入 regedit,打开注册表。

        再找到 HKEY_CURRENT_USER\Software\Allround Automations,删除 Allround Automations 目录。

        然后找到 HKEY_CURRENT_USER\Software\Microsoft\Security,删除 Security 目录。

        最后,重新打开软件即可。30天到期后,重复该操作。

(六)解决执行时的问题弹窗

如果在执行SQL查询时,出现如下弹窗,则提示权限不够。

可以授予该用户的V$session,V$sesstat、V$statname的权限,也可取消自动统计功能,可在工具栏 > Configure > Preferences > Oracle > Options > 取消勾选Auto statistics,点击OK。

四、包和包体

呈现方式:

作用:

        管理SQL语句、程序单元(存储过程、函数等)。

        其中包是声明接口、包体是实现接口。

使用:

1. 查看

        查看Procedure具体内容时,需要在包体名(包体,而不是包)上右击,选择View(View,而不是View Spec)进行查看。

2. 拷贝

        若想拷贝Procedure内容,可在存储过程名上右击,选择copy进行拷贝。

五、procedure 存储过程

(一)定义(创建)

1. 组成

        参数(IN、OUT)、局部变量、逻辑代码块、异常处理。

2. 写法(未涉及包和包体)

CREATE [OR REPLACE] PROCEDURE 存储过程名(/* 声明参数 */p_id IN NUMBER,  -- 输入参数、数值类型p_name IN VARCHAR2, -- 输入参数、字串类型p_date IN DATE, -- 输入参数、时间类型p_res OUT VARCHAR2 -- 输出参数、字串类型
) IS
/* 声明外部变量(在下面第一个BEGIN的内部外部中,都能使用) */
// 存储过程中不能使用declare关键字。
变量名 类型; // 比如:count number;
/* 逻辑代码块 */
BEGIN/* 声明局部变量(只能在该BEGIN的内部中使用,不能在该BEGIN外部使用) */变量名 类型; // 只是声明变量名 类型 := 默认值; // 包括赋值/* 过程体 */NULL;  -- 至少需要一个语句
/* 异常处理 */
EXCEPTIONWHEN NO_DATA_FOUND THEN  ---没有任何数据的异常--处理代码WHEN OTHERS THEN  --- 其他异常--处理代码
END 存储过程名; --也可省略存储过程名

3. 写法(涉及包和包体)

(1)创建包(内含procedure定义)
CREATE [OR REPLACE] PACKAGE 包名 ISTYPE refcur IS REF CURSOR; ---定义外部变量(包和包体都可用)-- 声明过程PROCEDURE procedure名(参数名  IN VARCHAR2,参数名  IN VARCHAR2,参数名  OUT refcur,参数名  OUT CLOB,参数名  OUT NUMBER);
END 包名;
(2)创建包体(内含procedure实现)
CREATE [OR REPLACE] PACKAGE BODY 包体名 IS-- 过程实现PROCEDURE procedure名(参数名 IN VARCHAR2,参数名 IN VARCHAR2,参数名  OUT refcur,参数名  OUT CLOB,参数名  OUT NUMBER) ISBEGINDBMS_OUTPUT.PUT_LINE('OUT RES: ');END;
END 包体名;

4. 修改

        右击包或包名 > Edit > 修改SQL语句 > 按下F8重新执行整个SQL语句,执行成功无异常即可。

(二)知识点

1. 字符串必须用单引号括起来

2. “:=”符号

        变量赋值。

3.“||”符号

        代表“连接字串”,而不是“或”。

4. 在后续的Oracle SQL知识点这一篇中

六、包、存储过程的SQL查询

(一)查询名称(针对包、存储过程)

---查看所有package包名
SELECT object_name
FROM user_objects --- user_objects针对当前用户。all_objects针对所有用户(若是特定用户,需在where后补充 AND owner = '用户名'的条件)
WHERE object_type = 'PACKAGE'
AND ROWNUM <= 100;
---查看所有package body包体名
SELECT object_name
FROM user_objects 
WHERE object_type = 'PACKAGE BODY' 
AND ROWNUM <= 100;
---查看所有procedure存储过程名
SELECT object_name
FROM user_procedures --- user_procedures针对当前用户,all_procedures针对所有用户
WHERE ROWNUM <= 100;

(二)查询内容(针对包、存储过程)

---查看package包内容
SELECT text
FROM user_source
WHERE name = 'PKG_REPORTMANAGE'  -- 包名全大写
AND type = 'PACKAGE'
AND ROWNUM <= 100;
---查看package body包体内容
SELECT text
FROM user_source
WHERE name = 'PKG_REPORTMANAGE'  -- 包名全大写
AND type = 'PACKAGE BODY'
AND ROWNUM <= 100;
---查看procedure存储过程内容
SELECT text
FROM user_source
WHERE name = 'AAAAA'  -- 存储过程的名称(全大写)
AND type = 'PROCEDURE'    -- 确保是存储过程
AND ROWNUM <= 100;
---查看table表内容
select * from 表名  
WHERE ROWNUM <= 100;

七、存储过程的断点调试

1. 打断点

        首先查看存储过程(若存储过程放在包中,则右击包名,选择View,然后选择Procedure),在需要调试的代码处打上断点(在左侧行号显示处,打上断点,会有红色叉叉×)。

2. 打开断点调试框

        右击存储过程,选择Test,会新生成一个Call the procedure脚本内容。并且下方会有调试所需的IN参数、执行结果OUT参数的表格,如下图所示。注意,冒号是紧挨着后面的变量的!

3. 输入和输出

(1)输入值

        查看断点调试框下方的表格,是否有IN参数需要赋值,若有,则先将IN参数赋值。

(2)输出格式

        输出的长字串的Type,最好设置为CLOB(比string存更多内容)。

4. 开始调试

图标作用
带有搜索标志的三角开始执行调试
绿色三角切换断点(执行到下一个断点)
第1个正方形(蓝色)单步进入(执行一步,若有子过程,则进入)
第2个正方形(蓝色)单步经过(执行一步,不会进入子过程)
第3个正方形(蓝色)单步跳出(退出到上一级)
第4个正方形(蓝色)暂时未用
第5个正方形(红)执行到下一个异常代码

 

5. 查看调试过程中的变量值

(1)鼠标放在变量上,查看当前值。

(2)在下方工具栏中的Script中输入想查看的变量值

八、SQL调试

DECLARE-- 声明输入输出参数condition_author VARCHAR2(100) := 'luobogan'; -- 查询条件condition_publishplace VARCHAR2(100) := '童话出版社';condition_booktype VARCHAR2(100) := '教育';TYPE refcur IS REF CURSOR;cur_book_table refcur; -- 输出结果return_sql VARCHAR2(4000);  ---如果字符太长,使用CLOB(CLOB不能打印,最好使用:变量名,通过下方的变量值输出框来查看CLOB的值,比如说=> return_sql改成=>  :return_sql)return_code NUMBER;cursor_bookid Books.BOOKID%TYPE;cursor_bookname Books.BOOKNAME%TYPE;
BEGIN-- 调用存储过程PKG_BOOK.PC_QueryBook(Condition_Author => condition_author, --- 注意是=>,没有冒号,才能使用上方declare的值(否则会用下方的变量输出框中定义的值)Condition_PublishPlace => condition_publishplace,condition_BookType => condition_booktype,cur_BookTable => cur_book_table,return_sql => return_sql, -- 如果是CLOB最好补充冒号(查看值时,在下方变量值输出框中查看执行test返回的值)return_code => return_code);-- 打印返回的 SQL 语句DBMS_OUTPUT.PUT_LINE('return_sql: ' || return_sql);-- 遍历游标并输出数据LOOPFETCH cur_book_table INTO cursor_bookid,cursor_bookname;EXIT WHEN cur_book_table%NOTFOUND;DBMS_OUTPUT.PUT_LINE('Fetched Data: ' || cursor_bookid || ', ' || cursor_bookname);END LOOP;-- 关闭游标CLOSE cur_book_table;  
EXCEPTION-- 异常输出WHEN NO_DATA_FOUND THENDBMS_OUTPUT.PUT_LINE('No data found');WHEN OTHERS THENDBMS_OUTPUT.PUT_LINE('another error: ' || DBMS_UTILITY.format_error_backtrace);
END; 

九、搜索查询

若想在该数据库中查找能够匹配某字串的地方,则使用Find Objects功能,如下图:

相关文章:

PL/SQL 安装配置与使用

目录 一、安装与配置 &#xff08;一&#xff09;下载PLSQL Developer &#xff08;二&#xff09;下载并配置免安装Oracle客户端 1. 下载Instantclient_11_2 2. 配置环境 &#xff08;1&#xff09;配置电脑的环境变量 &#xff08;2&#xff09;配置PLSQL Developer的…...

Oracle RAC ADG备库版本降级方案(19.20 → 19.7)

Oracle RAC ADG备库版本降级方案&#xff08;19.20 → 19.7&#xff09; 一、前期准备 1.1环境验证 主库版本&#xff1a;19.7 备库版本&#xff1a;19.20 检查兼容性&#xff1a;确认Oracle 19.20补丁是否支持回滚至19.7 1.2备份与快照 对备库数据库进行全量备份&#…...

SpringBoot-4-Spring Boot项目配置文件和日志配置

文章目录 1 项目全局配置文件1.1 配置示例1.2 配置文件加载顺序2 通过配置文件注入配置项2.1 使用@Value注解注入属性2.2 使用@ConfigurationProperties注入2.3 配置注入的注意事项2.4 配置文件中引用已定义值3 Spring Boot的日志配置3.1 引入日志依赖器3.2 自定义日志格式3.3 …...

mac上安装 Rust 开发环境

1.你可以按照提示在终端中执行以下命令&#xff08;安全、官方支持&#xff09;&#xff1a; curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh然后按提示继续安装即可。 注意&#xff1a;安装过程中建议选择默认配置&#xff08;按 1 即可&#xff09;。 如果遇…...

微软押注“代理式AI网络”:一场重塑软件开发与工作方式的技术革命

在 2025 年 Build 开发者大会上&#xff0c;微软正式发布了其面向“开放代理式网络&#xff08;Open Agentic Web&#xff09;”的宏大战略&#xff0c;推出超过 50 项 AI 相关技术更新&#xff0c;涵盖 GitHub、Azure、Windows 和 Microsoft 365 全线产品。这一系列更新的核心…...

鸿蒙HarmonyOS多设备流转:分布式的智能协同技术介绍

随着物联网和智能设备的普及&#xff0c;多设备间的无缝协作变得越来越重要。鸿蒙&#xff08;HarmonyOS&#xff09;作为华为推出的新一代操作系统&#xff0c;其分布式技术为实现多设备流转提供了强大的支持。本文将详细介绍鸿蒙多设备流转的技术原理、实现方式和应用场景。 …...

精益数据分析(71/126):从移情到黏性——创业阶段的关键跨越与数据驱动策略

精益数据分析&#xff08;71/126&#xff09;&#xff1a;从移情到黏性——创业阶段的关键跨越与数据驱动策略 在创业的旅程中&#xff0c;从需求验证的“移情阶段”过渡到产品黏性构建的“黏性阶段”&#xff0c;是决定创业成败的关键转折。今天&#xff0c;我们结合《精益数…...

21. 自动化测试框架开发之Excel配置文件的测试用例改造

21. 自动化测试框架开发之Excel配置文件的测试用例改造 一、测试框架核心架构 1.1 组件依赖关系 # 核心库依赖 import unittest # 单元测试框架 import paramunittest # 参数化测试扩展 from chap3.po import * # 页面对象模型 from file_reader import E…...

学习vue3:监听器

目录 一&#xff0c;关于监听的概述 二&#xff0c;手动监听器&#xff08;watch函数) watch&#xff08;&#xff09;函数语法 监听基本数据类型 监听对象&#xff0c;对象属性 三&#xff0c;自动监听器&#xff08;watchEffect函数&#xff09; watchEffect()函数语法…...

十大排序算法--快速排序

目录 原理 第一步 第二步 代码 递归实现快速排序 原理 分治法核心步骤 选择基准值&#xff08;Pivot&#xff09; 从数组中选一个元素作为基准值&#xff08;如最右侧元素、中间元素或随机元素&#xff09;。 分区&#xff08;Partition&#xff09; 将数组分为两部分…...

基于Docker搭建Harbor私有镜像仓库

Harbor 是 VMware 开源的企业级 Docker 容器镜像仓库&#xff0c;支持镜像存储、访问控制、镜像复制、安全扫描、审计日志等功能&#xff0c;适合企业级私有化部署。 1.前置环境说明 Harbor的部署依赖于Docker和Docker Compose环境。鉴于Docker已在系统中完成安装&#xff0c;…...

CentOS 7上搭建高可用BIND9集群指南

在 CentOS 7 上搭建一个高可用的 BIND9 集群通常涉及以下几种关键技术和策略的组合&#xff1a;主从复制 (Master-Slave Replication)、负载均衡 (Load Balancing) 以及可能的浮动 IP (Floating IP) 或 Anycast。 我们将主要关注主从复制和负载均衡的实现&#xff0c;这是构成高…...

使用SQLite Studio导出/导入SQL修复损坏的数据库

使用SQLite Studio导出/导入SQL修复损坏的数据库 使用Zotero时遇到了数据库损坏&#xff0c;在软件中寸步难行&#xff0c;遂尝试修复数据库。 一、SQLite Studio简介 SQLite Studio是一款专为SQLite数据库设计的免费开源工具&#xff0c;支持Windows/macOS/Linux。相较于其…...

Liquid Wire 柔性应变传感器:金属凝胶导体 | 仿生肌肉长度监测 | 高精度动作控制

柔性应变传感器通过模拟生物系统反馈机制&#xff0c;为软体机器人提供高精度动作控制能力。研究显示&#xff0c;基于液态导电金属的柔性传感纤维可精准测量仿生手指触觉力&#xff08;约 1600 kPa&#xff09;和关节角度变化&#xff08;约 60&#xff09;&#xff0c;实现特…...

Java IO流操作

Java IO流操作是处理文件和数据流的基础。通过FileInputStream和FileOutputStream&#xff0c;可以读写二进制文件&#xff1b;通过FileReader和FileWriter&#xff0c;可以处理文本文件。BufferedReader提高字符读取效率&#xff0c;InputStreamReader实现字节流到字符流的转换…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(25):受身形(3)

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(25):受身形(3) 1、前言(1)情况说明(2)工程师的信仰2、知识点(1)受身形(1)两要素时,使用【に】(2)三要素时,使用【を】或其他(3)(4)(5) によって(6)から VS で(2)復習(ふくしゅう):3、单词(…...

BPMN.js编辑器设计器与属性面板数据交互

以下是基于提供的Vue组件代码生成的类图&#xff0c;结合BPMN设计器特性与Vue组件封装规范绘制&#xff1a; #mermaid-svg-B6PK7fjqLLTHqh8B {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-B6PK7fjqLLTHqh8B .error…...

os agent智能体软件 - 第三弹 - 纯语音交互

前两期期我们发布了产品的初级形态&#xff0c;那时候还只能是“软件开发者”在本地配置使用&#xff0c;或者运行起来有个大黑框&#xff0c;使用起来美观度太差。 到今天大概20天&#xff0c;我们的第3版已经出来了&#xff0c;不仅做成了电脑端的exe软件&#xff08;任何人…...

PCB设计教程【入门篇】——电路分析基础-基本元件(二极管三极管场效应管)

前言 本教程基于B站Expert电子实验室的PCB设计教学的整理&#xff0c;为个人学习记录&#xff0c;旨在帮助PCB设计新手入门。所有内容仅作学习交流使用&#xff0c;无任何商业目的。若涉及侵权&#xff0c;请随时联系&#xff0c;将会立即处理、 目录 前言 1.二极管 1.发光…...

python打卡训练营打卡记录day31

知识点回顾 规范的文件命名规范的文件夹管理机器学习项目的拆分编码格式和类型注解 作业&#xff1a;尝试针对之前的心脏病项目ipynb&#xff0c;将他按照今天的示例项目整理成规范的形式&#xff0c;思考下哪些部分可以未来复用。 心脏病项目目录 目录结构:heart/ ├── conf…...

Python列表推导式和生成器表达式详解

Python列表推导式和生成器表达式详解 引言 Python以其简洁优雅的语法而闻名&#xff0c;其中列表推导式&#xff08;List Comprehensions&#xff09;和生成器表达式&#xff08;Generator Expressions&#xff09;就是这种优雅性的典型代表。本文将深入浅出地介绍这两种强大的…...

Redis 命令大全

Redis 是一个开源的内存数据结构存储系统,支持多种数据结构。以下是 Redis 的常用命令分类总结: 一、Key(键)相关命令 命令描述示例DEL key删除键DEL nameEXISTS key检查键是否存在EXISTS nameEXPIRE key seconds设置键的过期时间(秒)EXPIRE name 60TTL key查看键剩余过期…...

Wan2.1 图生视频 支持批量生成

Wan2.1 图生视频 支持批量生成 flyfish 综合效果 实现基于 Wan2.1 模型的配置化批量生成功能&#xff0c;支持从prompt.json读取多个 “图像 - 文本提示” 组合&#xff08;每个任务可关联多图像&#xff09;&#xff0c;通过config.json集中管理模型路径、分辨率、帧数、引…...

Git 删除大文件教程

&#x1f9f9; Git 删除大文件完整教程 &#x1f9e9; 适用场景 不小心将大文件&#xff08;如视频、压缩包、模型文件等&#xff09;提交到了 Git 仓库想彻底从仓库和提交历史中删除这个文件希望远程仓库体积减小&#xff08;如 GitHub 上传失败&#xff09; &#x1f6e0;️…...

题海拾贝:P2285 [HNOI2004] 打鼹鼠

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》、《C修炼之路》 1、题目 P2285 [HNOI2004] 打…...

第40天-Python开发音乐播放器完整指南

一、技术选型与工具准备 核心库: Pyqt5:Python标准GUI库,构建用户界面 os / sys:文件系统操作 开发环境: bash 复制 下载 pip install pyqt5 二、功能设计 功能模块描述播放控制播放/暂停/停止/上一曲/下一曲播放列表管理添加/删除/保存/加载歌曲音频可视化进度条显示与拖…...

【优秀三方库研读】在 quill 开源库中为什么封装 safe_fwrite,而不是直接使用系统 fwrite

在 Quill 日志库中,safe_fwrite 函数的封装是为了解决直接使用系统 fwrite 时可能存在的 可靠性 和 错误处理 问题,同时兼顾性能优化。以下从多个维度详细分析其设计动机和实现原理: 一、代码功能解析 QUILL_ATTRIBUTE_HOT static void safe_fwrite(void const* ptr, size_…...

UE(虚幻)学习(六)插件打包在UE5.3.2下Value cannot be null的错误

自己写的插件打包出现了Unhandled exception: System.ArgumentNullException: Value cannot be null.的错误&#xff0c;发现只有UE5.3会报出。 D:\UE_5.3\Engine\Build\BatchFiles>Runuat.bat BuildPlugin -PluginF:\UEProjects\DQSDK5_3\Plugins\DQSDK\DQSDK.uplugin -Pa…...

JDBC在Java项目开发中的核心作用与实战应用

一、JDBC概述及其在项目开发中的重要性 JDBC(Java Database Connectivity)是Java语言中用来规范客户端程序如何访问数据库的应用程序接口(API)&#xff0c;它为Java开发者提供了与各种关系型数据库进行交互的统一方式。 JDBC的核心价值&#xff1a; 提供与数据库无关的标准接…...

为 Jenkins添加 Windows Slave远程执行 python项目脚本

测试环境 JAVA JDK 1.7.0_13 (jdk-7u13-windows-i586.exe) Jenkins Win11 64 python项目环境 实践操作 1、新建与配置结点 【系统管理】-> 【管理结点】-> 【新建结点】, 如上&#xff0c;输入结点名称&#xff0c;勾选 【Dumb Slave】&#xff0c;点击【OK】 说明&am…...

深入解析Spring Boot与Redis的缓存集成实践

深入解析Spring Boot与Redis的缓存集成实践 引言 在现代Web应用中&#xff0c;缓存技术是提升系统性能的重要手段之一。Redis作为一种高性能的内存数据库&#xff0c;广泛应用于缓存场景。本文将详细介绍如何在Spring Boot项目中集成Redis&#xff0c;并探讨其在实际开发中的…...

硬件工程师笔记——三极管Multisim电路仿真实验汇总

目录 1 三极管基础 更多电子器件基础知识汇总链接 1.1 工作原理 NPN型三极管的工作原理 PNP型三极管的工作原理 1.2 三极管的特性曲线 输入特性曲线 理想和现实输出特性 三极管的主要参数包括&#xff1a; 2 三极管伏安特性 2.1 伏安特性仿真 Multisim使用说明链接…...

基于 ABP vNext + CQRS + MediatR 构建高可用与高性能微服务系统:从架构设计到落地实战

&#x1f9e0; 基于 ABP vNext CQRS MediatR 构建高可用与高性能微服务系统&#xff1a;从架构设计到落地实战 目录 &#x1f9e0; 基于 ABP vNext CQRS MediatR 构建高可用与高性能微服务系统&#xff1a;从架构设计到落地实战&#x1f9f0; 模块结构概览&#x1f4e6; 各…...

java云原生实战之graalvm 环境安装

windows环境安装 在Windows环境下安装GraalVM并启用原生镜像功能时&#xff0c;需要Visual Studio的组件支持。具体要点如下&#xff1a; 核心依赖&#xff1a; 需要安装Visual Studio 2022或更新版本&#xff0c;并确保勾选以下组件&#xff1a; "使用C的桌面开发"…...

Python 包管理工具uv依赖分组概念解析

在 Python 包管理工具 uv 中&#xff0c;依赖分组&#xff08;如 dev、prod&#xff09;是一种将项目的不同依赖按用途分类管理的机制。通过分组&#xff0c;开发者可以清晰地分离生产环境&#xff08;运行项目所需的核心依赖&#xff09;和开发环境&#xff08;仅在开发阶段使…...

C语言-9.指针

9.1指针 9.1-1取地址运算:&运算符取得变量的地址 运算符& scanf(“%d”,&i);里的&获取变量的地址,它们操作数必须是变量int i;printf(“%x”,&i);地址的大小是否与int相同取决于编译器int i;printf(“%p”,&i); &不能取的地址不能对没有地址的…...

GitHub 自动认证教程

## 简介 在使用 GitHub 时&#xff0c;为了避免每次提交代码都需要输入用户名和密码&#xff0c;我们可以使用 SSH 密钥进行自动认证。本教程将详细介绍如何设置 SSH 密钥并配置 GitHub 自动认证。 ## 步骤一&#xff1a;检查现有 SSH 密钥 首先&#xff0c;检查您的电脑是否…...

labelme的安装与使用(以关键点检测为例)、labelme格式标签转换

注&#xff1a;labelme 和 labelImg 是两款不同的数据标注工具。labelme 的 Github 官方地址&#xff1a; https://github.com/wkentaro/labelmehttps://github.com/wkentaro/labelme 参考笔记&#xff1a; Labelme标注工具安装及使用_labelme安装及使用教程-CSDN博客 学习视…...

【Git】远程操作

Git 是一个分布式版本控制系统 可以简单理解为&#xff0c;每个人的电脑上都是一个完整的版本库&#xff0c;这样在工作时&#xff0c;就不需要联网 了&#xff0c;因为版本库就在自己的电脑上。 因此&#xff0c; 多个人协作的方式&#xff0c;譬如说甲在自己的电脑上改了文件…...

密码学实验

密码学实验二 一、实验目的&#xff08;本次实验所涉及并要求掌握的知识点&#xff09; 掌握RSA算法的基本原理并根据给出的RSA算法简单的实现代码源程序,以及能够使用RSA对文件进行加密。掌握素性测试的基本原理&#xff0c;并且会使用Python进行简单的素性测试以及初步理解…...

nettrace工具介绍

简介 仓库地址&#xff1a; https://github.com/OpenCloudOS/nettrace 背景&#xff1a; 在云原生场景中&#xff0c;linux系统中的网络部署变得越来越复杂&#xff0c;一个tcp连接&#xff0c;从客户端到服务器&#xff0c;中间可能要经过复杂的NAT、GRE、IPVS等过程&#x…...

Jenkins+Docker+Harbor快速部署Spring Boot项目详解

JenkinsDockerHarbor快速部署Spring Boot项目详解 Jenkins、Docker和Harbor是现代DevOps流程中的核心工具&#xff0c;结合使用可以实现自动化构建、测试和部署。下面我将详细介绍如何搭建这个集成环境。 一、各工具的核心作用 Jenkins 自动化CI/CD工具&#xff0c;负责拉取代…...

Windows 安装Anaconda

一、下载Anaconda 1.阿里云镜像&#xff1a; https://developer.aliyun.com/mirror/ 2.中科大镜像&#xff1a; https://mirrors.ustc.edu.cn/ 二、配置环境变量 Windows‌&#xff1a; 1.右键“此电脑” → “属性” → “高级系统设置” → “环境变量”25&#xff1b…...

《微机原理与接口技术》第 8 章 常用接口芯片

8.1 可编程定时/计数器8253/8254 8.1.1 8253的外部引脚及内部结构 8.1.2 8253的工作方式 8.1.3 8253的方式控制字和读/写操作 8.1.4 8253的初始化编程及应用 8.1.5 可编程定时/计数器8254 …… 8.2 可编程并行接口8255 8.2.1 并行通信的概念 &#xff08;1&#xff09…...

upload-labs靶场通关详解:第12-13关

目录 第12关&#xff1a;get00截断 一、分析源代码 二、解题思路 三、解题步骤 第13关&#xff1a;post00截断 一、分析源代码 二、解题思路 三、解题步骤 第12关&#xff1a;get00截断 一、分析源代码 $is_upload false; $msg null; if(isset($_POST[submit])){$ex…...

YOLO模型初次训练体验(+实测)

1.训练目的 做一个简单的示例,本次训练的目的希望模型能够识别桌面的两个图标。(主要是方便准备数据) 2.数据准备 安装一个截图软件,在桌面不同分辨率,不同背景的情况下,随机调整两个图标的位置并截图保存。 原始图片: 先为截图批量重命名: 使用重命名工具,设置命…...

OSA实战笔记二

本文是我在实际项目开发中&#xff0c;总结和归纳的笔记&#xff0c;主要记录了OSA常用的参数释义。 OSA的Params 1、Scroll Sensivity 对⿏标滚轮&#xff08;或类似&#xff09;输⼊的敏感度&#xff0c;与通过滚动条拖动或滚动⽆关。 2、Scroll Sensivity On X Axis 对…...

OSI 网络七层模型中的物理层、数据链路层、网络层

一、OSI 七层模型 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层 1. 物理层&#xff08;Physical Layer&#xff09; 功能&#xff1a;传输原始的比特流&#xff08;0和1&#xff09;&#xff0c;通过物理介质&#xff08;如电缆、光纤、无线电波&#xff09;…...

如何自学FPGA设计?

众所周知&#xff0c;FPGA设计自学难度不小&#xff0c;更不存在速成的捷径。这里简单说一下学习的规划&#xff0c;希望能给入门者提供一些方向。 学会相应的知识 不论是科班毕业还是理工科专业出身&#xff0c;想要入行FPGA开发&#xff0c;基础知识必须扎实。尤其是在高校…...

leetcode 合并区间 java

用 ArrayList<int[]> merged new ArrayList<>();来定义数组的list将数组进行排序 Arrays.sort(intervals,(a,b) -> Integer.compare(a[0],b[0]));如果前面的末尾>后面的初始&#xff0c;那么新的currentInterval的末尾这两个数组末尾的最大值&#xff0c;即…...