19.Oracle11g中的游标

oracle11g中的游标

  • 一、案例引入
  • 二、什么是游标
  • 三、隐式游标
    • 1、隐式游标的属性
    • 2、创建语法
    • 3、示例
  • 四、显示游标
    • 1、显示游标的属性
    • 2、创建语法
    • 3、示例
  • 五、REF游标
    • 1、REF游标的属性
    • 2、创建语法
    • 3、示例
  • 六、循环游标
    • 1、 循环游标的作用
    • 2、用for 与 loop 创建
    • 3、示例

在这里插入图片描述

一、案例引入

假设我们有一个名为employee的表,其中存储了员工的信息,包括员工ID、姓名、部门和工资等。现在我们需要编写一个PL/SQL存储过程,用于计算每个部门的平均工资,并将结果输出到控制台。在这个业务案例中,我们可以使用游标来实现这个逻辑,因为需要对每个部门进行单独的计算并输出结果。

首先,让我们创建一个名为employee的示例表,并插入一些数据:

CREATE TABLE employee (
    employee_id NUMBER,
    employee_name VARCHAR2(100),
    department VARCHAR2(100),
    salary NUMBER
);

INSERT INTO employee (employee_id, employee_name, department, salary) VALUES (1, 'Alice', 'HR', 3000);
INSERT INTO employee (employee_id, employee_name, department, salary) VALUES (2, 'Bob', 'HR', 3500);
INSERT INTO employee (employee_id, employee_name, department, salary) VALUES (3, 'Charlie', 'IT', 4000);
INSERT INTO employee (employee_id, employee_name, department, salary) VALUES (4, 'David', 'IT', 3800);
INSERT INTO employee (employee_id, employee_name, department, salary) VALUES (5, 'Eve', 'IT', 4200);

接下来,我们可以编写一个存储过程,使用游标计算每个部门的平均工资,并将结果输出到控制台:

CREATE OR REPLACE PROCEDURE calculate_average_salary IS
  -- 声明游标
  CURSOR department_cursor IS
    SELECT department, AVG(salary) AS avg_salary
    FROM employee
    GROUP BY department;
  -- 声明游标变量
  department_name employee.department%TYPE;
  avg_salary NUMBER;
BEGIN
  -- 打开游标
  OPEN department_cursor;
  -- 循环处理结果集
  LOOP
    FETCH department_cursor INTO department_name, avg_salary;
    EXIT WHEN department_cursor%NOTFOUND;
    -- 在这里可以处理每一行数据,例如打印到控制台
    DBMS_OUTPUT.PUT_LINE('Department: ' || department_name || ', Average Salary: ' || avg_salary);
  END LOOP;
  -- 关闭游标
  CLOSE department_cursor;
END;
/

在上面的示例中,我们首先声明了一个名为department_cursor的游标,它用于查询每个部门的平均工资。然后在存储过程中打开游标,使用循环逐行从游标中获取数据,并在循环中处理每一行数据,最后关闭游标。当我们调用calculate_average_salary存储过程时,它会计算每个部门的平均工资,并将结果输出到控制台。

这个示例演示了如何使用游标在Oracle中处理业务逻辑,通过游标,我们可以更灵活地处理查询结果集中的数据,实现更复杂的数据操作逻辑。

二、什么是游标

在Oracle 11g中,游标是一种用于在PL/SQL程序中处理查询结果集的数据结构。它允许程序员在程序中对查询结果集进行逐行处理,可以用来遍历和操作查询结果集中的数据。游标可以分为隐式游标、显式游标、 REF 游标

  • 隐式游标:

    1. 隐式游标是在PL/SQL块中执行SELECT语句时自动创建和管理的,程序员无需显式声明和使用。
    2. 隐式游标的查询结果集会被自动保存在系统生成的游标中,程序员可以直接在PL/SQL块中对结果集进行处理。
    3. 通过检查隐式游标的属性可以获得最近执行的DML 语句的信息。

  • 显式游标则需要程序员显式地声明和使用,通常包括以下步骤:

    1. 声明游标:使用DECLARE语句声明游标,指定查询语句和游标的名称。
    2. 打开游标:使用OPEN语句打开游标,执行查询语句并将结果集保存在游标中。
    3. 循环处理结果集:使用FETCH语句从游标中逐行获取数据,并在循环中处理每一行数据。
    4. 关闭游标:使用CLOSE语句关闭游标,释放游标占用的资源。

  • REF 游标:REF 游标用于处理运行时才能确定的动态 SQL 查询的结果

