从PL / SQL中的Query Plus硬编码变量返回用户定义的表

时间:2016-11-30 20:56:32

标签: oracle plsql toad

我有以下情况:

我需要输入一个过程或函数以下参数:

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

这些将用于查询围绕某些逻辑的表(我们将调用表ADDRESS_INFO),然后使用' 0001'对变量LOC_CDE进行硬编码。

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

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

我对PL / SQL非常陌生,并且在返回任何东西方面都没什么好运。我还希望将所有代码保存在一个定义的PACKAGE中(这也会导致麻烦)。

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

1 个答案:

答案 0 :(得分:0)

你想要自己的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的简单方法的一个非常基本的例子,并将其用作函数的返回值。