PL/SQL学习笔记

介绍

PL/SQL 编程语言是SQL 和 Oracle 关系数据库的过程扩展语言
是Oracle 编程环境中的一个工具

基本语法

S.No

Sections & Description

1

Declarations

此部分以关键字 DECLARE 开头。 它是一个可选部分,定义了程序中要使用的所有变量、游标、子程序和其他元素。

2

Executable Commands

此部分包含在关键字 BEGINEND 之间,它是必填部分。 它由程序的可执行 PL/SQL 语句组成。 它应该至少有一个可执行的代码行,可能只是一个NULL 命令,表示什么都不应该被执行。

3

Exception Handling

本节以关键字 EXCEPTION 开头。 此可选部分包含处理程序中的错误的异常

Declare (定义变量)

Begin (定义逻辑)

ExcepTion (异常处理)

End(流程结束)

每个 PL/SQL 语句都以分号 (;) 结束。 PL/SQL 块可以使用 BEGINEND 嵌套在其他 PL/SQL 块中。 以下是 PL/SQL 块的基本结构 −

DECLARE 
   <declarations section> 
BEGIN 
   <executable command(s)>
EXCEPTION 
   <exception handling> 
END;

标识符(java里的变量名,常量名等这一类名)

在PL/SQL中,标识符是用来命名变量、常量、游标、过程、函数、包、触发器、表类型、异常等程序元素的名称。它们是程序员为了识别和引用特定对象而自定义的名称。

举例说明:

  1. 变量(Variables)
    • 示例:声明一个名为 employee_name 的变量用于存储员工姓名。
Sql
1DECLARE
2    employee_name VARCHAR2(50);
3BEGIN
4    -- 一些操作...
5    employee_name := 'John Doe';
6END;
  1. 常量(Constants)
    • 示例:声明一个名为 MAX_EMPLOYEES 的常量表示公司最大员工数限制。
Sql
1DECLARE
2    MAX_EMPLOYEES CONSTANT NUMBER := 500;
3BEGIN
4    -- 使用常量进行逻辑判断
5    IF some_count <= MAX_EMPLOYEES THEN
6        -- 执行某些操作...
7    END IF;
8END;
  1. 游标(Cursors)
    • 示例:声明一个名为 emp_cursor 的游标来遍历员工表中的记录。
Sql
1DECLARE
2    CURSOR emp_cursor IS
3        SELECT * FROM employees WHERE department_id = 10;
4    v_employee_row employees%ROWTYPE;
5BEGIN
6    OPEN emp_cursor;
7    LOOP
8        FETCH emp_cursor INTO v_employee_row;
9        EXIT WHEN emp_cursor%NOTFOUND;
10        -- 处理每一行数据
11        DBMS_OUTPUT.PUT_LINE(v_employee_row.first_name || ' ' || v_employee_row.last_name);
12    END LOOP;
13    CLOSE emp_cursor;
14END;
  1. 过程(Procedures)
    • 示例:声明一个名为 update_salary 的过程,接受员工ID和新的薪水作为参数。
Sql
1CREATE OR REPLACE PROCEDURE update_salary (
2    p_employee_id IN employees.employee_id%TYPE,
3    p_new_salary  IN NUMBER
4) IS
5BEGIN
6    UPDATE employees SET salary = p_new_salary WHERE employee_id = p_employee_id;
7END update_salary;
  1. 函数(Functions)
    • 示例:声明一个名为 get_total_salary 的函数,返回指定部门所有员工的总薪水。
Sql
1CREATE OR REPLACE FUNCTION get_total_salary (
2    p_department_id IN departments.department_id%TYPE
3) RETURN NUMBER IS
4    total_salary NUMBER := 0;
5BEGIN
6    SELECT SUM(salary) INTO total_salary FROM employees WHERE department_id = p_department_id;
7    RETURN total_salary;
8END get_total_salary;

每个标识符必须遵循Oracle PL/SQL的命名规则:

  • 标识符的第一个字符必须是字母、下划线 (_) 或美元符号 ($)。
  • 其余字符可以是字母、数字、下划线或美元符号。
  • 标识符长度不能超过30个字符(在Oracle数据库12c及更高版本中,对于全局临时表空间中的对象,标识符长度可扩展至128个字符)。
  • 标识符默认不区分大小写,但在Oracle数据库中可以通过设置数据库的初始化参数来实现区分大小写(通常不建议这样做)。

