Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PL/SQL中处理临时查询结果_Sql_Plsql_Oracle11g - Fatal编程技术网

如何在PL/SQL中处理临时查询结果

如何在PL/SQL中处理临时查询结果,sql,plsql,oracle11g,Sql,Plsql,Oracle11g,我将很快描述。 有一列DestinationId 和列HierarchyNodeId 目前,一个DestinationId有多个层次结构节点ID。 我有一个查询,它给出了我想要保留的每个DestinationId和HierarchyNodeId。 因此,我想将与每个DestinationId关联的每个其他HierarchyNodeId替换为我从上面的查询中得到的 我通过查询创建了一个循环。所以每个循环周期我都有一个特定的DestinationId(cursor.“DestinationId”和一

我将很快描述。 有一列
DestinationId
和列
HierarchyNodeId
目前,一个DestinationId有多个层次结构节点ID。 我有一个查询,它给出了我想要保留的每个DestinationId和HierarchyNodeId。 因此,我想将与每个DestinationId关联的每个其他HierarchyNodeId替换为我从上面的查询中得到的

  • 我通过查询创建了一个循环。所以每个循环周期我都有一个特定的DestinationId(cursor.“DestinationId”和一个特定的cursor.“HierarchyNodeId”)
  • 我有3个表包含列“HierarchyNodeId”,我想更新所有3个表
  • 在每个循环周期中,我都有一个查询,查找与游标“DestinationId”(当前周期DestinationId)关联的所有HierarchyNodeId
  • 我的问题是,步骤3中的查询从我要更新的3个表中的2个表中获取数据。 所以如果我在更新中使用它 (例如

    UPDATE table1 
    SET table1."HierarchyNodeId"=cursor."HierarchyNodeId"
    WHERE table1."HierarchyNodeId" IN (queryfromstep3)
    
    ) 然后我会有一个问题,因为当我进行第一次更新时,来自步骤3的查询结果会发生变化

    所以我想在每个循环开始时将查询结果从Step3存储到一个临时表中

    这在PL/SQL中可能吗?非常感谢

    编辑:

    下面是我要存储到临时数据库中的查询

    SELECT "HierarchyNodeId" FROM 
    (
    Select t1."Counter", t2.* From
               (SELECT "HierarchyNodeId", (SELECT "Description"
                FROM "Destination"
               WHERE "DestinationId" = hn."DestinationId") "Description", "DestinationId",
             (SELECT "DestinationTypeId"
                FROM "Destination"
               WHERE "DestinationId" = hn."DestinationId") "DestinationTypeId"
        FROM "HierarchyNode" hn
    WHERE "DestinationId" IN (SELECT "DestinationId" From(SELECT COUNT ("HierarchyNodeId"), "DestinationId" FROM "HierarchyNode" GROUP BY "DestinationId" HAVING COUNT ("HierarchyNodeId") > 1))) t2, 
    (select COUNT (*) "Counter", "HierarchyNodeId" From "HierarchyDetail"
    Group By "HierarchyNodeId") t1
    Where t1."HierarchyNodeId" = t2."HierarchyNodeId"
    AND t2."DestinationId" = cur."DestinationId"
    AND t2."HierarchyNodeId" != cur."HierarchyNodeId"
    ORDER BY "DestinationId", "Counter" Desc
    )
    
    它基本上生成一个带有guid的列。
    但是,在我进行第一次更新之后,其中一些guid将发生更改。为了避免这种情况,我希望在每个循环开始时将其存储到临时表中。

    查看Oracle全局临时表:

    您能给我们一些数据样本和您想要的结果吗?@a.B.Cade我将添加查询,但无需通过证明更多数据来加重问题。我只是想知道是否可以将Select查询的结果存储到临时表中。然后删除该临时表并重新开始(每次循环循环时)@a_horse_,其名称完全相同!:)@一匹没有名字的马等等什么?你问我这是否是一个程序,我说是的。我正在创建一个过程,这就是我使用pl/sql的原因。这是用于创建Oracle过程的语言。。。但是,如果您觉得不应该这样做,请随时重新标记它……这似乎是临时表的使用方法。谢谢