gpt4 book ai didi

oracle - 如何在Oracle中定义具有动态返回类型的pl sql函数?

转载 作者:行者123 更新时间:2023-12-02 02:48:24 24 4
gpt4 key购买 nike

我有一组具有不同列数据类型的表,我需要整合一种检索数据的方法。我认为使用函数是一个好主意,但我不知道如何定义一个具有不同返回类型的函数。

例如,如何定义此函数以便能够对表类型使用不同的定义。

CREATE OR REPLACE FUNCTION retrieve_info(field_id in integer)
RETURN pintegertypetable -- <-- how to change this to return a more generic record built dynamically in the code below?
AS
r pintegertypetable := pintegertypetable ();
BEGIN
r.extend;
r(i) := pintegertypetable (someinteger);
return r;
END;

这可能吗?有没有更好的方法来处理这个问题:最初存储在许多遗留表中的不同列,并且考虑到每列都有不同的数据类型,通过这种方式,我们可以检索最新的信息,同时保留原始数据类型,而无需对 View 进行硬编码将所有内容存储在 varchar2 中并在客户端代码中再次进行转换?

最佳答案

您可以通过使用弱类型引用游标作为返回类型来实现此目的。使用 JDBC 从客户端接口(interface)实现这一点特别容易,因为可以像任何查询结果一样逐步执行返回的游标类型,并且可以从 ResultSet.getMetaData() 查询元数据。这是一个例子:

CREATE OR REPLACE PROCEDURE retrieve_info(field_id in integer, p_cursor in out sys_refcursor)
AS
BEGIN
open p_cursor for 'select * from emp';
END;

引号中的查询可以是任何返回任何类型、任意数量列的查询。

关于oracle - 如何在Oracle中定义具有动态返回类型的pl sql函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5966270/

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