PL/SQL各种符号(; = + - 等等)

分隔符

描述

+, -, *, /

加法、减法/否定、乘法、除法

%

属性指示符

'

字符串分隔符

.

组件选择器

(,)

表达式或列表分隔符

:

主变量指示符

,

项目分隔符

"

带引号的标识符分隔符

=

关系运算符

@

远程访问指示器

;

语句终止符

:=

赋值运算符

=>

关联运算符

||

连接运算符

**

指数运算符

<<, >>

标签分隔符(开始和结束)

/*, */

多行注释分隔符(开始和结束)

--

单行注释指示器

..

范围运算符

<, >, <=, >=

关系运算符

<>, '=, ~=, ^=

不等于的不同版本

PL/SQL 注释

单行注释:--

多行注释:/* */

数据类型(等价于java的int,string这个)

SCALAR(包含NUMBER、DATE 或 BOOLEAN等)

没有内部组件的单个值,例如 NUMBER、DATE 或 BOOLEAN。

Large Object (LOB)指向型数据类型

指向与其他数据项(例如文本、图形图像、视频剪辑和声音波形)分开存储的大型对象的指针。

标量数据类型

PL/SQL 提供了数据类型的子类型。 例如,数据类型 NUMBER 有一个称为 INTEGER 的子类型。 您可以在 PL/SQL 程序中使用子类型来使数据类型与其他程序中的数据类型兼容,同时将 PL/SQL 代码嵌入到另一个程序中,例如 Java 程序。

Numeric(对其执行算术运算的数值)

Character(表示单个字符或字符串的字母数字值。)

Boolean(对其执行逻辑操作的逻辑值。)

Datetime(日期和时间。)

PL/SQL 字符数据类型和子类型

以下是 PL/SQL 预定义字符数据类型及其子类型的详细信息 −

S.No

数据类型与描述

1

CHAR

最大长度为 32,767 字节的定长字符串

2

VARCHAR2

最大长度为 32,767 字节的可变长度字符串

3

RAW

最大大小为 32,767 字节的可变长度二进制或字节字符串,不由 PL/SQL 解释

4

NCHAR

最大长度为 32,767 字节的定长国家字符串

5

NVARCHAR2

最大长度为 32,767 字节的可变长度国家字符串

6

LONG

最大长度为 32,760 字节的可变长度字符串

7

LONG RAW

最大大小为 32,760 字节的可变长度二进制或字节字符串,不由 PL/SQL 解释

8

ROWID

物理行标识,普通表中的行地址

9

UROWID

通用行标识符(物理、逻辑或外部行标识符)

PL/SQL 数值数据类型和子类型

下表列出了 PL/SQL 预定义的数值数据类型及其子类型 −

S.No

数据类型与描述

1

PLS_INTEGER

-2,147,483,648 到 2,147,483,647 范围内的有符号整数,以 32 位表示

2

BINARY_INTEGER

-2,147,483,648 到 2,147,483,647 范围内的有符号整数,以 32 位表示

3

BINARY_FLOAT

单精度 IEEE 754 格式浮点数

4

BINARY_DOUBLE

双精度 IEEE 754 格式浮点数

5

NUMBER(prec, scale)

绝对值在 1E-130 到(但不包括)1.0E126 范围内的定点或浮点数。 一个 NUMBER 变量也可以表示 0

6

DEC(prec, scale)

ANSI 特定定点类型,最大精度为 38 位十进制数字

7

DECIMAL(prec, scale)

IBM 特定定点类型,最大精度为 38 位十进制数字

8

NUMERIC(pre, secale)

浮点型,最大精度为 38 位十进制数字

9

DOUBLE PRECISION

ANSI 特定浮点类型,最大精度为 126 位二进制位(约 38 位十进制位)

10

FLOAT

ANSI 和 IBM 特定的浮点类型,最大精度为 126 位二进制位(大约 38 位十进制位)

11

INT

ANSI 特定整数类型,最大精度为 38 位十进制数字

12

INTEGER

ANSI 和 IBM 特定整数类型,最大精度为 38 位十进制数字

13

SMALLINT

ANSI 和 IBM 特定整数类型,最大精度为 38 位十进制数字

14

REAL

浮点型,最大精度为 63 位二进制(约 18 位十进制)

PL/SQL 布尔数据类型