通过游标,程序员可以更灵活地处理查询结果集中的数据,实现更复杂的数据操作逻辑。因此,游标在Oracle 11g中广泛应用于PL/SQL程序中对查询结果集进行处理。

三、隐式游标

1、隐式游标的属性

隐式游标是在PL/SQL块中执行SELECT语句时自动创建和管理的,程序员无需显式声明和使用。隐式游标的属性包括以下几个方面:

  1. %ROWCOUNT:返回最近一次执行的SQL语句所影响的行数。
  2. %FOUND:如果最近一次FETCH语句成功获取了一行数据,则返回TRUE;否则返回FALSE。
  3. %NOTFOUND:如果最近一次FETCH语句未成功获取一行数据,则返回TRUE;否则返回FALSE。
  4. %ISOPEN:如果隐式游标当前处于打开状态,则返回TRUE;否则返回FALSE。

这些属性可以在PL/SQL块中直接使用,用于判断查询结果集的状态和影响行数等信息。例如,可以使用%ROWCOUNT获取受影响的行数,使用%FOUND%NOTFOUND判断是否成功获取了数据行,使用%ISOPEN判断游标是否处于打开状态。

2、创建语法

隐式游标的语法非常简单,它可以在PL/SQL的FOR循环语句中使用SELECT语句来隐式创建和使用游标。FOR循环语句的语法如下:

FOR loop_index IN select_statement LOOP
  -- 在这里处理每一行数据
END LOOP;

其中,loop_index是循环索引变量,它会在每次循环迭代中自动赋值为查询结果集中的一行数据。select_statement是SELECT语句,它用于查询数据并返回结果集。

3、示例

下面是一个简单的示例,演示了如何在PL/SQL中使用隐式游标:

CREATE OR REPLACE PROCEDURE calculate_order_total_amount IS
BEGIN
  -- 使用隐式游标,在FOR循环中迭代处理查询结果
  FOR order_rec IN (SELECT customer_id, SUM(order_amount) AS total_amount FROM orders GROUP BY customer_id) LOOP
    -- 在这里可以处理每一行数据,例如打印到控制台
    DBMS_OUTPUT.PUT_LINE('Customer ID: ' || order_rec.customer_id || ', Total Amount: ' || order_rec.total_amount);
  END LOOP;
END;
/

在上面的示例中,我们使用了一个隐式游标来处理查询结果集中的数据。在FOR循环中,我们使用了一个SELECT语句来查询所有订单的总金额,并按客户ID分组。在循环中,PL/SQL引擎会自动创建一个隐式游标来执行SELECT语句,并迭代处理查询结果集中的数据。在循环中,我们可以使用order_rec变量来访问每一行数据的字段值,并对数据进行处理。

需要注意的是,隐式游标只能用于一次性使用的简单查询,如果需要对结果集进行多次迭代或进行复杂的数据操作,建议使用显式游标来实现。

四、显示游标

当使用显式游标时,可以通过游标属性来访问有关游标的信息,包括游标的状态、当前行的数据等。下面是关于显式游标的属性、创建语法和应用场景的详细介绍,包含具体代码示例。

1、显示游标的属性

显式游标具有以下几个常用的属性:

  • %FOUND:如果最近的FETCH语句成功获取了一行数据,则为TRUE;否则为FALSE。
  • %NOTFOUND:如果最近的FETCH语句未能成功获取一行数据,则为TRUE;否则为FALSE。
  • %ROWCOUNT:返回最近的OPEN、FETCH或CLOSE语句所涉及的行数。
  • %ISOPEN:如果游标是打开状态,则为TRUE;否则为FALSE。

这些属性可以帮助开发人员在处理游标时了解游标的状态和当前行的数据。

