从 PL/SQL 中的查询加硬编码变量返回用户定义的表

Posted

技术标签:

【中文标题】从 PL/SQL 中的查询加硬编码变量返回用户定义的表【英文标题】:Return a User Defined Table From a Query Plus Hardcoded Variable in PL/SQL 【发布时间】:2016-11-30 20:56:31 【问题描述】:

我有以下场景:

我需要将以下参数输入到过程或函数中:

Link_1_ID, Link_2_ID, Address1, Address2, City, State, Zip, Address_Type

这些将用于查询围绕一些逻辑的表(我们将称为表 ADDRESS_INFO),然后将变量 LOC_CDE 硬编码为“0001”。

然后我需要这一切以用户定义表类型的形式返回(尽管它一次只能提取一条记录)。该表将输出以下内容:

Link_1_ID, Link_2_ID, Address1, Address2, City, State, Zip, LOC_CDE (no Address_Type)

我对 PL/SQL 非常陌生,并且在返回任何东西时运气不佳。我还希望将所有代码保存在一个已定义的 PACKAGE 中(这也会造成麻烦)。

任何建议或帮助将不胜感激。

【问题讨论】:

展示一些代码会有很大帮助!向我们展示您到目前为止所做的事情,也许我们可以提供帮助。恐怕不清楚你要的是什么。 我很抱歉。我的代码真的很乱,因为我正在继续尝试解决这个问题。稍后我会尝试添加一些。我想要实现的基本外壳会有所帮助吗? 尝试给出一个完整的、可重复的示例,以便需要帮助的人可以复制/粘贴并尝试以提供帮助。显示之前和之后的数据示例,以便清楚您正在使用什么以及您在追求什么。我知道这并不总是那么简单,但您提供的信息越多,您就越有可能获得有意义的帮助。 具体用例是什么?您是否希望能够在 SQL 查询中使用它(在这种情况下,它需要是一个返回对象类型的函数,即使用 create type 定义的函数),还是仅用于在 PL/SQL 代码中处理(在这种情况下,在包规范中声明的普通旧记录类型可以,尽管对象类型也有效)?除了数据库表之外,没有“用户定义表”之类的东西,这似乎不是您的意思。 【参考方案1】:

你想要你自己的UDT,说你的函数只会返回一个值;所以我相信你可能首先需要定义你的类型,例如:

create or replace type yourType as object (fieldA number, fieldB varchar2(20), fieldC varchar2(20));

然后您可以使用您需要的所有参数定义您的函数,返回您的 UDT 的单个实例:

create or replace function yourFunction (parA number, parB varchar2) return yourType is
    returnVal yourType;
begin
    select yourType(parA, parB || ' something', 'FIXED_VALUE')
    into returnVal
    from dual;
    return returnVal;
end; 

这只是处理 UDT 变量的一种方法;例如,您可以明确填写 UDT 的字段:

create or replace function yourFunction (parA number, parB varchar2) return yourType is
    returnVal yourType;
begin
    returnVal := new yourType(null, null, null); /* you need an initialization here */
    select parA, parB || ' something', 'FIXED_VALUE'
    into returnVal.fieldA, returnVal.fieldB, returnVal.fieldC
    from dual;
    return returnVal;
end;

您可以使用一些其他变量来获取,然后使用这些变量来填充您的返回值,或者定义一个构造函数来使用一些自定义逻辑来处理您的 UDT 实例的创建,等等......这只是一个处理 UDT 并将其用作函数的返回值的简单方法的非常基本的示例。

【讨论】:

以上是关于从 PL/SQL 中的查询加硬编码变量返回用户定义的表的主要内容,如果未能解决你的问题,请参考以下文章

从 PL/SQL 中的过程返回值数组

PL/SQL API调用/查询返回多条记录,如何传入多个变量

(十三)PL/SQL包

无法从 cmd PL/SQL 中的简单查询中获得正确的结果

解决PL/SQL查询结果乱码的问题

带有参数的 PL/SQL 过程/函数从选择查询返回表