游标中的光标

时间:2018-06-16 03:23:57

标签: database oracle plsql cursors

我需要你的帮助。 我试图在其他游标中制作一系列游标。 下面我将向您展示我想要制作游标的表格。

enter image description here

首先使第一个表的光标查找记录。 其次,在表1中,我们有列“ID_ASI”,我希望该列创建另一个游标,在另一个表(图像的表格)中搜索它找到的所有“ID_ASI”,它们具有相同的“ID_ASI”。

enter image description here

最后,通过第二步找到“ID_ASI”,创建一个新的游标,查找具有相同“ID_ASI”的所有“ID_DOC”。 例如, 在第二步中,当在“ID_ASI”列中创建光标时,找到具有相同“ID”(101)的3行,然后第三步搜索具有相同“ID_ASI”的所有“ID_DOC”。 例如,“ID_ASI”101具有3“ID_DOC”(值10),101具有2个其他值(20)并且最终具有两个其他值(30)。 复杂的是如何以相同的方式对它们进行分组,以及如何将光标放在光标内。

这就是结果。

IMAGE OF TABLE 2 RESULTS

感谢您的关注。

2 个答案:

答案 0 :(得分:0)

对我来说,看起来你想要的是将表连在一起,比如

SELECT t2.*
  FROM TABLE_1 t1
  INNER JOIN TABLE_2 t2
    ON t2.ID_ASI = t1.ID_ASI
  ORDER BY t2.ID_ASI, t2.ID_DOC

SQLFiddle here

祝你好运。

答案 1 :(得分:0)

使用分层查询:

SQL Fiddle

Oracle 11g R2架构设置

CREATE TABLE TABLE_1 ( ID_ASI ) AS
  SELECT 101 FROM DUAL UNION ALL
  SELECT 201 FROM DUAL UNION ALL
  SELECT 301 FROM DUAL;

CREATE TABLE TABLE_2 (ID_ASI, ID_DOC, IMPORT, IMPORT_TO ) AS
  SELECT 101, 10, NULL, 1000 FROM DUAL UNION ALL
  SELECT 101, 20, NULL, 2000 FROM DUAL UNION ALL
  SELECT 101, 30, NULL, 3000 FROM DUAL UNION ALL
  SELECT 201, 23, NULL, 430 FROM DUAL UNION ALL
  SELECT 201, 23, 430, NULL FROM DUAL UNION ALL
  SELECT 104, 10, 500, NULL FROM DUAL UNION ALL
  SELECT 104, 20, 2000, NULL FROM DUAL UNION ALL
  SELECT 104, 10, 500, NULL FROM DUAL UNION ALL
  SELECT 104, 30, 3000, NULL FROM DUAL;

查询1

SELECT *
FROM   TABLE_2
START WITH ID_ASI IN ( SELECT ID_ASI FROM TABLE_1 )
CONNECT BY PRIOR ID_DOC = ID_DOC
AND PRIOR ID_ASI < ID_ASI
ORDER SIBLINGS BY 1, 2, 3, 4

<强> Results

| ID_ASI | ID_DOC | IMPORT | IMPORT_TO |
|--------|--------|--------|-----------|
|    101 |     10 | (null) |      1000 |
|    104 |     10 |    500 |    (null) |
|    104 |     10 |    500 |    (null) |
|    101 |     20 | (null) |      2000 |
|    104 |     20 |   2000 |    (null) |
|    101 |     30 | (null) |      3000 |
|    104 |     30 |   3000 |    (null) |
|    201 |     23 |    430 |    (null) |
|    201 |     23 | (null) |       430 |