2、创建语法

创建显式游标的语法如下:

DECLARE
  CURSOR cursor_name IS
    select_statement;

其中,cursor_name 是游标的名称,select_statement 是 SELECT 语句,用于定义游标要查询的数据集。

3、示例

显式游标适用于以下场景:

  • 需要对查询结果集进行多次迭代处理。
  • 需要在不同的地方打开和关闭游标,或者在不同的地方获取游标的状态信息。
  • 需要在游标的生命周期中手动控制游标的状态。
  1. 下面是一个具体的代码示例,演示了显式游标的属性、创建语法和应用场景:

    CREATE OR REPLACE PROCEDURE process_employee_salary IS
      -- 声明显式游标
      CURSOR emp_cursor IS
        SELECT employee_id, employee_name, salary FROM employees;
      emp_rec emp_cursor%ROWTYPE; -- 声明一个记录类型的变量,用于存储游标返回的数据
    
    BEGIN
      -- 打开游标
      OPEN emp_cursor;
    
      -- 获取游标的状态信息
      IF emp_cursor%ISOPEN THEN
        DBMS_OUTPUT.PUT_LINE('Cursor is open');
      END IF;
    
      -- 迭代处理查询结果集
      LOOP
        FETCH emp_cursor INTO emp_rec; -- 获取游标返回的数据
        EXIT WHEN emp_cursor%NOTFOUND; -- 当没有更多数据时退出循环
        -- 处理数据,例如打印到控制台
        DBMS_OUTPUT.PUT_LINE('Employee ID: ' || emp_rec.employee_id || ', Name: ' || emp_rec.employee_name || ', Salary: ' || emp_rec.salary);
      END LOOP;
    
      -- 获取行数
      DBMS_OUTPUT.PUT_LINE('Total rows processed: ' || emp_cursor%ROWCOUNT);
    
      -- 关闭游标
      CLOSE emp_cursor;
    
      -- 获取游标的状态信息
      IF NOT emp_cursor%ISOPEN THEN
        DBMS_OUTPUT.PUT_LINE('Cursor is closed');
      END IF;
    
    END;
    /
    

    在上面的示例中,我们创建了一个名为 emp_cursor 的显式游标,用于查询员工表中的数据。在过程中,我们打开了游标,使用 FETCH 语句迭代处理查询结果集,获取了游标的状态信息,获取了行数,并在最后关闭了游标。这个示例展示了显式游标的属性、创建语法和应用场景。

  2. 带参数的显示游标案例
    以下是一个带参数的游标示例,其中我们使用参数来过滤查询结果集:

    -- 创建带参数的游标
    DECLARE
      CURSOR student_cursor (grade_param NUMBER) IS
        SELECT xh, xm
        FROM student
        WHERE grade = grade_param;
      xh_val student.xh%TYPE;
      xm_val student.xm%TYPE;
      grade_val NUMBER := 1; -- 设置参数的默认值
    BEGIN
      -- 打开游标
      OPEN student_cursor(grade_val);
      
      -- 迭代处理查询结果集
      LOOP
        FETCH student_cursor INTO xh_val, xm_val;
        EXIT WHEN student_cursor%NOTFOUND;
        
        -- 处理查询结果,例如打印到控制台
        DBMS_OUTPUT.PUT_LINE('Student ID: ' || xh_val || ', Name: ' || xm_val);
      END LOOP;
      
      -- 关闭游标
      CLOSE student_cursor;
    END;
    /
    

    在上面的示例中,我们创建了一个带参数的游标 student_cursor,该游标接受一个名为 grade_param 的参数,并用于过滤查询结果集。我们在声明游标时指定了参数,并在打开游标时传入参数的值。这样就可以根据参数的值来过滤查询结果集,实现了带参数的游标功能。

五、REF游标

在Oracle数据库中,REF游标是一种特殊类型的游标,用于处理具有引用类型的数据。以下是关于REF游标的属性、创建语法和应用场景的详细介绍,包含具体代码示例。

1、REF游标的属性