BOOLEAN 数据类型存储用于逻辑运算的逻辑值。 逻辑值是布尔值 TRUEFALSE 以及值 NULL

但是,SQL 没有与 BOOLEAN 等效的数据类型。 因此,布尔值不能用于 −

  • SQL 语句
  • 内置 SQL 函数(如 TO_CHAR
  • 从 SQL 语句调用的 PL/SQL 函数

PL/SQL 日期时间和间隔类型

DATE 数据类型用于存储固定长度的日期时间,其中包括自午夜以来的时间(以秒为单位)。 有效日期范围从公元前 4712 年 1 月 1 日到公元 9999 年 12 月 31 日。

默认日期格式由 Oracle 初始化参数 NLS_DATE_FORMAT 设置。 例如,默认值可能是"DD-MON-YY",其中包括一个两位数的月份日期、月份名称的缩写和年份的最后两位数。 例如,01-OCT-12。

每个 DATE 包括世纪、年、月、日、小时、分钟和秒。 下表显示了每个字段的有效值 −

字段名称

有效日期时间值

有效区间值

YEAR

-4712 到 9999(不包括第 0 年)

任意非零整数

MONTH

01 to 12

0 to 11

DAY

01 到 31(受 MONTH 和 YEAR 的值限制,根据 locale 的日历规则)

任意非零整数

HOUR

00 到 23

0 到 23

MINUTE

00 到 59

0 到 59

SECOND

00 到 59.9(n),其中 9(n) 是时间小数秒的精度

0 到 59.9(n),其中 9(n) 是间隔小数秒的精度

PL/SQL 大对象 (LOB) 数据类型

大型对象 (LOB) 数据类型是指大型数据项,例如文本、图形图像、视频剪辑和声音波形。 LOB 数据类型允许对这些数据进行高效、随机、分段的访问。 以下是预定义的 PL/SQL LOB 数据类型 −

数据类型

描述

大小

BFILE

用于将大型二进制对象存储在数据库外的操作系统文件中。

取决于系统。 不能超过 4 GB。

BLOB

用于在数据库中存储大型二进制对象。

8 到 128 太字节 (TB)

CLOB

用于在数据库中存储大块字符数据。

8 到 128 TB

NCLOB

用于在数据库中存储大块 NCHAR 数据。

8 到 128 TB

PL/SQL 中的 NULL 空值

PL/SQL NULL 值表示缺失未知数据,它们不是整数、字符或任何其他特定数据类型。 请注意,NULL 与空数据字符串或空字符值 '\0' 不同。 可以分配一个空值,但它不能等同于任何东西,包括它自己。

使用示例

DECLARE 
   num1 INTEGER; 
   num2 REAL; 
   num3 DOUBLE PRECISION; 
BEGIN 
   null; 
END; 
/ 

变量(类似于实现类定义的一个个String name = "zhangsan";)

变量是我们的程序可以操作的存储区域的名称。 PL/SQL 中的每个变量都有特定的数据类型,它决定了变量内存的大小和布局

变量声明的语法

个数
variable_name [CONSTANT] datatype [NOT NULL] [:= | DEFAULT initial_value] 

人话:(备注:也可给变量类型添加大小)
1:变量名称   变量类型 := 变量值
2:变量名称   变量类型 default 变量值
2:变量名称   变量类型 not null default 变量值    (添加约束变量)
3:变量名称   变量类型;     (初始化后为null)


示例:
declare
    message varchar2(20) := 'hello word!';
    message varchar2(20) default 'hello word!';
    message varchar2(20) not null := 'hello word!';
    message varchar2(20);
begin
    DBMS_OUTPUT.PUT_LINE(message);
END;
DECLARE 
   a integer := 10; 
   b integer := 20; 
   c integer; 
   f real; 
BEGIN 
   c := a + b; 
   dbms_output.put_line('Value of c: ' || c); 
   f := 70.0/3.0; 
   dbms_output.put_line('Value of f: ' || f); 
END; 
/  

打印:
Value of c: 30 
Value of f: 23.333333333333333333  

PL/SQL procedure successfully completed. 

变量的作用域(等价于JAVA的作用域)

PL/SQL 允许嵌套块,即每个程序块可以包含另一个内部块。 如果变量在内部块中声明,则外部块无法访问它。

  • Local 局部变量 − 在内部块中声明且外部块无法访问的变量。
  • Global 全局变量 − 在最外层块或包中声明的变量。
declare
    -- 全局变量
    message1 varchar2(20)          := 'hello word!';
    message2 varchar2(20) default 'hello word!';
    message3 varchar2(20) not null := 'hello word!';
    message4 varchar2(20);
begin
    --      DBMS_OUTPUT.PUT_LINE(message1 || message5); 这里没法成功,因为message5是局部变量
    -- 局部变量
    declare
        message5 varchar2(20);
    begin
        DBMS_OUTPUT.PUT_LINE(message1 || message5);
    end;
END;

%TYPE 引用型变量(引用表字段数据类型,随表字段变化而变化)

%TYPE 关键字用于声明一个变量,并让其数据类型与数据库中的某个列相同。这样做的好处是,如果表结构发生变化(例如,列的数据类型改变),相关的变量也会自动适应新的数据类型,无需手动修改代码。
DECLARE
    -- 声明一个名为 emp_salary 的变量,其数据类型与 employees 表的 salary 列相同
    emp_salary employees.salary%TYPE;
    
    v_employee_id employees.employee_id%TYPE := 100; -- 假设我们有一个已知的员工ID
BEGIN
    SELECT salary INTO emp_salary FROM employees WHERE employee_id = v_employee_id;
    DBMS_OUTPUT.PUT_LINE('Employee Salary: ' || emp_salary);
END;

%ROWTYPE 记录型变量(引用表 一行的 数据)

%ROWTYPE 关键字用于声明一个记录类型变量,该变量包含了对应表中一行的所有列及其相应的数据类型。它可以用来一次性处理表中的整行数据。
DECLARE
    -- 声明一个名为 emp_record 的变量,其数据类型与 employees 表的一行记录完全一致
    emp_record employees%ROWTYPE;
BEGIN
    -- 通过主键查询员工记录并填充到记录型变量中
    SELECT * INTO emp_record FROM employees WHERE employee_id = 100;

    -- 输出员工的姓名和薪水
    DBMS_OUTPUT.PUT_LINE('Employee Name: ' || emp_record.first_name || ' ' || emp_record.last_name);
    DBMS_OUTPUT.PUT_LINE('Employee Salary: ' || emp_record.salary);
END;

INTO(表数据赋值给变量)

SELECT INTO 语句为 PL/SQL 变量赋值。 对于SELECT 列表 中的每一项,INTO 列表 中必须有一个对应的、类型兼容的变量。

DECLARE 
   c_id customers.id%type := 1; 
   c_name  customers.name%type; 
   c_addr customers.address%type; 
   c_sal  customers.salary%type; 
BEGIN 
   SELECT name, address, salary INTO c_name, c_addr, c_sal 
   FROM customers 
   WHERE id = c_id;  
   dbms_output.put_line 
   ('Customer ' ||c_name || ' from ' || c_addr || ' earns ' || c_sal); 
END; 
/

常量(一旦定义,不可改变)

语法

常量名  CONSTANT(常量关键字) 常量类型 := 常量值;

PI CONSTANT NUMBER := 3.141592654; 
DECLARE
2    -- 声明一个名为MAX_EMPLOYEES的常量,表示公司最大员工数限制
3    MAX_EMPLOYEES CONSTANT NUMBER := 500;
4
5    -- 声明一个名为PI的常量,用于存储圆周率
6    PI CONSTANT NUMBER := 3.14159265358979323846;
7
8BEGIN
9    -- 使用常量进行逻辑判断和计算
10    IF (SELECT COUNT(*) FROM employees) > MAX_EMPLOYEES THEN
11        DBMS_OUTPUT.PUT_LINE('公司员工数量超过最大限制:' || MAX_EMPLOYEES);
12    END IF;
13
14    -- 计算半径为1米的圆的面积
15    DECLARE
16        radius CONSTANT NUMBER := 1; -- 半径也为常量
17        circle_area NUMBER;
18    BEGIN
19        circle_area := PI * POWER(radius, 2);
20        DBMS_OUTPUT.PUT_LINE('半径为1米的圆面积是: ' || circle_area || ' 平方米');
21    END;
22END;

在字符串文字中嵌入单引号,请将两个单引号并排放置

DECLARE 
   message  varchar2(30):= 'That''s tutorialspoint.com!'; 
BEGIN 
   dbms_output.put_line(message); 
END; 
/  
That's tutorialspoint.com!  

条件判断语句

if then end if (单选)

IF (a <= 20 这个是条件表达式)
THEN c:= c+1;  如果为真执行Then后面的代码
END IF;  结束if判断

if then else end if (双选)

declare
   a number(2):=1;
Begin
    if a=1
        then a:= a+1;
        else a:= a+2;  上一个不成立,就走这给一个。经我测试,好像只能写一个else
        end if;
end;

if elsif then ...(多个elsif then) end if (多选)

declare
   a number(2):=1;
Begin
    if a=1 then a:= a+1;
    elsif (a= 2) then a:= a+2;
    elsif a= 3 then a:= a+3;
    elsif a= 4 then a:= a+4;
    end if;
end;

CASE 语句(等价IF,但是可以SQL语句用)

CASE selector 
   WHEN 'value1' THEN S1; 
   WHEN 'value2' THEN S2; 
   WHEN 'value3' THEN S3; 
   ... 
   ELSE Sn;  -- default case 
END CASE;
DECLARE 
   grade char(1) := 'B'; 
BEGIN 
   case  
      when grade = 'A' then dbms_output.put_line('Excellent'); 
      when grade = 'B' then dbms_output.put_line('Very good'); 
      when grade = 'C' then dbms_output.put_line('Well done'); 
      when grade = 'D' then dbms_output.put_line('You passed'); 
      when grade = 'F' then dbms_output.put_line('Better try again'); 
      else dbms_output.put_line('No such grade'); 
   end case; 
END; 
/

IF嵌套

DECLARE 
   a number(3) := 100; 
   b number(3) := 200; 
BEGIN 
   -- 检查布尔条件
   IF( a = 100 ) THEN 
   -- 如果条件为真,则检查以下内容
      IF( b = 200 ) THEN 
      -- 如果条件为真,则打印以下内容
      dbms_output.put_line('Value of a is 100 and b is 200' ); 
      END IF; 
   END IF; 
   dbms_output.put_line('Exact value of a is : ' || a ); 
   dbms_output.put_line('Exact value of b is : ' || b ); 
END; 
/ 

循环

Loop(java for循环)

loop 
  逻辑
exit when 终止循环条件
end loop;
declare
    x number(10) := 10;
begin
    Loop  (循环的固定格式)
        dbms_output.put_line(x); 
        x := x + 10;
        exit when x > 50; (exit when代表,如果x>50,则循环结束.每次+10,所以60结束循环)
    end loop;  (循环的固定格式)
    dbms_output.put_line('最后输出这句: x=' || x);   (这里最后输出:最后输出这句=60)
end ;
DECLARE 
   x number := 10; 
BEGIN 
   LOOP 
      dbms_output.put_line(x); 
      x := x + 10; 
      IF x > 50 THEN 
         exit; 
      END IF; 
   END LOOP; 
   -- after exit, control resumes here  
   dbms_output.put_line('After Exit x is: ' || x); 
END; 
/

WHILE (跟 java for循环 没区别)

备注:他这里不是输出刚好大于循环条件的值,而是输出最后一个符合循环条件的值。

如:条件a < 20,则a最后输出为19

while 终止循环条件 loop
  逻辑代码
end loop;
DECLARE 
   a number(2) := 10; 
BEGIN 
   WHILE a < 20 LOOP 
      dbms_output.put_line('value of a: ' || a); 
      a := a + 1; 
   END LOOP; 
END; 
/ 

备注:他这里最终会输出19.
      而不是20.如果是java先判断是19<20,然后打印语句,再接着执行19+1,然后while不成立,
      输出20.但这个pl/sql输出的是19

For(范围循环)

格式:
for  变量名  in  起始值 .. 结束值 loop

end loop 结束循环
DECLARE 
   a number(2); 
BEGIN 
   FOR a in 1 .. 3 LOOP 
      dbms_output.put_line('value of a: ' || a); 
  END LOOP; 
END; 
/

输出:value of a:1   value of a:2    value of a:3

reverse(For循环 加此 关键字 倒叙输出)

DECLARE 
   a number(2) ; 
BEGIN 
   FOR a IN REVERSE 1 .. 3 LOOP 
      dbms_output.put_line('value of a: ' || a); 
   END LOOP; 
END; 
/

输出:value of a:3   value of a:2    value of a:1

循环 关键字 解释

exit (立即结束当前循环)

Exit 语句完成循环并将控制传递给紧接在 END LOOP 之后的语句。

1:当在循环中遇到 EXIT 语句时,循环立即终止
2:嵌套循环,EXIT 语句将停止执行最内层循环并开始执行该块之后的下一行代码。
DECLARE 
   a number(2) := 10; 
BEGIN 
   -- while loop execution  
   WHILE a < 20 LOOP 
      dbms_output.put_line ('value of a: ' || a); 
      a := a + 1; 
      IF a > 15 THEN 
         -- terminate the loop using the exit statement 
         EXIT; 
      END IF; 
   END LOOP; 
END; 
/ 

value of a: 10 
value of a: 11 
value of a: 12 
value of a: 13 
value of a: 14 
value of a: 15  

exit when (立即结束当前循环)

Exit 语句完成循环并将控制传递给紧接在 END LOOP 之后的语句。

EXIT-WHEN 语句允许评估 WHEN 子句中的条件。 如果条件为真,则循环完成,控制权立即传递到 END LOOP 之后的语句。
DECLARE 
   a number(2) := 10; 
BEGIN 
   -- while loop execution  
   WHILE a < 20 LOOP 
      dbms_output.put_line ('value of a: ' || a);  
      a := a + 1; 
      -- terminate the loop using the exit when statement 
   EXIT WHEN a > 15; 
   END LOOP; 
END;   
/

value of a: 10 
value of a: 11 
value of a: 12 
value of a: 13 
value of a: 14 
value of a: 15  

continue(跳过当前,执行下一轮)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/448895.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++虚继承的一些细节

C虚继承的一些细节 何时使用虚继承普通继承的类对象布局虚继承类对象布局虚函数表指针虚函数表内容 何时使用虚继承 看代码&#xff0c;代码主要是菱形继承&#xff0c;base里面的成员变量会存在二义性 #include<iostream> using namespace std;class base { public:in…

客户案例|100M 768 维向量数据,Zilliz Cloud 稳定支持 Shulex VOC 业

日前&#xff0c;国际化 VOC SaaS 公司数里行间&#xff08;Shulex&#xff09;将上亿数据量的核心业务从开源向量数据库 Milvus 迁移至全托管的向量数据库云服务 Zilliz Cloud。 相比于 Milvus&#xff0c;Zilliz Cloud 实现了 Shulex VOC 评论分析洞察报告生成速度 30% 的提升…

第二十天-数据分析

1.介绍 1.什么是数据分析 1.以下4个纬度结合起来的数据科学 2.数据分析的特殊性

物体检测-系列教程23:YOLOV5 源码解析13 (SPP层、Flatten模块、Concat模块、Classify模块)

&#x1f60e;&#x1f60e;&#x1f60e;物体检测-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 点我下载源码 17、SPP模块 17.1 SPP类 SPP是一种特殊的池化策略&#xff0c;最初在YOLOv3-SPP中被使用…

Axuer的中继器~增删改查

目录 1. 中继器 2. 增加 3. 全选 4. 删除 5. 修改 6. 排序 7.分页 正文&#xff1a; 1.中继器&#xff1a;拉一个中继器给中继器名称写一个数据 在右边点击样式 写入数据 1.2 双击中继器进入动态页面 在里面放3个框 1.3 退出来 给中继器添加数据 2. 增加&#xff1…

研发效能DevOps: OpenEuler 部署 drone 持续集成平台

目录 一、实验 1.环境 2.OpenEuler 部署 drone 持续集成平台 二、问题 1.drone登录失败 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 系统架构版本IP备注LinuxopenEuler22.03 LTS SP2 192.168.204.145&#xff08;动态&#xff09; 192.168.204.141&…

使用maven打包执行install命令时候一直卡在No proxies configured不动,如何解决?

问题描述&#xff1a; [INFO] [INFO] — frontend-maven-plugin:1.9.1:install-node-and-npm (install node and npm) frontend — [INFO] Installing node version v16.0.0 [INFO] Copying node binary from D:\Maven\maven-repository\com\github\eirslett\node\16.0.0\node…

3.11_C++_day1_作业

作业要求&#xff1a; 程序代码&#xff1a; #include <iostream> #include <string.h>using namespace std;int main() {int a0,b0,c0,d0,e0;//分别记录字符串中的大写&#xff0c;小写&#xff0c;数字&#xff0c;空格&#xff0c;其他字符个数string str;cha…

Docker初体验之安装部署和镜像加速(openeuler版)

安装部署&#xff1a; 本人使用的为openeuler版本&#xff0c;无法使用二进制进行安装&#xff08;使用二进制安装时&#xff0c;无法使用docker中的补全命令&#xff0c;需要重新进行配置&#xff09;在此使用yum直接进行安装。 [rootlocalhost ~]# yum install docker 镜像…

java异常概述及自定义处理

前言 学到异常了&#xff0c;本来以为处理异常只是避免bug&#xff0c;结果发现还可以为了编程需要自定义异常。打好基础&#xff0c;daydayup! 异常 什么是异常 异常就是代表程序出现的问题 异常的体系 异常体系指的是java开发人员为了方便程序员使用所开发的异常类&#xff…

稀碎从零算法笔记Day10-LeecCode:赎金信

题型&#xff1a;哈希表、字符串 链接&#xff1a;383. 赎金信 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以…

探索数据可视化:Matplotlib 高级绘图功能(一)

双轴显示 import numpy as np import matplotlib.pyplot as pltx np.linspace(-np.pi, np.pi,50) y np.sin(x)plt.plot(x,y,color blue)# 设置 y 轴的刻度为从 -1 到 1 的 11 个等间距位置 _ plt.yticks(np.linspace(-1,1,11),color blue)ax plt.gca()# 获取当前视图 # …

PlantUML + VS Code

PlantUML 使用实例 文章目录 PlantUML 使用实例1. PlantUML简介1.1 什么是PlantUML1.2 PlantUML优势在哪 2. 怎么用2.1 环境依赖2.2 VS Code组件安装 3. 常用语法3.1 标记开始结束3.2 声明参与者3.3 声明关系3.4 对消息序列编号3.5 组合消息 4. 实例 1. PlantUML简介 1.1 什么…

vulhub靶场-matrix-breakout-2-morpheus

下载&部署 从官网中下载 https://www.vulnhub.com/entry/matrix-breakout-2-morpheus,757/ 下载完成后&#xff0c;在vmware中打开&#xff0c;选择刚刚下载的ova文件 vmware打开文件后需要将刚导入的机器重新启动 再检查下网卡是否是和kali在同一张网卡下就可以开始打靶了…

Jmter接口网站压力测试工具

首先下载Jmeter 官方地址&#xff1a;Apache JMeter - Apache JMeter™ 安装Jmeter 把下载的文件进行解压&#xff0c;产生如下目录&#xff1a; 打开bin文件夹下的jmeter.bat文件及进入程序的主界面窗体jmeter.log是日志文件。 主意&#xff1a;需要配置java环境。 jmter创…

解决虚拟机静态网址设置后还是变动的的问题

源头就是我的虚拟机静态网址设置好了以后但是网址还是会变动 这是我虚拟机的配置 vi /etc/sysconfig/network-scripts/ifcfg-ens33 这是出现的问题 进入这里 cd /etc/sysconfig/network-scripts/ 然后我去把多余的ens33的文件都删了 然后还不行 后来按照这个图片进行了下 然后…

权限管理系统-0.4.0

五、权限管理 5.1 引入JWT JWT是JSON Web Token的缩写&#xff0c;即JSON Web令牌&#xff0c;是一种自包含令牌。 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。 JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息&#xff0c;以…

STM32CubeIDE基础学习-STM32CubeIDE软件新增工程文件夹

STM32CubeIDE基础学习-STM32CubeIDE软件新增工程文件夹 文章目录 STM32CubeIDE基础学习-STM32CubeIDE软件新增工程文件夹前言第1章 添加文件夹第2章 添加文件路径2.1 相对路径方法2.2 绝对路径方法 总结 前言 在编程的过程中&#xff0c;如果需要在原有的工程基础上新增其它的…

C 嵌入式系统设计模式 24:安全性和可靠性介绍

本书的原著为&#xff1a;《Design Patterns for Embedded Systems in C ——An Embedded Software Engineering Toolkit 》&#xff0c;讲解的是嵌入式系统设计模式&#xff0c;是一本不可多得的好书。 本系列描述我对书中内容的理解。本文章描述嵌入式安全性和可靠性模式之一…

二叉搜索树题目:前序遍历构造二叉搜索树

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 解法三思路和算法代码复杂度分析 解法四思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;前序遍历构造二叉搜索树 出处&#xff1a;1008. …