Oracle数据库数据编程SQL<3.1 PL/SQL 匿名块 及 流程控制中的条件判断、循环、异常处理和随机函数应用>
PL/SQL部分
在SQL的基础上增加了一些过程化的控制语句。
过程化控制语句包括:类型定义、判断、循环、游标、异常处理(例外处理)
目录
PL/SQL匿名块
一、匿名块基本结构
1、匿名块由三个部分组成:
2、注意事项:
二、不带声明的匿名块示例
1. 简单示例:打印
(1)点击【执行】,然后查看【结果】
三、declare带声明部分的匿名块
1、变量的声明
2、变量的类型
(1)字符类型 char varchar/varchar2
(2)数值类型 number int
(3)日期类型 date
(4)布尔类型 boolean --值返回对错空
(5)表名.列名%type--和表中的某一列类型相同
(6)表名%rowtype--和表的结构一致
(7)record--自定义列的类型
4、变量的赋值
(1):=直接赋值
(2)变量的值可以赋给另一个变量
(3)变量可以二次赋值
(4)变量赋值可以用函数
(5)变量可以运算
(6)用键盘可以直接输入赋值&
(7)用 select … into语句给变量赋值,值只返回一行,可以多列
(8)type 变量 is record();自定义变量
(9)returning…into 查询DML的上一次操作赋值给变量
(10)变量声明时可以声明多个,只用其中的某几个;
(11)变量声明了,可以不用,但是使用的变量一定要声明。
四、 带异常处理的匿名块
五、匿名块中begin部分的流程控制(条件判断)
1. IF-THEN-ELSE 语句
(1)单分支
(2)双分支
(3)多分支
(4)举例
2、CASE-WHEN-THEN-ELSE语句
六、PL/SQL里的case when和SQL里的case when 的区别?
七、匿名块中begin部分的循环(也属于流程控制)
1、简单循环(基本循环)
2、while循环
3、for循环
八、匿名块中的异常处理
1. 预定义异常
2. 自定义异常
九、随机函数的应用
1、dbms_random.value(小值,大值)
2、dbms_random.string(参数,长度)
3、在匿名块中的应用
PL/SQL匿名块
匿名块是 Oracle PL/SQL 中最基本的代码执行单元,它没有名称,不能被存储或重复调用,通常用于一次性执行的任务或测试代码片段。
一、匿名块基本结构
1、匿名块由三个部分组成:
[DECLARE-- 声明部分(可选)变量、常量、游标、异常等的声明]
BEGIN-- 执行部分(必需)PL/SQL 和 SQL 语句
[EXCEPTION-- 异常处理部分(可选)异常处理程序]
END;
/ 命令窗口需要加 / 以示结束
2、注意事项:
(1)每一部分的语句都需要以;结尾,end后也必须加;
(2)习惯的加注释
(3)赋值的时候加“:=”,判断相等的时候“=”。
(4)命令窗口需要修改时,输入ed或edit
(5)命令窗口开启打印服务时输入set serveroutput on
关闭打印服务 set serveroutput off
declarev1 number;v2 number;
beginv1 := 1000;v2 := 2000;dbms_output.put_line(v1 || '+' || v2 || '=' || (v1 + v2));
end;
这里注意加号和等号的执行顺序,加号是有执行优先级的,只有(v1+v2),这个语句才能正确执行
二、不带声明的匿名块示例
1. 简单示例:打印
BEGINDBMS_OUTPUT.PUT_LINE('Hello, 你是不是学废了');--打印
END;
/dbms_output.put --不换行打印必须搭配换行打印使用***
dbms_output.put_line --换行打印
(1)点击【执行】,然后查看【结果】
三、declare带声明部分的匿名块
1、变量的声明
变量名 变量的类型长度 v_name varchar2(20);
2、变量的类型
(1)字符类型 char varchar/varchar2
(2)数值类型 number int
(3)日期类型 date
DECLAREv_count NUMBER := 0;v_name VARCHAR2(100) := '张三';v_hiredate DATE := SYSDATE;v_flag BOOLEAN := TRUE;c_pi CONSTANT NUMBER := 3.14159;
BEGIN-- 执行代码
END;
/
(4)布尔类型 boolean --值返回对错空
(5)表名.列名%type--和表中的某一列类型相同
- 所引用的数据库列的数据类型可以不必知道。
- 索引用的数据库列的数据类型可以实时改变,即原表改变他会自动改变。
- 定义变量不能与表中列的名字相同
- 同一时间只能接受一个值
DECLAREv_emp_name employees.last_name%TYPE;v_emp_sal employees.salary%TYPE; BEGINSELECT last_name, salary INTO v_emp_name, v_emp_salFROM employeesWHERE employee_id = 100;DBMS_OUTPUT.PUT_LINE(v_emp_name || '的薪资是: ' || v_emp_sal); END; /
(6)表名%rowtype--和表的结构一致
DECLAREv_emp_record employees%ROWTYPE;
BEGINSELECT * INTO v_emp_recordFROM employeesWHERE employee_id = 100;DBMS_OUTPUT.PUT_LINE('员工信息: ' || v_emp_record.employee_id || ', ' ||v_emp_record.last_name || ', ' ||v_emp_record.salary);
END;
/
(7)record--自定义列的类型
4、变量的赋值
(1):=直接赋值
declare
v_number number(4);
begin
v_number:=7788;
end;
(2)变量的值可以赋给另一个变量
declare
v_1 number(4):=7788;
v_2 number(4);
begin
v_2:=v_1;
end;
(3)变量可以二次赋值
declare
v1 number:=1;
begin
dbms_output.put_line('v1='||v1);--打印
v1:=2;
dbms_output.put_line('v1='||v1);
end;
(4)变量赋值可以用函数
declare
v1 varchar2(20):='SMITH';
begin
v1:=lower(v1);
dbms_output.put_line(v1);
end;
(5)变量可以运算
(6)用键盘可以直接输入赋值&
declare
v1 number:=&abcd;
begin
dbms_output.put_line('v1='||v1);
end;
(7)用 select … into语句给变量赋值,值只返回一行,可以多列
declare
v_sal emp.sal%type;
begin
select sal into v_sal from emp where ename='SMITH';
dbms_output.put_line(v_sal);
end;
(8)type 变量 is record();自定义变量
declare
type t_emp is record(v_e emp.empno%type,v_h emp.hiredate%type,v_d emp.deptno%type);
b t_emp;
begin
select empno,hiredate,deptno into b
from emp where ename='KING';
dbms_output.put_line(b.v_e||chr(13)||b.v_h||chr(13)||b.v_d);
end;
(9)returning…into 查询DML的上一次操作赋值给变量
declare
v_n emp1.ename%type;
v_sal emp1.sal%type;
begin
insert into emp1 (ename,sal) values('Eddie',10000)
returning ename,sal into v_n,v_sal;
dbms_output.put_line(v_n||','||v_sal);
end;
(10)变量声明时可以声明多个,只用其中的某几个;
(11)变量声明了,可以不用,但是使用的变量一定要声明。
--注意切换到Hr用户
DECLAREv_employee_name VARCHAR2(100);v_salary NUMBER;
BEGINSELECT last_name, salary INTO v_employee_name, v_salaryFROM employeesWHERE employee_id = 100;DBMS_OUTPUT.PUT_LINE('员工姓名: ' || v_employee_name);DBMS_OUTPUT.PUT_LINE('员工薪资: ' || v_salary);
END;
/--注意切换到scott用户
--删除emp1的员工编号是 7782的员工,输入【删除】的ename和mgr
--更新emp1的名字是KING的员工,
--名字改成首字母大写,输入【更新】后的名字和工作
create table emp6 as select * from emp;
declarev_e emp6.ename%type;v_mgr emp6.mgr%type;v_n emp6.ename%type;v_job emp6.job%type;
begindelete from emp6 where empno = 7902; returning ename, mgr into v_e, v_mgr;update emp6set ename = lower(ename), job = initcap(job)where ename = 'KING'returning ename, job into v_n, v_job;dbms_output.put_line(v_e || '' || v_mgr || chr(13) || v_n || '' || v_job);
end;
/
select * from emp6
四、 带异常处理的匿名块
DECLAREv_dept_name VARCHAR2(100);
BEGINSELECT department_name INTO v_dept_nameFROM departmentsWHERE department_id = 999; -- 假设这个部门不存在DBMS_OUTPUT.PUT_LINE('部门名称: ' || v_dept_name);
EXCEPTION --异常处理WHEN NO_DATA_FOUND THENDBMS_OUTPUT.PUT_LINE('错误: 未找到部门信息');WHEN OTHERS THENDBMS_OUTPUT.PUT_LINE('错误代码: ' || SQLCODE);DBMS_OUTPUT.PUT_LINE('错误信息: ' || SQLERRM);
END;
/
五、匿名块中begin部分的流程控制(条件判断)
1. IF-THEN-ELSE 语句
(1)单分支
if 条件 then 要执行的语句 end if;
(2)双分支
if 条件 then 要执行的语句 else 要执行的语句 end if;
(3)多分支
if 条件1 then 要执行的语句
elsif 条件2 then 要执行的语句
elsif 条件3 then 要执行的语句
...
else 要执行的语句
end if;
(4)举例
DECLAREv_score NUMBER := 85;
BEGINIF v_score >= 90 THENDBMS_OUTPUT.PUT_LINE('优秀');ELSIF v_score >= 80 THENDBMS_OUTPUT.PUT_LINE('良好');ELSIF v_score >= 60 THENDBMS_OUTPUT.PUT_LINE('及格');ELSEDBMS_OUTPUT.PUT_LINE('不及格');END IF;
END;
/--从键盘输入一个员工编号,如果他的工作是MANAGER打印'他是经理';
--如果他的工作是CLERK打印'他是职员';
--如果他的工作是SALESMAN打印'他是销售';
--如果他的工作是ANALYST打印'他是分析员';
--否则打印'他是老板'。
declarev_job emp.job%type;
beginselect job into v_job from emp where empno = &empno;if v_job = 'MANAGER' thendbms_output.put_line('他是经理');elsif v_job = 'CLERK' thendbms_output.put_line('他是职员');elsif v_job = 'SALESMAN' thendbms_output.put_line('他是销售');elsif v_job = 'ANALYST' thendbms_output.put_line('他是分析员');elsedbms_output.put_line('他是老板');end if;
end;
/
2、CASE-WHEN-THEN-ELSE语句
--语法
case when 条件1 then 要执行的语句;when 条件2 then 要执行的语句;……else 要执行的语句;
end case;--举例
DECLAREv_grade CHAR(1) := 'B';
BEGINCASE v_gradeWHEN 'A' THEN DBMS_OUTPUT.PUT_LINE('优秀');WHEN 'B' THEN DBMS_OUTPUT.PUT_LINE('良好');WHEN 'C' THEN DBMS_OUTPUT.PUT_LINE('及格');ELSE DBMS_OUTPUT.PUT_LINE('未知等级');END CASE;
END;
/--练习
--从键盘上输入一个员工编号,如果他的名字的首字母是A、B、C则打印1
--如果他的名字的首字母是D、E、F则打印2
--如果他的名字的首字母是G、H、I则打印3
--否则打印4;
declarev_e char;
beginselect substr(ename, 1, 1) into v_e from emp where empno = &empno;casewhen v_e in ('A', 'B', 'C') then--首字母是A、B、Cdbms_output.put_line(1);--打印1when v_e in ('D', 'E', 'F') then--首字母是D、E、Fdbms_output.put_line(2);--打印2when v_e in ('G', 'H', 'I') then--首字母是G、H、Idbms_output.put_line(3);--打印3elsedbms_output.put_line(4);--打印4end case;
end;
六、PL/SQL里的case when和SQL里的case when 的区别?
(1)sql里的case when 是一个值,pl/sql 里相当于if的作用;
(2)sql里case when 内部不能加分号,pl/sql里每一个条件后都要加分号;
(3)pl/sql里case when 后可以加DML;
(4)sql里case when 以end结尾,pl/sql里以end case 结尾;
七、匿名块中begin部分的循环(也属于流程控制)
循环:简单循环、while循环、for循环
1、简单循环(基本循环)
【1】语法:loop要执行的语句;exit when 退出的条件;end loop;进入循环不需要条件。注意:必须设置自增变量来控制循环以免出现死循环。【2】举例DECLAREv_counter NUMBER := 1;BEGINLOOPDBMS_OUTPUT.PUT_LINE('当前计数: ' || v_counter);v_counter := v_counter + 1;EXIT WHEN v_counter > 5;END LOOP;END;/----------------------------------------------------------declarei number := 1;beginloopdbms_output.put_line(i);i := i + 1;exit when i > 10;end loop;end;/【3】练习
(1)用循环打印 A、B、C、D、E、F……Z。declarei number := ascii('A') - 1;beginloopi := i + 1;dbms_output.put(chr(i)||' ');--不换行打印exit when i > ascii('M') - 1;end loop;dbms_output.put_line('');--和一个换行打印搭配才能打印出东西i:=ascii('M');loopi := i + 1;dbms_output.put(chr(i));--不换行打印exit when i > ascii('Z') - 1;end loop;dbms_output.put_line('');--和一个换行打印搭配才能打印出东西end;/(2)123 456 789 declarei1 number := 1;i2 number := 1;j varchar(2) := ' ';k number := 0;beginloopk := k + 1;loopdbms_output.put(i1);i1 := i1 + 1;i2 := 3 * k;exit when i1 > i2;end loop;dbms_output.put(j);exit when k > 9;end loop;dbms_output.put_line('');end;/输出-----------1 2 3 4 5 6 7 8 9 ---------------
(3)循环打印1-10的和,显示1+2+3+4+5+6+7+8+9+10=declarev_sum number := 0;v_num number := 1;beginloopdbms_output.put(v_num || '+');v_sum := v_num + v_sum;v_num := v_num + 1;exit when v_num > 9;end loop;dbms_output.put_line(10 || '=' || (v_sum + v_num));end;/
(4)只打印1-10的和declarev_sum number := 0;v_num number := 1;beginloopv_sum := v_num + v_sum;v_num := v_num + 1;exit when v_num > 9;end loop;dbms_output.put_line(v_sum + v_num);end;/
2、while循环
【1】语法
while 条件
loop 要执行的语句
{exit when 条件}
end loop;
满足while后的条件才进入循环,不满足不进入循环
注意:必须要设置自增变量控制循环,以免出现死循环。/*###################################################*/
【2】举例
DECLAREv_counter NUMBER := 1;
BEGINWHILE v_counter <= 5 LOOPDBMS_OUTPUT.PUT_LINE('当前计数: ' || v_counter);v_counter := v_counter + 1;END LOOP;
END;
/
---------------------------------------------------------
declarei number := 0;
beginwhile i < 10loopi := i + 1;dbms_output.put_line(i);exit when i=5;--中途退出end loop;
end;/*###################################################*/
【3】练习
(1)用while循环打印A、B、C、D、E、F
declarei number := ascii('A') - 1;
beginwhile i < ascii('Z') loopdbms_output.put_line(chr(i + 1));i := i + 1;end loop;
end;
/(2)循环打印1-10的和
declarev_sum number := 0;v_num number := 1;
beginwhile v_num <=10 loopv_sum := v_num + v_sum;dbms_output.put_line(v_sum);v_num := v_num + 1;end loop;
end;
/(3)循环打印10-1
declarev1 number := 10;
beginwhile v1 > 0 loopdbms_output.put_line(v1);v1 := v1 - 1;end loop;
end;
/
===================================
declarev1 number := 10;
beginwhile v1 > 0 loopdbms_output.put(v1||' ');v1 := v1 - 1;end loop;dbms_output.put_line('');
end;
/(4)用while循环写九九乘法表*******
DECLAREx INT := 1;y INT;
BEGINWHILE x <= 9 LOOPy := 1;WHILE y <= x LOOPdbms_output.put(y || ' * '|| x || ' = ' || x*y || ' ');y := y + 1;END LOOP;x := x + 1;dbms_output.put_line(''); END LOOP;
END;
/
3、for循环
【1】语法
for 变量 in {reverse}小值..大值loop要执行的语句;{exit when 条件;end loop;
每循环一次,循环变量自动+1;
使用关键字 reverse 循环变量自动-1;
跟在in reverse 后面的数字必须是从小到大的顺序,而且必须是整数/*###################################################*/
【2】举例
BEGINFOR i IN 1..5 LOOPDBMS_OUTPUT.PUT_LINE('当前计数: ' || i);END LOOP;-- 反向循环FOR i IN REVERSE 1..5 LOOPDBMS_OUTPUT.PUT_LINE('反向计数: ' || i);END LOOP;
END;
/
-----------------------------------------------------
beginfor i in reverse 1 .. 10 loopdbms_output.put_line(i);end loop;
end;
//*###################################################*/
【3】练习
(1)打印A-Z
beginfor i in ascii('A') .. ascii('Z') loopdbms_output.put(chr(i));end loop;dbms_output.put_line('');
end;
/
-----------------------------------------------------
(2)打印20以内的奇数
方法1:
declarej number;
beginfor i in 1..10 loopj:=2*i-1;dbms_output.put_line(j);end loop;
end;
方法2:
beginfor i in 1 .. 20 loopif mod(i, 2) = 1 thendbms_output.put_line(i);end if;end loop;
end;
/
-----------------------------------------------------
(3)打印1-20的和
declaren number := 0;
beginfor i in 1 .. 20 loopn := n + i;end loop;dbms_output.put_line(n);
end;
/
-----------------------------------------------------
(4)打印1-20以内奇数的乘积
declaren number := 1;j number;
beginfor i in 1 .. 10 loopj := 2 * i - 1;n := n * j;end loop;dbms_output.put_line(n);
end;
/
-----------------------------------------------------
(5)打印九九乘法表
beginfor i in 1 .. 9 loop--行数for j in 1 .. i loop--列数dbms_output.put(j || '×' || i || '=' || i * j || ' ');end loop;dbms_output.put_line('');end loop;
end;
/
---------------------------------
beginfor i in 1..9 loopfor j in 1..i loop----第一次循环是 1----1----第二次循环是 1----2----第三次循环是 1----3dbms_output.put(j||'*'||i||'='||i*j||' ');end loop;dbms_output.put_line('');end loop;
end;
/
-----------------------------------------------------
(6)打印金字塔
beginfor i in 1 .. 9 loopfor j in 1 .. (9-i) loopdbms_output.put(' ');end loop;for k in 1..(2*i-1) loopdbms_output.put('*');end loop;dbms_output.put_line('');end loop;
end;
/
-----------------------------------------------------
(7)打印直角
beginfor i in reverse 1 .. 9 loopfor j in 1 .. i loopdbms_output.put('*');end loop;dbms_output.put_line('');end loop;
end;
八、匿名块中的异常处理
1. 预定义异常
BEGIN-- 可能出错的代码UPDATE employees SET salary = salary * 1.1 WHERE employee_id = 9999;IF SQL%NOTFOUND THENDBMS_OUTPUT.PUT_LINE('未更新任何行');END IF;
EXCEPTIONWHEN NO_DATA_FOUND THENDBMS_OUTPUT.PUT_LINE('未找到数据');WHEN TOO_MANY_ROWS THENDBMS_OUTPUT.PUT_LINE('返回多行数据');WHEN OTHERS THENDBMS_OUTPUT.PUT_LINE('错误代码: ' || SQLCODE);DBMS_OUTPUT.PUT_LINE('错误信息: ' || SQLERRM);
END;
/
2. 自定义异常
DECLAREe_invalid_dept EXCEPTION;v_dept_id NUMBER := 99;
BEGIN-- 检查部门是否存在IF v_dept_id NOT BETWEEN 10 AND 100 THENRAISE e_invalid_dept;END IF;-- 正常处理DBMS_OUTPUT.PUT_LINE('部门ID有效');
EXCEPTIONWHEN e_invalid_dept THENDBMS_OUTPUT.PUT_LINE('错误: 无效的部门ID ' || v_dept_id);WHEN OTHERS THENDBMS_OUTPUT.PUT_LINE('其他错误');
END;
/
九、随机函数的应用
1、dbms_random.value(小值,大值)
dbms_random.value(小值,大值)
返回的是小数(小值到大值之间的)
在-2^31-2^31之间
select dbms_random.value(-1,10) from dual
2、dbms_random.string(参数,长度)
dbms_random.string(参数,长度)
u/U 大写字母
l/L 小写字母
a/A 字母
x/X 大写字母和数字
p/P 任意可打印字符
select dbms_random.string('p',5) from dual
3、在匿名块中的应用
【1】
--生成一个0-10的随机整数,如果大于5则输出‘大’,
--如果小于5则输出‘小’,如果等于5输出‘巧了’。
declaren number;
beginn := trunc(dbms_random.value(0, 10));if n > 5 thendbms_output.put_line(n || '大');elsif n < 5 thendbms_output.put_line(n || '小');elsedbms_output.put_line(n || '巧了');end if;
end;
/【2】
--连选十次
declaren number;
beginfor i in 1 .. 10 loopn := trunc(dbms_random.value(0, 100));if n > 5 thendbms_output.put(n || '普通' || ' ');elsif n < 5 thendbms_output.put(n || '稀有' || ' ');elsedbms_output.put(n || '传说' || ' ');end if;end loop;dbms_output.put_line('');
end;
/【3】
--声明一个变量要求和hr 用户的employees的hire_date的类型一致
--把2003年入职,员工编号是141的first_name,last_name 输出。
declare
v_h hr.employees.hire_date%type;
v_f hr.employees.first_name%type;
v_l hr.employees.last_name%type;
beginselect first_name,last_name into v_f,v_lfrom hr.employees e where e.employee_id=141 and to_char(e.hire_date,'yyyy')=2003;dbms_output.put_line(v_f||' '||v_l);end;
/【4】
--打印1*2*3*...*20的式子和结果
declaren number := 1;
beginfor i in 1 .. 20 loopn := n * i;if i < 20 thendbms_output.put(i || '×');elsedbms_output.put(i);end if;end loop;dbms_output.put_line('=' || n);
end;
相关文章:
Oracle数据库数据编程SQL<3.1 PL/SQL 匿名块 及 流程控制中的条件判断、循环、异常处理和随机函数应用>
PL/SQL部分 在SQL的基础上增加了一些过程化的控制语句。 过程化控制语句包括:类型定义、判断、循环、游标、异常处理(例外处理) 目录 PL/SQL匿名块 一、匿名块基本结构 1、匿名块由三个部分组成: 2、注意事项: …...
CEF 给交互函数, 添加控制台是否显示交互参数log开关
CEF 控制台添加一函数,枚举 注册的供前端使用的CPP交互函数有哪些 CEF 多进程模式时,注入函数,获得交互信息-CSDN博客 这两篇文章,介绍了注入函数,在控制台中显示 各自提供的交互函数信息。 有些场景下,我们还需要更详细的信息,比如想知道 彼此传递的参数, 如果每次调…...
如何用 Postman 正确传递 Date 类型参数,避免服务器解析错误?
如何在 Postman 中传递 Date 类型参数。调试工具如何模拟发送用户端的当前时间呢? Postman 传递 Date 类型参数教程...
从代码学习深度学习 - 含并行连结的网络(GoogLeNet)PyTorch版
文章目录 前言一、GoogLeNet的理论基础1.1 背景与创新点1.2. Inception模块的工作原理二、完整代码实现与解析2.1. 环境准备与工具函数2.2. 数据加载 - Fashion-MNIST2.3. Inception模块设计2.4. GoogLeNet完整模型2.5. 训练函数2.6. 运行训练三、训练结果与分析3.1. 性能分析3…...
进程Kill杀死后GPU显存没有释放仍然被占用,怎么杀死僵尸进程
参考链接: https://blog.csdn.net/qq_37591986/article/details/131118109 使用下面的命令: fuser -v /dev/nvidia0 | awk {print $0} | xargs kill -9一般来说他会杀掉整个用户的所有进程。...
Deepseek API+Python 测试用例一键生成与导出 V1.0.3
** 功能详解** 随着软件测试复杂度的不断提升,测试工程师需要更高效的方法来设计高覆盖率的测试用例。Deepseek API+Python 测试用例生成工具在 V1.0.3 版本中,新增了多个功能点,优化了提示词模板,并增强了对文档和接口测试用例的支持,极大提升了测试用例设计的智能化和易…...
【字符设备驱动开发–IMX6ULL】(一)简介
【字符设备驱动开发–IMX6ULL】(一)简介 一、Linux驱动与裸机开发区别 1.裸机驱动开发回顾 1、底层,跟寄存器打交道,有些MCU提供了库。 spi.c:主机驱动(换成任何一个设备之后只需要调用此文件里面的…...
MaxKB 如何通过Nginx修改浮框提示文字
在使用MaxKB做第三方嵌入的时候,总会有想Diy前端样式的场景,下面就通过Nginx的方式,实现浮框样式的改变。 一、效果对比 修改前: 修改后: 前后对比: 修改了提示文字。去掉了图标后面的白框 下面讲一下该…...
中小型企业网络的搭建
1.1 网络逻辑拓扑、布线方案的设计 1.1.1 网络设计依据 网络设计应遵循以下基本原则: 高效性:确保网络架构能够支持企业日常业务的高效运行。 可靠性:采用冗余设计,确保网络的高可用性,避免单点故障。 可扩展性…...
第二卷:海盐城血战(37-72回)正反人物群像
第二卷:海盐城血战(37-72回)正反人物群像 核心矛盾:寒门军事崛起 → 内部倾轧 → 制度性腐败 主题:通过人物群像展现寒门胜利的虚幻性与权力异化的必然性 一、正派阵营(寒门抗争势力) 1. 刘裕…...
qt之使用redis与其他程序(python)交互同通信
一、前言 有需求,趁热调试出了嵌入式系统的算法环境安装和远程桌面以及一些其他的之前一直未调试出搁置的功能,趁热继续调试进阶功能redis通信,redis与sqlite各有千秋,redis可以作为在嵌入式系统下多个程序之间相互通信的中间件&…...
Pycharm(七):几个简单案例
一.剪刀石头布 需求:和电脑玩剪刀石头布游戏 考察点:1.随机数;2.判断语句 import random # numrandom.randint(1,3) # print(num) # print(**30) #1.录入玩家手势 playerint(input(请输入手势:(1.剪刀 2.石头 3&…...
05.AI搭建preparationの(transformers01)BertTokenizer实现分词编码
一、下载 bert-base-chinese镜像下载 二、简介作用: 模型每个参数占用的字节大小模型大小模型大小层数头数GPT-14 个字节的 FP32 精度浮点数117M446MB1212GPT-22 个字节的 FP161.5亿到1.75亿0.5GB到1.5GB4816GPT-32 个字节的 FP161.75万亿(17500亿&a…...
Perl 环境安装指南
Perl 环境安装指南 引言 Perl是一种广泛使用的解释型、动态编程语言,以其强大的文本处理能力和灵活性著称。本文将为您详细介绍Perl环境的安装过程,包括系统要求、安装步骤以及注意事项。 系统要求 在安装Perl之前,请确保您的计算机满足以下基本要求: 操作系统:Window…...
Visual Studio中创建和配置设置文件(Settings.settings) - 详细步骤指南——待调试
#在Visual Studio中创建和配置设置文件(Settings.settings) - 详细步骤指南 在Visual Studio中创建和配置应用程序设置文件,用于保存用户上次输入的值。 第一步:添加设置文件 1. **打开你的项目**:在Visual Studio中打开你的AutoCAD插件项目 …...
Nginx的时钟精度陷阱:request_time与upstream_response_time差异分析
在elasticsearch 采集nginx日志分析的场景下发现, request_time 小于upstream_response_time ,于是才有了这边文章。 在 Nginx 中,upstream_response_time 和 request_time 使用不同的系统时钟和精度机制来记录时间,这可能导致 u…...
参加李继刚线下活动启发:未来提示词还会存在吗?
上周六,我参加了李继刚老师组织的线下活动。 现场干货满满,尤其是关于 AI 时代提示词的价值、与 AI 沟通的艺术等话题,李老师的分享如同醍醐灌顶,让我对 AI 人机协作有了更深的理解。 将几点核心收获整理出来,与大家…...
C++作用域辨识详解
在 C 中,作用域(Scope)定义了变量、函数、类等标识符的可见性和生命周期。理解作用域对于编写清晰、高效的代码至关重要。以下是 C 中作用域的详细分类和说明。 1. 全局作用域(Global Scope) 全局作用域是指在所有函…...
MYTOOL-记事本
一、前言 目录 1.原型设计 2.程序实现 3.最终界面说明 二、环境 windows10 每个软件工具前期会设计大概的原型,我设计的原型工具使用Axure RP9,很不错的一个设计工具 三、正文 1.原型设计 2.程序实现 3.最终界面说明 四、结语...
混合知识表示系统框架python示例
前文我们已经深入学习了框架表示法、产生式规则和一阶谓词逻辑,并对它们进行了深度对比,发现它们在不同的应用场景下各有优缺点。 一阶谓词逻辑适合复杂逻辑推理场景,具有数学定理证明、形式化系统规范的优点;产生式规则适合动态决策系统,支持实时决策(如风控、诊断),规…...
Vue2——常用指令总结、指令修饰符、v-model原理、computed计算属性、watch监听器、ref和$refs
文章目录 一、概念理解二、指令1. 常用内置指令总结2. 常用指令修饰符3. 自定义指令4. v-model原理表单类组件封装 三、补充1. computed计算属性2. watch监视器3. ref和$refs 一、概念理解 【事件处理函数】 事件处理函数应该写到一个跟data同级的配置项(methods&a…...
2025-3-29算法打卡
一,回文判定 1.题目描述: 题目描述 给定一个长度为 nn 的字符串 SS。请你判断字符串 SS 是否回文。 输入描述 输入仅 11 行包含一个字符串 SS。 1≤∣S∣≤1061≤∣S∣≤106,保证 SS 只包含大小写、字母。 输出描述 若字符串 SS 为回…...
【网络编程】搭建一个简单的UDP通信服务器和客户端
🦄个人主页:修修修也 🎏所属专栏:网络编程 ⚙️操作环境:VS Code (操作系统:Ubuntu 22.04 server 64bit) 目录 搭建UDP服务器 搭建UDP客户端 其余工程文件 主函数文件Main.cc 日志打印文件Log.hpp Makefile文件 结语 搭建UDP服务器 搭建UDP服务器的主要流…...
数据分析概述
数据分析:用适当的分析方法和挖掘方法对收集来的数据进行研究总结,提取有用的信息,形成结论并支持决策的过程。 一.数据分析的分类 1.业务描述性分析。以数据为分析对象,以探索数据内的有用信息为主要途径,以解决业务…...
【C#】C#字符串拼接的6种方式及其性能分析对比
C#字符串拼接的6种方式及其性能分析对比 前言BenchmarkDotNet拼接基础数据操作符$内插字符串String.FormatString.ConcatString.JoinStringBuilder性能基准对比测试完整代码少量字符串拼接大量字符串拼接 前言 在C#编程中字符串拼接是一种常见且基础的操作,广泛应用…...
图解AUTOSAR_SWS_SPIHandlerDriver
AUTOSAR SPI Handler/Driver 详解 AUTOSAR标准下的SPI通信模块详细设计与实现 目录 AUTOSAR SPI Handler/Driver 详解 目录1. AUTOSAR SPI模块概述 1.1 SPI模块的作用1.2 SPI模块在AUTOSAR中的位置1.3 SPI模块整体架构 2. SPI模块状态机 2.1 状态定义2.2 状态转换2.3 子状态机…...
华为HCIE网络工程师培训选机构攻略
从 官方授权机构 到 性价比黑马,结合价格、师资、通过率等维度,为你筛选出最适合的培训方案。 一、华为官方授权机构(优先推荐) 华为官方授权机构拥有 真机实验环境考官级讲师,适合预算充足、追求高通过率的学员。 机…...
【银河麒麟系统常识】命令:dotnet --list-sdks(列出已安装的 .NET SDK 版本)
命令: dotnet --list-sdks 功能 列出当前系统中所有已安装的 .NET SDK 版本; 返回值规则 # 1. 格式:<版本号>[<安装路径>]; # 2. 排序:按版本号从低到高排序;示例...
【数据仓库】湖仓一体的核心建模理论
湖仓一体(Lakehouse)是一种融合数据湖与数据仓库优势的新型架构,其建模理论在传统数据仓库与数据湖基础上进行了扩展和创新。以下从核心建模理论、关键技术支撑及与传统架构的差异三个维度进行解析: 一、湖仓一体的核心建模理论 …...
Go 语言规范学习(3)
文章目录 Properties of types and valuesRepresentation of valuesUnderlying types【底层类型】Core types【核心类型】Type identityAssignabilityRepresentabilityMethod sets BlocksDeclarations and scopeLabel scopesBlank identifierPredeclared identifiersExported i…...
基于django优秀少儿图书推荐网(源码+lw+部署文档+讲解),源码可白嫖!
摘要 时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,图书推荐网当然不能排除在外。本次开发的优秀少儿图书推荐网是在实际应用和软件工程的开发原理之上,运用Python语言、爬虫技术…...
CS2 DEMO导入blender(慢慢更新咯)
流程:cs2-sourcefilmmaker-blender 工具:cs2tools,cs2manager,blender,blender插件sourceio,source2viewer 导入sfm 工具界面 选择这个 sourceio插件 sourceIO其中新版本导入相机路径不见了,…...
SVTAV1函数分析-svt_av1_cost_coeffs_txb
一 函数作用 函数svt_av1_cost_coefss_txb是一个与AV1视频编码相关的函数,主要用于计算变换块(Transform Block)中系数的成本(Cost)。在视频编码中,特被是在AV1编码中,计算系数的成本对于模式决策(Mode Decision)和熵编码(Entropy Coding) 等…...
【Linux加餐-验证UDP:TCP】-windows作为client访问Linux
一、验证UDP-windows作为client访问Linux UDP client样例代码 #include <iostream> #include <cstdio> #include <thread> #include <string> #include <cstdlib> #include <WinSock2.h> #include <Windows.h>#pragma warning(dis…...
qt+opengl 加载三维obj文件
1前面我们已经熟悉了opengl自定义顶点生成一个立方体,并且我们实现了立方体的旋转,光照等功能。下面我们来用opengl来加载一个obj文件。准备我们首先准备一个简单的obj文件(head.obj)。资源在本页下载 2 在obj文件里面,…...
日报日报流量分析
快捷键 CtrlK,选择需要抓包的网卡 CtrlF可以进行关键字搜索 CtrlM,标记数据包 CtrlShiftN跳到标记处 查看包有多少协议Protocol Hierarchy(协议分级) 搜了一下TCP协议,是互联网最基本的协议࿰…...
SQL:CASE WHEN使用详解
文章目录 1. 数据转换与映射2. 动态条件筛选3. 多条件分组统计4. 数据排名与分级5. 处理空值与默认值6. 动态排序 CASE WHEN 语句在 SQL 中是一个非常强大且灵活的工具,除了常规的条件判断外,还有很多巧妙的用法,以下为你详细总结:…...
在 Unreal Engine 5 中制作类似《鬼泣5》这样的游戏时,角色在空中无法落地的问题可能由多种原因引起。
系列文章目录 文章目录 系列文章目录前言一、实现步骤二、涉及到的蓝图三、如何把敌人击飞到空中 前言 在 Unreal Engine 5 中制作类似《鬼泣5》这样的游戏时,角色在空中无法落地的问题可能由多种原因引起。 一、实现步骤 角色碰撞设置 确保角色的碰撞组件&…...
mapbox进阶,添加鹰眼图控件
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️mapboxgl-minimap 鹰眼控件二、🍀添加…...
k8s污点与容忍
k8s污点与容忍 k8s污点管理常用命令effect标记值查看污点添加污点删除污点 node污点与容忍污点容忍yaml示例容忍放大基于污点的驱逐驱逐时排除指定服务 设置master调度设置master尽量不调度允许master节点调度pod恢复Master Only状态将node标记为不可调度状态(节点警戒)设置nod…...
算法刷题记录——LeetCode篇(9.1) [第801~810题]
更新时间:2025-03-29 算法题解目录汇总:算法刷题记录——题解目录汇总技术博客总目录:计算机技术系列博客——目录页 优先整理热门100及面试150,不定期持续更新,欢迎关注! 801. 使序列递增的最小交换次数…...
AOA与TOA混合定位,MATLAB例程,自适应基站数量,三维空间下的运动轨迹,滤波使用EKF
本代码实现了一个基于 到达角(AOA) 和 到达时间(TOA) 的混合定位算法,结合 扩展卡尔曼滤波(EKF) 对三维运动目标的轨迹进行滤波优化。代码通过模拟动态目标与基站网络,展示了从信号测量、定位解算到轨迹滤波的全流程,适用于城市峡谷、室内等复杂环境下的定位研究。 文…...
【vllm/瞎折腾】在内网wsl上安装vllm并尝试多节点部署(失败了)
目录 说在前面miniconda安装外网创建虚拟环境创建节点一的虚拟环境创建节点二的虚拟环境 内网配置环境配置节点一的环境配置节点二的环境 vllm多节点配置节点一(主节点)配置节点二配置 部署LLM(失败)补充:wsl2设置ulimit补充:wsl安装libcuda补充…...
Mayo Clinic Platform在人工智能医疗领域的现状及启示意义研究
一、引言 1.1 研究背景与意义 在科技飞速发展的当下,人工智能(AI)已逐渐渗透至各个行业,医疗领域作为关乎人类生命健康的重要领域,也迎来了人工智能技术带来的深刻变革。人工智能医疗,作为人工智能与医疗行业深度融合的产物,正重塑着全球医疗的格局。 从全球范围来看,…...
k8s部署教程
Kubernetes 1. 使用Kubernetes部署Web服务器 我们的目标是部署三个实例,可以让用户直接访问。三个实例,这样即便一个崩溃了,也还有两个,比较不容易出问题。实际中你要根据自己的业务来判断。也就是说,我们需要一个…...
java基础:常见类和对象
1.常见类和对象: java.lang.Object类,Java中的每个类都直接或间接地继承自Object类,如果没有明确指定一个类继承另一个类,那么它的默认父类就是Object类; 例如多态: package java_jichu;public class ja…...
了解遗传算法的Matlab程序的奥妙之处
老板突然想要了解遗传算法的Matlab程序,我们需要先理清楚他们的需求。首先,老板可能对遗传算法有一定的了解,但不太清楚如何在Matlab中具体实现。他可能是一个学生或者研究人员,需要应用到某个项目中,比如优化问题。老板可能希望得到一个结构清晰的步骤说明,以及具体的代…...
Java学习------源码解析之StringBuilder
1. 介绍 String中还有两个常用的类,StringBuffer和StringBuilder。这两个类都是专门为频繁进行拼接字符串而准备的。最先出现的是StringBuffer,之后到jdk1.5的时候才有了StringBuilder。 2. StringBuilder解析 从这张继承结构图可以看出: S…...
【漫话机器学习系列】163.方差膨胀因子(Variance Inflation Factor, VIF)
方差膨胀因子(Variance Inflation Factor, VIF)详解 1. 什么是方差膨胀因子? 方差膨胀因子(Variance Inflation Factor, VIF)是一种用于衡量回归分析中多重共线性(Multicollinearity)程度的指…...
蓝桥杯省模拟赛 字符串拼接
问题描述 给定四个字符串 a,b,c,d,请将这四个字符串按照任意顺序依次连接拼成一个字符串。 请问拼成的字符串字典序最小是多少? 输入格式 输入四行,每行包含一个字符串。 输出格式 输出一行包含一个字符串,表示答案。 样例…...