REF游标具有以下常用属性:

  • %FOUND:如果最近的FETCH语句成功获取了一行数据,则为TRUE;否则为FALSE。
  • %NOTFOUND:如果最近的FETCH语句未能成功获取一行数据,则为TRUE;否则为FALSE。
  • %ROWCOUNT:返回最近的OPEN、FETCH或CLOSE语句所涉及的行数。
  • %ISOPEN:如果游标是打开状态,则为TRUE;否则为FALSE。

这些属性与普通显式游标的属性相似,用于获取游标的状态信息。

2、创建语法

创建REF游标的语法如下:

DECLARE
  CURSOR cursor_name IS
    SELECT REF(column_name) FROM table_name;

其中,cursor_name 是游标的名称,column_name 是包含引用类型数据的列名,table_name 是包含引用类型数据的表名。

3、示例

REF游标适用于以下场景:

  • 处理包含引用类型数据的表,例如使用对象类型或嵌套表类型。
  • 需要在游标中返回引用类型数据的引用。
  • 需要在游标的生命周期中手动控制游标的状态。

下面是一个具体的代码示例,演示了REF游标的属性、创建语法和应用场景:

CREATE OR REPLACE PROCEDURE process_ref_cursor IS
  -- 声明REF游标
  CURSOR ref_cursor IS
    SELECT REF(e) FROM employees e;
  emp_ref employees%ROWTYPE; -- 声明一个记录类型的变量,用于存储引用类型数据的引用

BEGIN
  -- 打开游标
  OPEN ref_cursor;

  -- 获取游标的状态信息
  IF ref_cursor%ISOPEN THEN
    DBMS_OUTPUT.PUT_LINE('REF Cursor is open');
  END IF;

  -- 迭代处理查询结果集
  LOOP
    FETCH ref_cursor INTO emp_ref; -- 获取游标返回的引用数据
    EXIT WHEN ref_cursor%NOTFOUND; -- 当没有更多数据时退出循环
    -- 处理引用数据,例如打印到控制台
    DBMS_OUTPUT.PUT_LINE('Employee Name: ' || emp_ref.last_name);
  END LOOP;

  -- 获取行数
  DBMS_OUTPUT.PUT_LINE('Total rows processed: ' || ref_cursor%ROWCOUNT);

  -- 关闭游标
  CLOSE ref_cursor;

  -- 获取游标的状态信息
  IF NOT ref_cursor%ISOPEN THEN
    DBMS_OUTPUT.PUT_LINE('REF Cursor is closed');
  END IF;

END;
/

在上面的示例中,我们创建了一个名为 ref_cursor 的REF游标,用于查询包含引用类型数据的员工表。在过程中,我们打开了REF游标,使用 FETCH 语句迭代处理查询结果集,获取了游标的状态信息,获取了行数,并在最后关闭了游标。这个示例展示了REF游标的属性、创建语法和应用场景。

六、循环游标

循环游标是一种在数据库中遍历结果集的方法。它可以用于迭代处理查询结果,对每一行数据执行特定的操作。以下是关于循环游标的详细介绍:

1、 循环游标的作用

循环游标的作用是遍历查询结果集中的数据,并对每一行数据执行特定的操作。这种遍历方式允许开发人员逐行处理结果集,执行复杂的业务逻辑,或者将结果集中的数据进行进一步处理。

  • 数据处理:循环游标常用于对查询结果进行逐行处理,例如计算、数据转换等。
  • 数据校验:可以使用循环游标来逐行校验查询结果,确保数据的完整性和准确性。
  • 数据导出:通过循环游标,可以逐行将查询结果导出到其他数据源或文件中。

2、用for 与 loop 创建

