我有一个plsql
返回记录类型的函数challan_rec
。
create or replace package xx_bal_api as
type challan_rec is record (
challan_number varchar2(40),
challan_amount number
);
FUNCTION get_challan(foo number) return challan_rec;
end;
create or replace package body xx_bal_api as
FUNCTION get_challan(foo number) return challan_rec
is
cr challan_rec;
begin
cr.challan_number := '00002154215';
cr.challan_amount := 2265;
return cr;
end get_challan;
end;
我想从Java代码中调用此函数,并在Java中获取该记录类型。请指导我如何做。谢谢
首先让我们从更正您的代码开始。我可以看到您发布的代码无法编译,并且会引发问题。正确的代码如下:
CREATE OR REPLACE PACKAGE xx_bal_api
AS
TYPE challan_rec IS RECORD
(
challan_number VARCHAR2 (40),
challan_amount NUMBER
);
TYPE rec IS TABLE OF challan_rec index by pls_integer;
FUNCTION get_challan (foo NUMBER)
RETURN rec;
END;
/
CREATE OR REPLACE PACKAGE BODY xx_bal_api
AS
FUNCTION get_challan (foo NUMBER)
RETURN rec
IS
cr rec;
BEGIN
cr (1).challan_number := '00002154215';
cr (1).challan_amount := foo;
RETURN cr;
END get_challan;
END;
执行此代码时,您可能会遇到类似的问题invalid datatype
。这是因为a RECORD
仅限在中使用PLSQL
。
select xx_bal_api.get_challan(2265) from dual;
ORA-00902:无效的数据类型
最好的方法是先创建一个对象的a OBJECT
和a TYPE
,然后return
在您的函数中创建它:
CREATE OR REPLACE TYPE challan_rec IS OBJECT
(
challan_number VARCHAR2 (40),
challan_amount NUMBER
);
/
CREATE OR REPLACE Type rec is table of challan_rec;
/
CREATE OR REPLACE FUNCTION get_challan(foo number)
return rec
is
cr rec:=rec();
begin
cr.extend();
cr(1):= challan_rec('00002154215',foo);
return cr;
end get_challan;
end;
/
执行:
SQL> select get_challan(2265) from dual;
/
我知道Postgres允许返回预定义的复合数据类型、记录和具有列定义的表。 然而,我没有返回一个定义了列的简单记录,所以我总是使用表,即使我知道这只返回一行。 我的函数定义如下: 如果我尝试以同样的方式返回记录,则返回失败: 这在博士后中不可能吗?我知道我可以只声明一个自定义复合数据类型,但我不想为每个返回记录的函数声明一个类型。
问题内容: 返回vs的函数有什么区别,其他所有条件相等。 这些函数似乎返回相同的结果。请参阅此SQLFiddle。 问题答案: 返回时,输出列未键入且未命名。因此,这种形式不能像在子查询或表中一样直接在FROM子句中使用。 即,在发行时: 我们得到这个错误: 错误:返回“记录”的函数需要列定义列表 但是,SQL调用者可以将其“广播”为正确的列类型。此表格可以正常工作: 结果为: 因此,被认为不太实
问题内容: 是否可以获取从调用范围返回函数的行号? 例: 我认为这是不可能的,因为它应该已经从堆栈中删除了,但是也许它仍然被缓存在某个地方? 用例是我有一个HTTP处理程序,我想记录返回错误的行和文件名,而不必乱扔代码。 问题答案: AFAIK,不可能自动获取执行最后一次返回的行。 但是,有了一个小帮手,您可以拥有: 操场 输出:
问题内容: 我已经使用过返回一定数量的行。我的代码是这样的: 有没有什么方法可以检查返回的行数?还是我必须自己写? 问题答案: 您可以使用循环而不是循环,以便在执行循环后调用该循环,如下所示: 或自己计算行数:
我在包规格中有记录类型: 和返回此类型的函数。我正在使用MyBatis与Spring的集成。如何调用(使用MyBatis XML映射器)这个函数并将结果映射到POJO对象?
我正在学习如何获取重载函数vs的返回值的。 我修改了SO答案中的代码(由chris编写)。 我有一个编译错误。 错误:“std::result\u of”中没有名为“type”的类型 据我所知:- >