技术干货
GBASE数据库
这个作者很懒,什么都没留下…
展开
-
南大通用GBase 8a数据库迁移的几种方法探讨
方案额外空间集群架构IP操作难度备注1、备份恢复要求完全相同完全相同简单标准工具,支持增量2、导出导入要求无要求无要求复杂性能好,但需要落地,调度复杂3、同步工具不要求主分片数量相同无要求简单性能好,支持增量,简单易用4、物理文件复制不要求完全相同完全相同复杂不好区分副本,建议少量数据时使用4、DBLink不要求无要求无要求中等逻辑层复制性能差另外一次性迁移,结构要求相同的方案,可以考虑先搭建相同结构的集群,待迁移完毕后再扩容。原创 2024-05-28 13:27:30 · 1024 阅读 · 0 评论 -
干货分享 | GBase 8c 分布式核心技术初揭秘—CDC数据同步
本文主要介绍GBase 8c数据库中CDC技术的架构及其实现原理。原创 2022-11-01 17:27:55 · 438 阅读 · 0 评论 -
GBase 8c分布式核心技术初揭秘—在线扩容
为了解决此类问题,南大通用GBase 8c多模多态分布式数据库增强了其在线扩容/缩容的能力。原创 2022-09-15 11:23:44 · 147 阅读 · 0 评论 -
GBASE观察:扩展分析型数据库
随着大数据应用的发展,企业需要处理的数据量爆炸式增长,同时面临数据的结构也越来越灵活多样。原创 2022-06-22 16:16:31 · 260 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.8
9.8 总结可将 SQL 语句写入程序内,如同它们是不同的编程语言的语句那样。可在 WHERE 子句中使用程序变量,可将来自数据库的数据访存到它们之内。预处理器将 SQL 代码翻译为过程调用和数据结构。编写不返回数据的语句,或仅返回一行数据的查询,就像该语言的普通命令语句一样。可返回多行的查询与表示当前数据行的游标相关联。通过游标,程序可根据需要访存数据的每一行。将静态 SQL 语句写入程序的文本内。然而,程序在它运行时动态地形成新的 SQL 语句,并执行它们。在最先进的情况下,程序可获得.原创 2022-05-30 12:14:51 · 108 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.7.1
9.7.1 指定角色或者,DBA 可使用 CREATE ROLE 语句定义一个角色,并使用 GRANT 和 REVOKE 语句来将角色分配给用户或取消,以及授予和撤销角色权限。例如:GRANT engineer TO nmartin;需要 SET ROLE 语句来激活非缺省的角色。要获取关于角色和权限的更多信息,请参阅 访问管理策略 和 对数据库级对其对象的权限。要获取关于这些语句的语法的更多信息,请参阅《GBase 8s SQL 指南:语法》。...原创 2022-05-30 12:13:51 · 93 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.7(3)
如果数据库服务器跟在 PREPARE 语句之后在 SQLCODE 中返回错误代码,则该函数显示错误消息。如果数据库服务器认可该语句的形式,则它设置零返回值。此活动并不保证正确地执行该语句;它仅意味着该语句的语法正确。它可能引用不存在的表或某些种类仅可在执行期间才能检测到的错误。该示例的下列部分在执行之前检查 the_grant 是否准备成功了:if(SQLCODE == 0)EXEC SQL EXECUTE the_grant;elseprintf("Sorry, got error ...原创 2022-05-30 12:12:57 · 161 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.7(2)
下列示例展示的该函数的打开语句指定它的名称及其三个参数。这三个参数指定要授予的权限、对其授予权限的表的名称,以及要接收它们的用户的 ID。table_grant(priv_to_grant, table_name, user_id)char *priv_to_grant;char *table_name;char *user_id;该函数使用下例中的语句来定义本地变量 grant_stmt,使用其来组合并保存 GRANT 语句:EXEC SQL BEGIN DECLARE SECTION...原创 2022-05-30 12:11:58 · 75 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.7(1)
9.7 授予和撤销应用程序中的权限反复地执行与数据定义相关的一个任务:授予和撤销权限。由于必须频繁地授予和撤销权限,有可能是由不熟悉 SQL 的用户操作,因此一种策略是将 GRANT 和 REVOKE 语句打包在程序中,来提供给他们更简单、更方便的用户接口。GRANT 和 REVOKE 语句特别适合于动态 SQL。每一语句采用下列参数:• 一个或多个权限的列表• 表名称• 用户的名称您可能至少需要基于程序输入(来自于用户、命令行参数或文件)提供这些值的一部分,但都不可以主变量的形式提供。这原创 2022-05-30 12:10:53 · 142 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.6
9.6 嵌入数据定义语句数据定义语句是创建数据库和修改表的定义的 SQL 语句,通常将这些语句放在程序内。原因是很少执行它们。数据库只创建一次,但会多次查询和更新它。使用 DB-Access,一般都是交互地完成数据库及其表的创建。还可从语句的文件运行这些工具,因此可使用操作系统命令来完成数据库创建。在 GBase 8s SQL 指南:语法中描述数据定义语句。...原创 2022-05-30 12:09:45 · 89 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.5.5
9.5.5 快速执行对于不需要游标或主变量的简单语句,您可将 PREPARE、EXECUTE 和 FREE 语句组合到单个操作内。下列示例展示 EXECUTE IMMEDIATE 语句如何获取字符串、准备它、执行它,并释放一个操作中的存储:EXEC SQL execute immediate 'drop index my_temp_index';此能力使得编写简单 SQL 语句更轻松。然而,由于不允许使用 USING 子句,EXECUTEIMMEDIATE 语句不可用于 SELECT 语句。.原创 2022-05-30 12:08:54 · 154 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.5.4
9.5.4 释放准备好的语句准备好的 SQL 语句占据内存中的空间。对于某些数据库服务器,它可消耗数据库服务器拥有的空间以及属于该程序的空间。当程序终止时,释放此空间,但通常您应在使用完此空间时就释放它。您可使用 FREE 语句来释放此空间。FREE 语句采用语句的名称,或为语句名称声明了的游标的名称,并释放分配给准备好的语句的空间。如果在该语句上定义多个游标,则释放该语句不会释放游标。...原创 2022-05-30 12:05:32 · 102 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.5.3
9.5.3 动态主变量支持动态地分配数据对象的 SQL API 进动态语句更进一步。它们允许您动态地分配接收列数据的主变量。变量的动态分配使得有可能从程序输入中取到任意的 SELECT 语句,确定它产生多少个值及其数据类型,并分配适当类型的主变量来保存它们。此功能的关键是 DESCRIBE 语句。它取到准备好的 SQL 语句的名称,并返回关于该语句及其内容的信息。它设置 SQLCODE 来指定语句的类型;即,它开头的动词。如果准备好的语句是 SELECT 语句,则 DESCRIBE 语句还返回原创 2022-05-30 12:04:14 · 184 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.5.2
9.5.2 执行准备好的 SQL在您准备语句之后,您可多次执行它。使用 EXECUTE 语句执行不是 SELECT 语句的那些语句,以及仅返回一行的 SELECT 语句。下列 GBase 8s ESQL/C 代码准备并执行银行账户的多语句更新:EXEC SQL BEGIN DECLARE SECTION;char bigquery[270] = "begin work;";EXEC SQL END DECLARE SECTION;stcat ("update account set ba...原创 2022-05-30 12:01:13 · 120 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.5.1
9.5.1 准备语句在形式上,动态 SQL 语句像任何其他写入程序的 SQL 语句一样,除了它不可包含任何主变量的名称之外。准备好的 SQL 语句有两个限制。首先,如果它是 SELECT 语句,则它不可包括INTO variable 子句。INTO variable 子句指定将列数据放入其内的主变量,而不允许在准备好的对象的文本中使用主变量。其次,不论主变量的名称通常出现在表达式中的任何位置,都将问号(?)写作 PREPARE 语句中的占位符。仅 PREPARE 语句可指定问号(?)占位符。.原创 2022-05-25 16:31:09 · 299 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.5
9.5 动态 SQL虽然静态 SQL 是有用的,但在您编写程序的时候,它要求您知道每个 SQL 语句确切内容。例如,您必须确切说明在任何 WHERE 子句中测试哪些列,以及在任何选择列表中重命名哪些列。当您编写程序来执行定义良好的任务时,不存在任何问题。但不可事先完善地定义某些程序的数据库任务。特别地,必须响应交互用户的程序可能需要根据用户输入的内容来组合SQL 语句。动态 SQL 允许程序在执行期间形成 SQL 语句,因此,用户输入决定该语句的内容。以下列步骤执行此活动:1. 程序将 S原创 2022-05-25 16:30:19 · 251 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.4.6(2)
从技术上讲,contains 表的每一行都是有向无环图,或树,的头结点。该函数执行对该树的宽度优先搜索,树根是作为它的参数传递的部件编号。该函数使用名为 part_scan 的游标返回在 parent 列中带有特定的值的所有行。最内层的 while 循环打开 part_scan 游标,在选择集中访存每一行,并当已检索了每一组件的部件编号时,关闭该游标。此函数解决部件爆炸问题的核心,但该函数不是完整的解决方案。例如,它不允许组件在树中出现多个级别。此外,实际的 contains 表还会有列count原创 2022-05-25 16:29:36 · 155 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.4.6(1)
9.4.6 部件爆炸问题当您使用由程序逻辑补充的游标时,您可解决普通的 SQL 不可解决的问题。这些问题之一就是部件爆炸问题,有时称为材料单处理。此问题的核心是对象之间的递归关系;一个对象包含其他对象,其又包含其他对象。通常以制造库存为例来说明该问题。例如,公司制造各种部件。有些部件是分立的,但有些是其他部件的组合。在可能称为 contains 的单个表中说明这些关系。列 contains.parent 持有系组合的部件的部件编号。列 contains.child 具有为父部件的组件的部件的部原创 2022-05-25 16:28:47 · 140 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.4.4
9.4.4 游标输入模式为了输入,游标以顺序的或滚动的两种模式中的一种运行。顺序的游标仅可访存序列中的下一行,因此,每一次打开游标,顺序的游标仅可通读表一次。滚动游标可访存下一行或任何输出行,因此,滚动游标可多次读取相同的行。下列示例展示在 GBase 8s ESQL/C 中声明的顺序的游标。EXEC SQL DECLARE pcurs cursor forSELECT customer_num, lname, cityFROM customer;在打开游标之后,仅可使用检索下一行数据的..原创 2022-05-25 16:25:05 · 379 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.4.3(3)
定位 INTO 子句INTO 子句命名要接收数据库服务器返回的数据的主变量。INTO 必须出现在 SELECT 或FETCH 语句中。然而,它不可同时出现在两个语句中。下列示例指定 FETCH 语句中的主变量:此形式允许您将不同的行访存到不同的位置内。例如,您可以使用此形式来将连续的行访存到数组的连续元素内。...原创 2022-05-25 16:24:15 · 73 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.4.3(2)
检测数据的结束在前面的示例中,WHILE 条件在 OPEN 语句返回错误时阻止执行循环。当将 SQLCODE设置为 100 来标志数据的结束时,相同的条件会终止该循环。然而,该循环包含 SQLCODE的测试。此测试是必需的,因为如果 SELECT 语句是有效的但找不到相匹配的行,则 OPEN语句返回零,但第一次访存返回 100(数据的结束)并不返回任何数据。下列示例展示编写同一循环的另一种方式:在此版本中,早已处理了无返回行的情况,因此,在循环中不存在第二次 SQLCODE 测试。...原创 2022-05-25 16:23:21 · 98 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.4.3(1)
9.4.3 访存行程序使用 FETCH 语句来检索输出的每一行。此语句命名游标,且还可命名接收该数据的主变量。下列示例展示完整的 GBase 8s ESQL/C 代码:原创 2022-05-25 16:21:48 · 72 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.4.2
9.4.2 打开游标当程序准备使用游标时,它打开它。OPEN 语句激活游标。它将相关联的 SELECT 语句传给数据库服务器,其开始搜索相匹配的行。数据库服务器处理该查询至定位到或构造输出的第一行的位置。它并不真正地返回那行数据,但它确实在 SQLSTATE 中和在 SQLCODE中为 SQL API 设置返回代码。下列示例展示 GBase 8s ESQL/C 中的 OPEN 语句:EXEC SQL OPEN the_item;由于数据库服务器正在第一次查看查询,因此,它可能检测到一些错误。在.原创 2022-05-23 13:11:31 · 294 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.4.1
9.4.1 声明游标您使用 DECLARE 语句来声明游标。此语句给游标一个名称,指定它的使用,并将它与语句相关联。下列示例是用 GBase 8s ESQL/C 编写的:EXEC SQL DECLARE the_item CURSOR FORSELECT order_num, item_num, stock_numINTO :o_num, :i_num, :s_numFROM itemsFOR READ ONLY;声明给游标一个名称(在此示例中为 the_item)并将它与 SELE...原创 2022-05-23 13:10:43 · 224 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.4
9.4 检索多行当存在查询可返回多行的任何可能时,程序必须以不同的方式执行该查询。分两个阶段处理多行查询。首先,程序启动查询。(不立即返回数据。)然后,程序一次请求一行数据。使用称为游标的特殊数据对象来执行这些操作。游标是表示查询的当前状态的数据结构。下表展示程序操作的一般的顺序:1. 程序声明游标及其相关联的 SELECT 语句,其只是分配持有该游标的存储。2. 程序打开游标,其启动相关联的 SELECT 语句的执行,并检测其中的任何错误。3. 程序将一行数据访存到主变量内,并处理它。4.原创 2022-05-23 12:45:27 · 137 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.3.3(2)
使用聚集函数解释数据的结束使用诸如 SUM、MIN 或 AVG 这样的聚集函数的 SELECT 语句总会成功地返回至少一行数据,即使当没有行满足 WHERE 子句时。基于行的空集的聚集值为空,但它仍然存在。然而,如果聚集值是基于都包含空值的一行或多行,则聚集值也为空。如果您必须能够检测不基于任何行的聚集值与基于某些都是空的行的聚集值之间的差异,则您必须在该语句中包括 COUNT 函数和聚集值上的指示符变量。然后,您可得出下列情况。缺省值您可以许多方式处理这些不可避免的错误。在某些应用程序原创 2022-05-23 12:40:01 · 109 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.3.3(1)
9.3.3 处理错误虽然数据库服务器自动地处理数据类型之间的转换,但使用 SELECT 语句仍可发生错误。在 SQL 编程中,如同在任何种类的编程中一样,您必须预见错误并随时为应对其做好准备。数据的结束通常会发生没有行满足查询的情况。在 SELECT 语句之后,通过 SQLSTATE 代码 02000和 SQLCODE 中的代码 100 标志此事件。此代码指示一个错误或一般事件,这完全依赖于您的应用程序。如果您确信应有一行或多行满足查询(例如,如果您使用您刚从另一表的行读取的键值读取一行的.原创 2022-05-23 12:35:33 · 302 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.3.2
9.3.2 如果程序检索到 NULL 值,该怎么办?可在数据库中存储 NULL 值,但编程语言支持的数据类型不识别 NULL 状态。程序必须采用某种方式来识别 NULL 项,以免将它作为数据来处理。在 SQL API 中,指示符变量满足此需要。指示符变量是与可能收到 NULL 项的主变量相关联的一个附加的变量。当数据库服务器将数据放在主变量中时,它还在指示符变量中放置一个特殊的值来展示该数据是否为 NULL。在下列 GBase 8s ESQL/C 示例中,选择单个行,并将单个值检索到主变量 op原创 2022-05-23 12:33:56 · 200 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.3.1
9.3.1 数据类型转换下列 GBase 8s ESQL/C 示例检索 DECIMAL 列的平均值,其自身是 DECIMAL 值。然而,将 DECIMAL 列的平均值放置其内的主变量不要求具有那种数据类型。EXEC SQL SELECT avg (total_price) into :avg_priceFROM items;不展示在前面的 GBase 8s ESQL/C 代码示例中接收的变量 avg_price 的声明。该声明可为任一下列定义:int avg_price;double a..原创 2022-05-23 12:32:56 · 139 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.2.6
9.2.6 SQLSTATE 值某些 GBase 8s 产品,诸如 GBase 8s ESQL/C,支持符合 X/Open 和 ANSI SQL 标准的SQLSTATE 值。在您运行 SQL 语句之后,GET DIAGNOSTICS 语句读取 SQLSTATE 值来诊断错误。数据库服务器以称为 SQLSTATE 的变量中存储的五个字符的字符串来返回结果代码。SQLSTATE 错误代码,或值,告诉您关于最近执行的 SQL 语句的下列信息:• 该语句是否成功• 该语句是否成功但生成了警告• 该语句原创 2022-05-23 12:25:46 · 216 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.2.5
9.2.5 SQLERRM 字符串SQLERRM 可存储最多 72 字节的字符串。SQLERRM 字符串包含放置在错误消息里的标识符,诸如表名称。对于某些网络化的应用程序,它包含网络软件生成的错误消息。如果由于违反约束导致 INSERT 操作失败,则将失败了的约束名称写到 SQLERRM。提示: 如果错误字符串长于 72 字节,则静默地废弃溢出的部分。在某些上下文中,这可导致关于运行时错误的信息丢失。...原创 2022-05-23 12:17:40 · 122 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.2.4
9.2.4 SQLWARN 数组将 SQLWARN 数组中的八个字符字段设置为空,或设置为 W 来指示各种特殊的情况。它们的含义依赖于刚刚执行的语句。当数据库打开时,即,跟在 CONNECT、DATABASE 或 CREATE DATABASE 语句之后,出现一组警告标志。这些标志告诉您数据库的一些整体特征。第二组标志跟在任何其他语句之后出现。这些标志反映在该语句期间发生的不寻常事件,这些事件通常没有严重到通过 SQLCODE 来反映的程度。...原创 2022-05-18 15:00:40 · 117 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.2.3
9.2.3 SQLERRD 数组在 SQLCODE 中可报告的某些错误代码反映一般的问题。数据库服务器可在 SQLERRD的第二个字段中设置更详细的代码,显示数据库服务器 I/O 例程或操作系统遇到的错误。将 SQLERRD 数组中的整数设置为跟在不同语句之后的不同值。在 GBase 8s ESQL/C 中,仅使用数组的第一个和第四个元素。下表展示如何使用这些字段。表 1. SQLERRD 的字段这些附加的详细信息可是有用的。例如,您可使用第三个字段中的值来报告删除了或更新了多少行。..原创 2022-05-18 14:59:25 · 148 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.2.2
9.2.2 SQLCODE 字段SQLCODE 字段是数据库服务器的主要返回代码。在每个 SQL 语句之后,将 SQLCODE设置为如下表所示的一个整数值。当那个值为零时,无误地执行该语句。特别地,当假定一个语句将数据返回到主变量内时,代码零意味着已返回了该数据且可使用它。任何非零代码都意味着相反的意思。未将有用的数据返回到了主变量。表 1. SQLCODE 的值数据的结束当正确地执行语句,但未找到行时,数据库服务器将 SQLCODE 设置为 100。在两种情况下可发生此情况。第一.原创 2022-05-18 14:58:25 · 395 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.2.1
9.2.1 SQL 通信区域数据库服务器始终在一个称为“SQL 通信区域”(SQLCA)的数据结构中返回结果代码,以及关于操作结果的其他可能信息。如果数据库服务器在用户定义的例程中执行 SQL 语句,则调用应用程序的 SQLCA 包含在该例程中 SQL 语句触发的值。在从 表 1 至 表 1 中罗列 SQLCA 的主体字段。在编程语言之中,您用来描述诸如SQLCA 这样的数据结构的语法,以及您用来应用其中字段的语法是不同的。要了解详细信息,请参阅您的 SQL API 出版物。特别地,您通过其命原创 2022-05-18 14:57:16 · 169 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.2
9.2 调用数据库服务器执行 SQL 语句本质上是作为子例程调用数据库服务器。必须将信息从程序传到数据库服务器,且必须将信息从数据库服务器返回到程序。此通讯的部分是通过主变量完成的。您可将在 SQL 语句中命名的主变量视作对数据库服务器调用的过程的参数。在前面的示例中,主变量作为 WHERE 子句的参数。主变量收到数据库服务器返回的数据,如同 检索多行 描述的那样。...原创 2022-05-18 14:56:14 · 173 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.1.5
9.1.5 程序变量和主变量应用程序可在 SQL 语句内使用程序变量。在 SPL 中,当语法允许时,您可在 SQL 语句中放置程序变量。例如,DELETE 语句可在它的 WHERE 子句中使用程序变量。下列代码示例展示 SPL 中的程序变量。CREATE PROCEDURE delete_item (drop_number INT)⋮DELETE FROM items WHERE order_num = drop_number⋮在使用嵌入式 SQL 语句的应用程序中,SQL 语句可引用...原创 2022-05-18 14:54:35 · 318 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.1.4
9.1.4 动态的语句有些应用程序要求有动态地组合 SQL 语句的能力,以响应用户输入。例如,程序可能必须选择不同的列或将不同的标准应用到行,这依赖于用户想要什么。使用动态的 SQL,程序在内存中将 SQL 语句组合成字符串,并将它传递给数据库服务器来执行。动态的语句不是代码的一部分;在执行期间在内存中构造它们。要了解更多信息,请参阅 动态 SQL。...原创 2022-05-18 14:51:04 · 120 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.1.3
9.1.3 静态的嵌入您可通过静态的嵌入 或动态的嵌入将 SQL 语句引入程序。比较简单和常见的方式是通过静态的嵌入,其意味着编写 SQL 语句作为代码的一部分。该语句为静态的,是因为它们是源文本的固定部分。要获取关于静态的嵌入的更多信息,请参阅 检索单行 和 检索多行。...原创 2022-05-18 14:49:43 · 148 阅读 · 0 评论 -
GBase 8s V8.8 SQL 指南:教程-9.1.2
9.1.2 应用程序语言中的 SQL尽管 GBase 8s SQL API 产品允许您将 SQL 嵌入在主语言中,但某些语言包括 SQL 作为它们的语句集的固有部分。GBase 8s “存储过程语言”(SPL)使用 SQL 作为它的语句集的固有部分。您使用 SQL API 产品编写应用程序。您使用 SPL 编写例程,例程与数据库一起存储并从应用程序调用它。...原创 2022-05-17 18:09:09 · 122 阅读 · 0 评论