使用循环游标,有两种常见的创建语法,一种是使用 FOR 循环,另一种是使用 LOOP 循环。

  • 使用 FOR 循环创建循环游标的语法如下所示:

    DECLARE
      variable1 datatype;
      variable2 datatype;
    BEGIN
      FOR rec IN (SELECT column1, column2, ... FROM table_name WHERE condition) LOOP
        variable1 := rec.column1;
        variable2 := rec.column2;
        -- 在此处处理查询结果
      END LOOP;
    END;
    /
    
  • 使用 LOOP 循环创建循环游标的语法如下所示:

    DECLARE
      CURSOR cursor_name IS
        SELECT column1, column2, ...
        FROM table_name
        WHERE condition;
      variable1 datatype;
      variable2 datatype;
    BEGIN
      OPEN cursor_name;
      LOOP
        FETCH cursor_name INTO variable1, variable2, ...;
        EXIT WHEN cursor_name%NOTFOUND;
        -- 在此处处理查询结果
      END LOOP;
      CLOSE cursor_name;
    END;
    /
    

3、示例

以下是一个具体的示例代码,演示了使用 FOR 循环和 LOOP 循环创建循环游标,并遍历查询结果集:

  • 使用 FOR 循环:

    DECLARE
      xh_val student.xh%TYPE;
      xm_val student.xm%TYPE;
    BEGIN
      FOR rec IN (SELECT xh, xm FROM student) LOOP
        xh_val := rec.xh;
        xm_val := rec.xm;
        DBMS_OUTPUT.PUT_LINE('Student ID: ' || xh_val || ', Name: ' || xm_val);
      END LOOP;
    END;
    /
    

    这段代码是一个 PL/SQL 块,用于遍历名为 student 的表中的数据,并输出学生的学号和姓名到控制台。具体解释如下:

    • DECLARE:声明部分,用于声明变量和游标。
    • xh_val student.xh%TYPE;:声明一个变量 xh_val,其类型与表 student 中的 xh 字段相同。
    • xm_val student.xm%TYPE;:声明一个变量 xm_val,其类型与表 student 中的 xm 字段相同。
    • BEGIN:开始部分,标志着 PL/SQL 块的开始。
    • FOR rec IN (SELECT xh, xm FROM student) LOOP:使用 FOR 循环创建一个游标 rec,并执行 SELECT 语句以从表 student 中获取学号和姓名。
    • xh_val := rec.xh;:将当前行的学号赋值给变量 xh_val
    • xm_val := rec.xm;:将当前行的姓名赋值给变量 xm_val
    • DBMS_OUTPUT.PUT_LINE('Student ID: ' || xh_val || ', Name: ' || xm_val);:输出当前行的学号和姓名到控制台。
    • END LOOP;:结束 FOR 循环。
    • END;:PL/SQL 块的结束。
  • 使用 LOOP 循环:

    DECLARE
      CURSOR student_cursor IS
        SELECT xh, xm
        FROM student;
      xh_val student.xh%TYPE;
      xm_val student.xm%TYPE;
    BEGIN
      OPEN student_cursor;
      LOOP
        FETCH student_cursor INTO xh_val, xm_val;
        EXIT WHEN student_cursor%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE('Student ID: ' || xh_val || ', Name: ' || xm_val);
      END LOOP;
      CLOSE student_cursor;
    END;
    /
    

    这段代码是一个 PL/SQL 块,用于遍历名为 student 的表中的数据,并输出学生的学号和姓名到控制台。具体解释如下:

    • DECLARE:声明部分,用于声明变量和游标。
    • CURSOR student_cursor IS SELECT xh, xm FROM student;:声明一个名为 student_cursor 的游标,用于从表 student 中选择学号和姓名。
    • xh_val student.xh%TYPE;:声明一个变量 xh_val,其类型与表 student 中的 xh 字段相同。
    • xm_val student.xm%TYPE;:声明一个变量 xm_val,其类型与表 student 中的 xm 字段相同。
    • BEGIN:开始部分,标志着 PL/SQL 块的开始。
    • OPEN student_cursor;:打开游标 student_cursor
    • LOOP:开始一个循环,用于逐行处理查询结果。
    • FETCH student_cursor INTO xh_val, xm_val;:从游标中获取下一行数据,并将学号和姓名赋值给对应的变量。
    • EXIT WHEN student_cursor%NOTFOUND;:如果游标中没有更多的数据,则退出循环。
    • DBMS_OUTPUT.PUT_LINE('Student ID: ' || xh_val || ', Name: ' || xm_val);:输出当前行的学号和姓名到控制台。
    • END LOOP;:结束循环。
    • CLOSE student_cursor;:关闭游标 student_cursor
    • END;:PL/SQL 块的结束。

    在上面的示例中,我们演示了使用 FOR 循环和 LOOP 循环创循环游标,并遍历查询结果集,将学生的学号和姓名逐行输出到控制台。

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

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

