PLSQL Developer:Oracle数据库管理与开发的强大工具
PLSQL Developer是一款为Oracle数据库开发人员量身定制的集成开发环境(IDE)。其提供了高效编码、调试、执行SQL语句及脚本的工具。它通过直观的用户界面和丰富的功能,简化了数据库应用程序的开发过程。
简介:PLSQL Developer是一个专为Oracle数据库管理员和开发人员设计的强大工具,支持PL/SQL代码的编写、调试、执行和优化。它提供了语法高亮、自动完成、代码折叠等编码特性,具有强大的调试功能,能够设置断点、逐步执行代码并查看变量。此外,它还支持直观的数据库对象管理、数据导入导出、版本控制集成、SQL性能分析、报表生成和任务调度等,界面友好且操作直观,极大地方便了数据库的日常管理工作。
1. PLSQL Developer概览与优势
PLSQL Developer简介
PLSQL Developer是一款为Oracle数据库开发人员量身定制的集成开发环境(IDE)。其提供了高效编码、调试、执行SQL语句及脚本的工具。它通过直观的用户界面和丰富的功能,简化了数据库应用程序的开发过程。
PLSQL Developer的核心优势
- 代码编写与管理 :提供代码自动完成、语法高亮显示和程序结构视图,加快开发速度。
- 数据库交互 :集成了数据浏览器、对象浏览器和SQL命令窗口,实现快速的数据检索、更新和数据库对象管理。
- 调试与性能优化 :强大的调试功能和性能监控工具,帮助开发者快速定位和解决问题,优化程序性能。
在接下来的章节中,我们将深入探讨PLSQL Developer的具体功能和优势,并了解如何在实际开发中应用这些功能以提高开发效率和代码质量。
2. PL/SQL语言支持与编码特性
在当今信息化快速发展的时代,数据库管理系统是企业数据存储与处理的核心。PL/SQL作为Oracle数据库的特有编程语言,在数据处理、事务管理和复杂查询方面提供了强大的支持。本章节我们将深入探讨PL/SQL语言的基础支持与编码特性,揭示它在现代软件开发中的作用。
2.1 PL/SQL语言基础
2.1.1 PL/SQL的语法结构
PL/SQL是块结构语言,这意味着PL/SQL代码被组织在一系列的块中,每个块都有自己的特定部分。每个块都可以包括声明部分、执行部分和异常处理部分。让我们通过一个简单的例子来理解这个结构:
DECLARE
v_counter NUMBER := 1;
BEGIN
WHILE v_counter < 10 LOOP
DBMS_OUTPUT.PUT_LINE('Counter is ' || v_counter);
v_counter := v_counter + 1;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Exception occurred: ' || SQLERRM);
END;
在上面的代码块中:
DECLARE
部分用于声明变量和类型。BEGIN...END;
块包含了实际执行的代码。EXCEPTION
部分用于处理在执行块中可能发生的任何错误。
PL/SQL通过块结构支持封装复杂的逻辑,并在这些块中管理变量、游标、控制结构和异常处理。
2.1.2 PL/SQL的数据类型和变量
PL/SQL提供了丰富的数据类型,用于存储不同类型的数据。它主要分为三大类:标量类型、复合类型和引用类型。
标量类型包括数字、字符和布尔类型。例如:
DECLARE
v_number NUMBER(5,2);
v_char CHAR(10);
v_boolean BOOLEAN;
BEGIN
v_number := 1234.56;
v_char := 'Hello World';
IF v_number > 0 THEN
v_boolean := TRUE;
ELSE
v_boolean := FALSE;
END IF;
END;
复合类型如记录和表允许我们存储多个值的集合。例如:
DECLARE
TYPE emp_record IS RECORD (
emp_id NUMBER,
emp_name VARCHAR2(100),
emp_salary NUMBER
);
v_emp emp_record;
BEGIN
SELECT emp_id, emp_name, emp_salary INTO v_emp FROM employees WHERE emp_id = 101;
END;
引用类型包括指针和集合类型,如表类型和数组,它们允许我们引用一组值。
理解这些数据类型对于编写高效且可靠的PL/SQL代码至关重要。正确的类型选择可以提高性能并减少编程错误。
2.2 PL/SQL的高级特性
2.2.1 面向对象编程的支持
PL/SQL支持面向对象编程(OOP),允许开发者创建对象类型,它们可以封装数据和方法。这使得代码更加模块化和可重用。例如:
CREATE OR REPLACE TYPE person_t AS OBJECT (
name VARCHAR2(100),
age NUMBER,
MEMBER FUNCTION get_description RETURN VARCHAR2
);
/
CREATE OR REPLACE TYPE BODY person_t AS
MEMBER FUNCTION get_description RETURN VARCHAR2 IS
BEGIN
RETURN 'Name: ' || name || ', Age: ' || age;
END;
END;
/
在上面的代码中,我们创建了一个 person_t
对象类型,它有一个属性和一个方法。我们可以实例化这个类型,并像使用普通PL/SQL记录一样使用它。
2.2.2 异常处理机制
异常处理是PL/SQL中处理错误和异常情况的强大机制。PL/SQL提供了内置的异常以及用户定义的异常。以下是一个简单的例子:
DECLARE
v_counter NUMBER;
BEGIN
v_counter := 1/0; -- 这将引发异常
EXCEPTION
WHEN ZERO_DIVIDE THEN
DBMS_OUTPUT.PUT_LINE('Caught ZERO_DIVIDE exception');
END;
在本例中,尝试除以零会触发 ZERO_DIVIDE
异常。在 EXCEPTION
块中,我们可以捕获并处理特定的异常,或者使用 WHEN OTHERS
来处理所有未处理的异常。
2.2.3 代码的模块化与重用
PL/SQL支持过程和函数的模块化,它们可以被声明在包中,从而实现代码的重用。例如:
CREATE OR REPLACE PACKAGE emp_pkg AS
PROCEDURE update_salary(emp_id NUMBER, amount NUMBER);
END;
/
CREATE OR REPLACE PACKAGE BODY emp_pkg AS
PROCEDURE update_salary(emp_id NUMBER, amount NUMBER) IS
BEGIN
UPDATE employees SET salary = salary + amount WHERE emp_id = emp_id;
IF SQL%NOTFOUND THEN
RAISE NO_DATA_FOUND;
END IF;
END;
END;
/
在这个例子中,我们创建了一个名为 emp_pkg
的包,其中包含了一个更新员工薪水的过程 update_salary
。通过将过程和函数放在包中,我们可以封装功能,并通过单一的接口来管理和重用它们。
这些高级特性的支持让PL/SQL不仅能够执行简单的数据处理任务,还能够构建复杂、可靠的数据库应用程序,符合现代软件开发的需求。
3. 强大的调试功能与错误修复
3.1 PLSQL Developer的调试工具
3.1.1 断点和步进功能
在软件开发中,调试是不可或缺的一环,它帮助开发者逐步追踪程序执行的流程,以发现和修正代码中的错误。PLSQL Developer为PL/SQL代码的调试提供了强有力的工具,尤其是断点和步进功能,它们是调试过程中的关键技术手段。
断点功能
断点允许开发者在特定的代码行停止执行程序,这样可以检查执行到该点时变量的值,以及程序状态。在PLSQL Developer中设置断点非常简单:
- 打开你想要调试的PL/SQL程序或存储过程。
- 在你希望程序暂停执行的行号左侧点击,将出现一个红色圆点,表示该行已设置为断点。
- 启动调试会话。点击工具栏上的“Debug Session”按钮或按F9。
当程序执行到该断点时,它会自动停止,此时可以检查和修改局部变量的值,或者观察程序执行路径。
步进功能
步进功能包括步入(Step Into)、步过(Step Over)和步出(Step Out),它们允许开发者以不同的粒度逐步执行程序。
- 步入(Step Into):如果当前执行行是一个函数或过程调用,则进入该函数或过程内部,逐行执行。
- 步过(Step Over):执行当前行,如果该行包含函数或过程调用,则该函数或过程整体执行完成后再停止。
- 步出(Step Out):如果在函数或过程中,执行至返回语句后停止。
这些步进操作通过工具栏按钮或快捷键(F7、F8、Ctrl+F7)来执行。
3.1.2 变量和执行堆栈的监控
在程序执行暂停时,能够查看和修改变量的值是非常重要的。PLSQL Developer提供了监控窗口来观察变量和程序执行堆栈。
- 变量窗口 :在调试过程中,变量窗口会列出当前作用域中的所有变量及其值。可以通过双击变量值来修改它们,这在需要强制改变程序执行逻辑时尤其有用。
- 执行堆栈窗口 :此窗口显示了当前调用堆栈的状态,即哪些过程或函数已被调用以及它们是如何被调用的。开发者可以使用这个窗口来在调用堆栈中向上或向下导航,查看不同层次的程序执行情况。
调试过程中的监控功能是确保代码正确性的重要手段,通过细致地观察执行情况和变量变化,开发者能够精确地定位问题并快速修复。
3.2 错误修复和代码优化
3.2.1 错误定位与修复技巧
在开发过程中定位错误是不可避免的,PLSQL Developer通过集成调试器来简化这一过程。定位错误首先需要了解错误的类型,比如语法错误、运行时错误等。通过PLSQL Developer,错误信息将直观显示在错误列表窗口中。
- 查看错误信息 :当发生错误时,PLSQL Developer会在输出窗口和错误列表中提供详细的错误描述和位置信息。
- 利用调试器信息 :结合断点、步进操作和变量监控,可以逐步查看代码的执行情况,找到导致错误的具体原因。
- 使用诊断工具 :例如,PLSQL Developer提供内存分析工具,帮助开发者监控内存使用情况,这对于诊断程序在运行时由于资源管理不当引发的错误非常有用。
一旦确定了错误的原因,修复通常很简单,可能只需要修改几行代码。在修复后,不要忘记通过测试来验证修复是否有效,确保新代码不会引入新的问题。
3.2.2 代码性能优化建议
性能优化是确保应用程序运行效率的关键步骤。在使用PLSQL Developer时,开发者可以通过以下方法优化PL/SQL代码:
- 分析执行计划 :执行计划能提供关于SQL语句如何被数据库优化器执行的详细信息。在PLSQL Developer中,可以通过“Explain Plan”功能生成执行计划并分析。
- 识别并优化慢查询 :慢查询分析是性能优化的重要部分。使用PLSQL Developer的SQL性能分析器,可以检测出执行时间长的SQL语句并进行优化。
- 利用SQL优化器提示 :通过在SQL语句中添加优化器提示,可以指导数据库优化器更有效地生成执行计划。
性能优化是一个循环过程,需要在实际应用环境中不断测试和调整。PLSQL Developer提供的工具和信息使这一过程更加高效。
以下是针对本小节内容的代码块示例,以及对应的参数说明和逻辑分析。
-- 示例:分析并优化一个慢查询SQL语句
SELECT /*+ index(e, idx_employee_name) */ *
FROM employees e
WHERE e.first_name = 'John';
/*+ index(e, idx_employee_name) */
: 这是一个SQL优化器提示,建议数据库使用idx_employee_name
这个索引来加速查询。- 参数说明:
employees
是表名,e
是该表的别名,first_name
是员工的名字字段。 - 逻辑分析:此示例中的提示强制使用了一个特定的索引来提高查询效率,尤其是在数据量较大时。执行后,可以通过查看执行计划来验证是否实际使用了该索引,并评估性能变化。
优化代码性能是一个持续的过程,要求开发者不断地测试、评估和调整。PLSQL Developer提供的分析工具为性能优化提供了强有力的辅助。
以上内容是第三章"强大的调试功能与错误修复"的部分章节内容。本章节详细介绍了PLSQL Developer的调试工具,包括断点和步进功能,以及变量和执行堆栈的监控,这些都是在调试阶段帮助开发者高效定位和解决问题的重要手段。同时,本章节还讨论了错误修复和代码优化的重要性,包括错误的定位与修复技巧,以及如何通过分析执行计划等方法来优化代码性能。通过具体的代码示例和操作步骤,本章节使读者能够深入理解并掌握PLSQL Developer在代码调试和优化方面的强大功能。
4. 数据库对象管理与操作便利性
数据库对象的操作是数据库开发和维护工作中不可或缺的部分,它们是构成数据库结构的基石。PLSQL Developer提供了丰富的功能来管理这些对象,旨在简化开发人员的工作流程。在本章节中,我们将深入探讨如何操作表、视图、索引以及存储过程和函数,同时也会了解PLSQL Developer对数据库对象版本控制的支持。
4.1 数据库对象的操作
4.1.1 表、视图和索引的操作
在关系型数据库中,表是最基本的数据存储结构。视图可以视为一个虚拟表,它基于SQL语句的结果集。索引则是一个单独的、可能的有序的数据结构,它包含了表中一列或多列的值,目的是加快数据的检索速度。
创建和修改表
要创建一个新的表,开发者可以使用PLSQL Developer的图形界面工具,输入表的名称、选择列的数据类型、定义约束等。这比纯SQL语句操作更为直观便捷。例如:
CREATE TABLE employees (
employee_id NUMBER(6) NOT NULL,
first_name VARCHAR2(20),
last_name VARCHAR2(25) NOT NULL,
email VARCHAR2(25) NOT NULL,
phone_number VARCHAR2(20),
hire_date DATE NOT NULL,
job_id VARCHAR2(10) NOT NULL,
salary NUMBER(8, 2),
commission_pct NUMBER(2, 2),
manager_id NUMBER(6),
department_id NUMBER(4)
);
在创建表之后,开发者可以使用PLSQL Developer提供的编辑工具对表结构进行修改,如添加或删除列、修改列属性等。
创建和管理视图
视图的创建相对简单,使用 CREATE VIEW
语句,通过定义一个查询语句即可。在PLSQL Developer中,可以使用图形界面定义视图的查询逻辑,并直接保存为视图对象。例如:
CREATE VIEW employee_view AS
SELECT employee_id, first_name, last_name, department_name
FROM employees
JOIN departments ON employees.department_id = departments.department_id;
要管理视图,开发者可以查询视图定义、编辑视图属性或删除不再需要的视图。
创建和管理索引
索引的创建是为了提高查询性能,通常在有大量数据的表上创建。开发者可以在PLSQL Developer中使用图形界面或SQL语句创建索引。例如:
CREATE INDEX idx_employee_last_name
ON employees (last_name);
PLSQL Developer也允许开发者管理已有的索引,包括重新构建索引、删除索引等。
4.1.2 存储过程和函数的管理
存储过程和函数是数据库中封装了逻辑的代码块,能够复用代码,提高开发效率。PLSQL Developer提供了对这些代码对象的直观管理功能。
创建和维护存储过程
要创建存储过程,开发者需要提供过程的名称、输入参数、输出参数以及过程体。在PLSQL Developer中,可以使用存储过程向导,输入这些信息后,工具会生成相应的SQL代码。
CREATE OR REPLACE PROCEDURE add_employee (
p_first_name VARCHAR2,
p_last_name VARCHAR2,
p_email VARCHAR2,
p_phone_number VARCHAR2,
p_hire_date DATE,
p_job_id VARCHAR2,
p_salary NUMBER,
p_commission_pct NUMBER,
p_manager_id NUMBER,
p_department_id NUMBER,
o_employee_id OUT NUMBER
) AS
BEGIN
INSERT INTO employees (employee_id, first_name, last_name, email, phone_number,
hire_date, job_id, salary, commission_pct, manager_id, department_id)
VALUES (employees_seq.NEXTVAL, p_first_name, p_last_name, p_email, p_phone_number,
p_hire_date, p_job_id, p_salary, p_commission_pct, p_manager_id, p_department_id)
RETURNING employee_id INTO o_employee_id;
END add_employee;
开发者可以运行存储过程,检查执行结果,并进行必要的调试。
创建和维护函数
函数与存储过程类似,但是它必须返回一个值。使用PLSQL Developer的函数向导可以创建函数,并定义返回类型。
CREATE OR REPLACE FUNCTION get_employee_name (p_employee_id IN NUMBER) RETURN VARCHAR2 IS
v_employee_name VARCHAR2(50);
BEGIN
SELECT first_name || ' ' || last_name INTO v_employee_name
FROM employees
WHERE employee_id = p_employee_id;
RETURN v_employee_name;
END get_employee_name;
函数创建后,开发者可以查询函数定义,编辑函数或删除不再使用的函数。
4.2 数据库对象的版本控制
版本控制是数据库管理中的一项重要功能,它允许开发者跟踪和管理对象的更改历史,以及解决版本冲突。
4.2.1 对象版本的跟踪与比较
PLSQL Developer内嵌了版本控制工具,可以跟踪每个数据库对象的更改历史。开发者可以比较不同版本之间的差异,以查看自上次检出以来所发生的更改。
对象版本比较
在PLSQL Developer中,开发者可以打开两个对象的版本进行比较,查看SQL语句的差异。这个功能非常有用于代码审查,确保每次更改都经过仔细审查。
4.2.2 版本合并和冲突解决
当多个开发者对同一个数据库对象进行更改时,版本合并和冲突解决机制显得尤为重要。PLSQL Developer提供了一个图形化的工具来帮助开发者解决这些冲突。
解决合并冲突
如果两个版本之间存在冲突,PLSQL Developer将高亮显示这些冲突部分,允许开发者选择如何解决这些冲突。可以保留某个版本的更改,或者合并两个版本的更改。
flowchart TD
A[版本A] -->|比较| C{冲突?}
B[版本B] -->|比较| C
C -- 是 --> D[解决冲突]
C -- 否 --> E[合并版本]
D --> F[保存新版本]
E --> F[保存新版本]
表格展示版本控制的特性
| 特性 | 描述 | | --- | --- | | 版本历史 | 查看对象更改的完整历史记录 | | 对比功能 | 比较对象的任意两个版本之间的差异 | | 合并工具 | 帮助开发者合并不同版本间的更改 | | 冲突解决 | 高亮显示冲突并提供解决选项 |
通过以上分析,我们了解了PLSQL Developer在数据库对象管理方面提供的强大功能,包括数据库对象的操作和版本控制的便利性。这些功能大大简化了数据库开发和维护的工作,使得开发者能够以更高效、更安全的方式进行数据库对象的管理。
5. 集成版本控制系统支持团队协作
在当今的软件开发领域,团队合作和版本控制是不可或缺的环节。PLSQL Developer通过集成各种版本控制系统的支持,大大提升了开发团队的协作效率。本章节将深入探讨PLSQL Developer如何与版本控制系统集成,以及如何基于此集成来实施团队协作的最佳实践。
5.1 版本控制系统集成
5.1.1 版本控制系统的概念与优势
版本控制系统(VCS)是一类帮助软件开发团队记录和管理源代码变更历史的工具。这些工具允许开发者协同工作,而不会互相干扰。它们还支持代码的版本回滚、分支开发和合并,以及查看代码变更的历史记录。
版本控制的优势在于:
- 历史记录 :追踪文件的变更历史,可以追溯到任何版本。
- 协作 :允许多个开发者在同一个项目上工作,而不会相互冲突。
- 分支管理 :支持创建分支进行新特性开发,并且可以合并回主分支。
- 审查 :代码可以被其他团队成员审查,以保持代码质量。
5.1.2 集成常见版本控制工具的方法
PLSQL Developer支持与流行的版本控制系统集成,包括但不限于Git、Subversion(SVN)和CVS。以下是集成这些系统的基本步骤:
- 安装和配置 :首先确保所需的版本控制系统已在开发环境中安装并正确配置。
- 下载插件 :在PLSQL Developer中下载并安装对应的版本控制插件。
- 设置连接 :配置PLSQL Developer与版本控制系统的连接,这通常包括认证信息、仓库地址等参数的配置。
- 初始化项目 :在PLSQL Developer中初始化本地项目,连接到版本控制系统中的相应项目或仓库。
5.2 团队协作的最佳实践
5.2.1 代码审查和注释的标准
代码审查是确保软件质量和维护编码标准的重要环节。在进行代码审查时,以下标准应当被团队成员遵循:
- 清晰性 :确保注释清晰描述了代码的目的和功能。
- 一致性 :保持注释风格和格式的一致性,以保持项目整洁和可读。
- 及时性 :在代码发生变化时,及时更新相关注释和文档。
5.2.2 分支管理和合并策略
分支管理是版本控制中的关键实践,有助于隔离不同的开发线和实验性更改。在分支管理上,推荐以下策略:
- 主分支 :只有经过充分测试的代码才能合并到主分支。
- 功能分支 :为每个新特性或修复创建独立的功能分支。
- 合并请求 :通过合并请求(Merge Request)或拉取请求(Pull Request)来讨论和合并代码。
在分支合并过程中,建议使用PLSQL Developer提供的合并工具来处理可能出现的冲突,并确保合并后的代码仍然保持一致性和稳定性。
6. 性能分析工具与数据库监控
数据库性能优化是保证系统稳定运行的关键步骤,而有效的性能分析工具和数据库监控功能是提高数据库管理效率的重要手段。在本章中,我们将深入了解PLSQL Developer在性能分析和数据库监控方面的强大功能。
6.1 性能分析工具
6.1.1 执行计划的分析和解读
PLSQL Developer提供了直观的执行计划分析工具,允许开发者查看特定SQL语句的执行步骤、访问路径、操作的数据库对象以及统计信息。这些信息有助于识别查询效率低下的原因。
-- 示例SQL语句
SELECT * FROM employees WHERE department_id = 10;
通过执行上述查询语句,在PLSQL Developer的“执行计划”标签页中,我们可以看到以下内容:
- 行源操作 :描述SQL语句的具体执行步骤。
- 成本 :每个步骤的估算执行成本,有助于衡量资源消耗。
- 对象 :SQL语句中使用的数据库对象(如表、索引)。
- 提示 :优化器是否使用了执行计划提示。
分析执行计划时,我们应该关注那些成本较高的步骤,并检查是否有潜在的性能瓶颈。比如,如果一个步骤显示全表扫描,可能意味着需要建立索引来改善性能。
6.1.2 SQL性能的优化建议
性能分析不仅仅是识别问题,还应该提供解决问题的方案。PLSQL Developer在识别出效率低下的查询后,会给出优化建议。
- 索引建议 :如果发现全表扫描,工具可以推荐创建哪些索引。
- 重写查询 :提供改写查询的建议,以减少数据的检索量。
- 调整数据库设置 :如内存分配或并行度的调整。
例如,通过分析工具,你可能会得到如下建议:
- 在
employees
表上建立department_id
的索引。 - 重构查询,使用
JOIN
代替子查询以提高效率。
6.2 数据库监控功能
6.2.1 实时监控数据库性能指标
PLSQL Developer集成了实时监控功能,允许数据库管理员跟踪关键性能指标,如CPU使用率、内存使用情况和I/O活动。
| 指标名称 | 当前值 | 最大值 | 单位 | | -------------- | ------ | ------ | ---- | | CPU Utilization | 55% | 100% | % | | Memory Used | 2GB | 16GB | GB | | I/O Read | 2MB/s | N/A | MB/s |
实时监控功能通过图表形式提供数据,管理员能够快速识别出系统负载的异常情况,并采取相应的响应措施。
6.2.2 系统资源使用情况的跟踪
除了性能指标的实时监控外,PLSQL Developer还提供了历史数据的跟踪分析。这使得用户可以查看过去特定时间段内的资源使用情况,并进行趋势分析。
-- 示例输出
时间范围:2023-01-01 00:00:00 至 2023-01-02 00:00:00
时间段 CPU Utilization (平均) Memory Used (平均)
2023-01-01 00:00 65% 1.8GB
2023-01-01 02:00 72% 2.1GB
2023-01-01 04:00 68% 2.0GB
通过对历史数据的分析,我们可以发现是否存在周期性的性能问题,或者是否存在某个操作导致资源使用激增。系统资源使用情况的跟踪功能,是优化数据库性能和规划未来扩展的重要依据。
在本章中,我们重点讨论了PLSQL Developer在性能分析和数据库监控方面提供的工具。通过以上内容的介绍,我们可以看到PLSQL Developer不仅是一个高效的编码和调试平台,也是数据库性能优化和监控的得力助手。在接下来的章节中,我们将继续探索PLSQL Developer提供的其他高级功能。
简介:PLSQL Developer是一个专为Oracle数据库管理员和开发人员设计的强大工具,支持PL/SQL代码的编写、调试、执行和优化。它提供了语法高亮、自动完成、代码折叠等编码特性,具有强大的调试功能,能够设置断点、逐步执行代码并查看变量。此外,它还支持直观的数据库对象管理、数据导入导出、版本控制集成、SQL性能分析、报表生成和任务调度等,界面友好且操作直观,极大地方便了数据库的日常管理工作。

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)