oracle 存储过程 OUT 参数与 postgresql pl/pgsql 函数 OUT 参数

标签 oracle postgresql plpgsql

我正在尝试将 oracle 存储过程 (plsql) 移植到 postgresql 函数 (pl/pgsql)。

在 oracle 中,我可以定义一个带有 IN 和 OUT 参数的存储过程。

CREATE OR REPLACE PROCEDURE MY_TEST(foo IN NUMBER,
                                    bar OUT NUMBER)
IS 
BEGIN
bar := 1
END

这将在传递给存储过程的变量中存储值 1。 我可以这样调用它:

DECLARE
outValue NUMBER ;
BEGIN
Exec MY_TEST(10, outValue); 
DBMS_OUTPUT.PUT_LINE('Value Returned Is : '||outValue) ;
END ;

在 Postgresql (pl/pgsql) 中,我可以定义这样一个函数:

CREATE OR REPLACE FUNCTION MY_TEST(foo IN NUMBER,
                                   bar OUT NUMBER)
BEGIN
bar := 1
END;
$body$
LANGUAGE PLPGSQL;

但是我不能像在 oracle 中那样使用 out 参数。 在 postgresql 中,OUT 参数定义了返回值。 在 oracle 中,存储过程没有返回值,而是将输出写入调用中传递的变量

有没有我忽略的东西,允许我以与上面示例中使用的存储过程类似的方式使用 pl/pgsql 函数?

非常感谢任何提示。

最佳答案

在 PostgreSQL 中,PL/pgSQL 或 SQL 函数采用参数并返回值。

它们采用指针或引用 - 因此引用地址的值可以被操纵。

理论上,您可以C-language function 做类似的事情,您可以在其中通过引用传递值。然而,事实上,你不能。手册警告:

Warning

Never modify the contents of a pass-by-reference input value. If you do so you are likely to corrupt on-disk data, since the pointer you are given might point directly into a disk buffer. The sole exception to this rule is explained in Section 35.10.

简而言之:您尝试做的事情在 PostgreSQL 中是不可能的。

关于oracle 存储过程 OUT 参数与 postgresql pl/pgsql 函数 OUT 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9380257/

相关文章:

Oracle 分析滚动百分位数

sql - 我如何强制 Postgres 使用特定的索引?

sql - 在自定义函数中使用 SQL 查询作为数组参数(输入)

postgresql - 将 JOIN 结果传递给记录并删除重复项

sql - 仅当行不存在时才在 PL/pgSQL 中运行 SQL 语句

java - ORA-00922 : missing or invalid option when execute "set long 100000" statement in oracle

linux - 如何在 Bash 中将字符串转换为整数?

oracle - SSIS 包访问 Oracle DB。如何知道您使用的是 32 位还是 64 位 Oracle 驱动程序?

ruby-on-rails - 如何解决 Rails、GeoRuby(和 postgis/postgresql): NameError: uninitialized constant Point?

json - 为 Postgres JSON 文档生成 UUID