gpt4 book ai didi

sql - 如何在SQL查询中使用Oracle关联数组

转载 作者:行者123 更新时间:2023-12-04 06:12:46 27 4
gpt4 key购买 nike

ODP.Net提供了将关联数组作为参数从C#传递到Oracle存储过程的能力。除非您试图在sql查询中使用该关联数组中包含的数据,否则它是一个很好的功能。

这样做的原因是它需要上下文切换-SQL语句需要SQL类型,并且像这样传递给PL/SQL的关联数组实际上定义为PL/SQL类型。我相信在PL/SQL包/过程/函数中定义的任何类型都是PL/SQL类型,而在这些对象之外创建的类型是SQL类型(如果您可以对此提供更多说明,请这样做,但这不是我们的目标。问题)。

因此,问题是,将PL/SQL关联数组参数转换为可在过程中用到的sql语句中的东西的方法是什么:

OPEN refCursor FOR
SELECT T.*
FROM SOME_TABLE T,
( SELECT COLUMN_VALUE V
FROM TABLE( associativeArray )
) T2
WHERE T.NAME = T2.V;

出于本示例的目的,“associativeArray”是由PLS_INTEGER索引的varchar2(200)的简单表。在C#中,associativeArry参数用string []填充。

随意讨论除使用关联数组之外的其他方法,但是提前知道这些解决方案将不被接受。不过,我仍然对看到其他选择感兴趣。

最佳答案

我将创建这样的数据库类型:

create type v2t as table of varchar2(30);
/

然后在过程中:
FOR i IN 1..associativeArray.COUNT LOOP
databaseArray.extend(1);
databaseArray(i) := associativeArray(i);
END LOOP;

OPEN refCursor FOR
SELECT T.*
FROM SOME_TABLE T,
( SELECT COLUMN_VALUE V
FROM TABLE( databaseArray )
) T2
WHERE T.NAME = T2.V;

(其中,databaseArray声明为v2t类型。)

关于sql - 如何在SQL查询中使用Oracle关联数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1715978/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com