相关文章

基于可微分渲染器的相机位置优化【PyTorch3D】

在这个教程中,我们将使用可微渲染学习给定参考图像的相机的 [x, y, z] 位置。 我们将首先使用相机的起始位置初始化渲染器。 然后,我们将使用它来生成图像,使用参考图像计算损失,最后通过整个管道进行反向传播以更新相机的位置。…

【开源】基于Vue+SpringBoot的企业项目合同信息系统

项目编号: S 046 ,文末获取源码。 \color{red}{项目编号:S046,文末获取源码。} 项目编号:S046,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 合同审批模块2.3 合…

Flask Echarts 实现历史图形查询

Flask前后端数据动态交互涉及用户界面与服务器之间的灵活数据传递。用户界面使用ECharts图形库实时渲染数据。它提供了丰富多彩、交互性强的图表和地图,能够在网页上直观、生动地展示数据。ECharts支持各种常见的图表类型,包括折线图、柱状图、饼图、散点…

FFmepg 核心开发库及重要数据结构与API

文章目录 前言一、FFmpeg 核心开发库二、FFmpeg 重要数据结构与 API1、简介2、FFmpeg 解码流程①、FFmpeg2.x 解码流程②、FFmpeg4.x 解码流程 3、FFMpeg 中比较重要的函数以及数据结构①、数据结构②、初始化函数③、音视频解码函数④、文件操作⑤、其他函数 三、FFmpeg 流程1…

【活动回顾】sCrypt在柏林B2029开发者周

B2029 是柏林的一个区块链爱好者、艺术家和建设者聚会,学习、讨论和共同构建比特币区块链地方。 在2023年6月9日至11日,举行了第7次Hello Metanet研讨会。本次研讨会旨在为参与者提供一个学习、讨论和共同构建比特币区块链的平台。 在这个充满激情和创意…

C语言:输出所有“水仙花数”。“水仙花数”是指一个3位数,其各位数字的立方和等于该数本身,如153=1^3 +5^3+3^3

分析: 在主函数 main 中,程序首先定义四个整型变量 m、a、b 和 c,并用于计算和判断水仙花数。然后使用 printf 函数输出提示信息。 接下来,程序使用 for 循环结构,从 100 到 999 遍历所有三位数。对于每个遍历到的数 m…

Vue简易的车牌输入键盘,可以根据需要修改

效果图如下&#xff1a; 代码如下&#xff1a; <template><div><div class"carNoBoxInput"><div style"padding: 6px;border: 2px solid #fff;border-radius: 6px;margin: 6px 3px 6px 6px;"><input class"inputBox"…

Make sure bypassing Vue built-in sanitization is safe here.

一、问题描述 二、问题分析 XSS(跨站脚本攻击) XSS攻击通常指的是通过利用网页开发时留下的漏洞&#xff0c;通过巧妙的方法注入恶意指令代码到网页&#xff0c;使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript&#xff0c;但实际上也可以包括J…

https到底把什么加密了?

首先直接说结论&#xff0c; https安全通信模式&#xff0c;是使用TLS加密传输所有的http协议。再重复一遍&#xff0c;是所有&#xff01; 通常将TLS加密传输http这个通信过程称为https&#xff0c;如果使用协议封装的逻辑结构来表达就是&#xff1a; IP TCP TLS 【 HTTP 】…

大连大学2023年11月程序设计竞赛(同步赛)

B、爆wa种子!&#xff08;数学&#xff09; 一、题目要求 链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 爆wa种子发现了上次玩游戏时你和妙wa种子的py交易&#xff0c;所以他要求这次玩游戏你来当爆wa种子的枪手&#xff0c;为他写个程序…

前端 --- HTML

