在Firebird中,您可以创建一个返回数据的存储过程,并像传递参数的表一样调用它:
create or alter procedure SEL_MAS_IVA (
PCANTIDAD double precision)
returns (
CANTIDAD_CONIVA double precision)
as
begin
CANTIDAD_CONIVA = pCANTIDAD*(1.16);
suspend;
end
select * from SEL_MAS_IVA(100)
将返回单行单列(名为CANTIDAD_CONIVA)与值116的关系
这是一个非常简单的例子。存储过程当然可以具有任意数量的输入和输出参数,并且可以执行返回数据(包括多行)所需的任何操作,这可以通过“suspend”语句完成(顾名思义,暂停SP执行,返回数据给调用者,并在下一个语句中恢复)
如何在Oracle中创建此类存储过程?
答案 0 :(得分:1)
在Oracle中,可以使用流水线功能。你的例子:
-- define column names:
CREATE OR REPLACE TYPE SEL_MAS_IVA_obj AS OBJECT (
CANTIDAD_CONIVA NUMBER)
/
CREATE OR REPLACE TYPE SEL_MAS_IVA_type AS TABLE OF SEL_MAS_IVA_obj
/
CREATE OR REPLACE
FUNCTION SEL_MAS_IVA(PCANTIDAD IN NUMBER)
RETURN SEL_MAS_IVA_type
PIPELINED
IS
BEGIN
pipe row(SEL_MAS_IVA_obj(PCANTIDAD * 1.16));
RETURN;
END;
/
并获取值:
SELECT * FROM TABLE(SEL_MAS_IVA(100));
另请参阅另一个示例,其中函数返回更多列和行:https://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:4447489221109
答案 1 :(得分:0)
您需要使用一个功能:
create or replace function SEL_MAS_IVA (
pCANTIDAD IN NUMBER
)
return NUMBER
as
begin
return pCANTIDAD*(1.16);
end SEL_MAS_IVA;
select SEL_MAS_IVA(100) CANTIDAD_CONIVA from dual;