当前位置: 首页 > 知识库问答 >
问题:

PL/SQL中的多线程

韩涵衍
2023-03-14

我有外部光标

 CURSOR C1 IS
      SELECT CBAT.*, ROWID ROWID2
        FROM table CBAT
       WHERE ATTRIBUTE3 IS NULL
         AND ATTRIBUTE4 = 'COSTPROCESSED'
         AND AP_DOCUMENT_REF IS NULL;

和1个内部光标

CURSOR C2(C1_MONTH VARCHAR2, C1_YEAR VARCHAR2, C_CMCA_PROJECT_ID VARCHAR2, C_CMCA_EMPLOYEE_NUMBER VARCHAR2)

而处理似乎是

FOR I IN C1 LOOP       
    BEGIN
      FOR J IN C2(I.MONTH,
                  I.YEAR,
                  I.CMCA_PROJECT_ID,
                  I.CMCA_EMPLOYEE_NUMBER) LOOP

处理:-对于游标c1中的每一条记录,我需要检查游标c1中的员工、项目号和月份是否存在于第二个游标C2中。如果条件满足,我需要更新自定义表。所以这个处理需要很长时间。我如何减少流转时长

在我的C1游标中,有1000条记录,单个记录在游标c2中处理。对于每一行来说,这需要花费大量时间,对于所有1000记录来说,这需要超过2个小时。

我知道多线程的概念,但不知道如何实现。有谁能告诉我如何实现这个概念吗。

根据我的要求,我需要检查从游标c1到游标c2的每条记录。由于我面临绩效问题,请建议我如何实现目标。


共有1个答案

谯嘉胜
2023-03-14

这个概念被称为作业,你可以发布它们,以便在后台处理它们。

这里的例子:

BEGIN
DBMS_SCHEDULER.CREATE_JOB (
   job_name             => 'oe.my_job1',
   job_type             => 'PLSQL_BLOCK',
   job_action           => 'BEGIN DBMS_STATS.GATHER_TABLE_STATS(''oe'',
                            ''sales''); END;',
   start_date           => '15-JUL-08 1.00.00AM US/Pacific',
   repeat_interval      => 'FREQ=DAILY', 
   end_date             => '15-SEP-08 1.00.00AM US/Pacific',
   enabled              =>  TRUE,
   comments             => 'Gather table statistics');
END;
/
 类似资料:
  • 本文向大家介绍Oracle DBMS中的PL / SQL块,包括了Oracle DBMS中的PL / SQL块的使用技巧和注意事项,需要的朋友参考一下 PL / SQL是一种块结构语言,即PL./SQL的代码以块的形式编写。PL / SQL还包含Oracle数据库的健壮性,安全性和可移植性。 PL / SQL的每个块均包含以下子部分- 声明- 本节包含所有需要在程序之前声明的项目,例如变量,子程序

  • 主要内容:PL/SQL的特点,PL/SQL的优点PL/SQL是是由甲骨文公司在90年代初开发,以提高SQL的功能。 PL/SQL是嵌入在Oracle数据库中的三个关键的编程语言之一(随着SQL本身和Java)。 PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL就是把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算的程序语言。

  • 主要内容:包规范,包体,使用包元素在本章中,我们将讨论PL/SQL中的包。 包是模式对象,将逻辑上相关的PL/SQL类型,变量和子程序分组。 一个包将有两个强制性的部分 - 包规范/格式 包体或定义 包规范 规范是包的接口。它只是声明可以从包外部引用的类型,变量,常量,异常,游标和子程序。 换句话说,它包含有关包的内容的所有信息,但不包括子程序的代码。 所有放置在规范中的对象被称为公共对象。任何不在包规范中但在包体中编码的子程序称

  • 我有一个表,其中包括一个CLOB字段,该字段的值由逗号分隔的行组成。在输出中,我希望每行都有一行,这些行以一个特定的值开始。我还想从性能上提取一些逗号分隔的值。 输入表(3行): 'm'将源字符串视为多行。Oracle将插入符号(^)和美元符号($)分别解释为源字符串中任意行的开始和结束 这些有什么问题吗?或者更好的是,没有Regex还有更好的性能吗?

  • 主要内容:开始和结束事务,提交事务,回滚事务,自动事务控制在本章中,我们将讨论和学习PL/SQL中的事务。 数据库事务是由一个或多个相关SQL语句组成的原子工作单元。它被称为原子操作,因为构成事务的SQL语句带来的数据库修改可以共同提交,即永久化到数据库或从数据库回滚(撤销)。 成功执行的SQL语句和提交的事务不一样。即使成功执行SQL语句,除非提交包含语句的事务,否则可以回滚该语句,并且可以撤消语句所做的所有更改。 开始和结束事务 事务有开始和结束。当

  • 主要内容:索引表,示例,嵌套表,集合方法,集合异常在本章中,我们将讨论PL/SQL中的集合。集合是具有相同数据类型的有序元素组。 每个元素都由一个唯一的下标来表示它在集合中的位置。 PL/SQL提供了三种集合类型 - 索引表或关联数组 嵌套的表 可变大小的数组或类型 Oracle的每种类型的集合有以下特征 - 集合类型 元素个数 下标类型 密集或稀疏 在哪创建 是否为对象类型属性 关联数组(或索引表) 无界 字符串或整数 任意一种 只在PL/SQ