目录 一、网络的三大基石 ​二、什么是HTML 一、HTML 指的是超文本标记语言 二、HTML的作用 三、HTML的标准结构 四、IDE_HBuilder的使用 一、编码工具&#xff1a; 二、集成开发环境 三、HBuilder使用步骤&#xff1a; 五、HTML的标签的使用 一、html_head_body 二、head…

CSS新手入门笔记整理:CSS字体样式

字体类型&#xff1a;font-family 语法 font-family&#xff1a;字体1,字体2,...,字体n; font-family可以指定多种字体。使用多个字体时&#xff0c;将按从左到右的顺序排列&#xff0c;并且以英文逗号&#xff08;,&#xff09;隔开。如果我们不定义font-family&#xff0c…

viple模拟器使用(三):unity模拟器中实现沿右墙迷宫算法

沿右墙迷宫算法 引导 线控模拟可以使得通过用户手动操作&#xff0c;实现机器人在模拟环境下在迷宫中行走&#xff08;即&#xff1a;运动&#xff09;&#xff0c;算法可以使得机器人按照一定的策略自动行走&#xff0c;沿右墙迷宫算法就是其中的一种策略。 目的 运行程序后&…

Scrapy框架内置管道之图片视频和文件(一篇文章齐全)

1、Scrapy框架初识&#xff08;点击前往查阅&#xff09; 2、Scrapy框架持久化存储&#xff08;点击前往查阅&#xff09; 3、Scrapy框架内置管道 4、Scrapy框架中间件&#xff08;点击前往查阅&#xff09; Scrapy 是一个开源的、基于Python的爬虫框架&#xff0c;它提供了…

3D模型纹理集合并【Python|C#】

使用 Substance Painter 时&#xff0c;将模型的各个部分分成不同的纹理集非常有用。 这可以帮助遮罩&#xff0c;或者只是保持层栈干净。 不幸的是&#xff0c;Painter 无法将多个纹理集中的所有贴图导出为单个图集&#xff0c;即使在创建单独对象的 UV 时考虑到了这一点。 显…

Django创建基本的app应用并配置URL路径-成功运行服务

开发环境&#xff1a;Pycharm2021 Win11 首先创建虚拟环境: 可参考&#xff1a; Pycharm开发环境下创建python运行的虚拟环境&#xff08;自动执行安装依赖包&#xff09;_pycharm自动下载依赖包_heda3的博客-CSDN博客 1、安装 Django 在虚拟环境下安装pip install django …

ES 8.x开始(docker-compose安装、kibana使用、java操作)

学习文档地址 一、Docker安装 这里使用docker-compose来安装&#xff0c;方便后续迁移&#xff0c;Elasticserach和kibina一起安装。 1、创建安装目录 configdataplugins 2、配置文件 配置文件有两个&#xff0c;一个是ES的配置文件&#xff0c;一个docker-compose的配置文件 …

DS图—图的最短路径/Dijkstra算法【数据结构】

DS图—图的最短路径/Dijkstra算法【数据结构】 题目描述 给出一个图的邻接矩阵&#xff0c;输入顶点v&#xff0c;用迪杰斯特拉算法求顶点v到其它顶点的最短路径。 输入 第一行输入t&#xff0c;表示有t个测试实例 第二行输入顶点数n和n个顶点信息 第三行起&#xff0c;每行…

龙芯loongarch64服务器编译安装pyarrow

1、简介 pyarrow是一个高效的Python库,用于在Python应用程序和Apache Arrow之间进行交互。Arrow是一种跨语言的内存格式,可以快速高效地转移大型数据集合。它提供了一种通用的数据格式,将数据在内存中表示为表格,并支持诸如序列化和分布式读取等功能。 龙芯的Python仓库安…

Mo0n(月亮) MCGS触摸屏在野0day利用,强制卡死锁屏

项目:https://github.com/MartinxMax/Mo0n 后面还会不会在,我可就不知道了奥…还不收藏点赞关注 扫描存在漏洞的设备 #python3 Mo0n.py -scan 192.168.0.0/24 入侵锁屏 #python3 Mo0n.py -rhost 192.168.0.102 -lock 解锁 #python3 Mo0n.py -rhost 192.168.0.102 -unlock …