【问题标题】:Oracle SQL and autonumbering: how to retrieve an OUT parameter - outside the procedureOracle SQL 和自动编号:如何在过程之外检索 OUT 参数
【发布时间】:2014-04-09 09:00:16
【问题描述】:

在早期阶段,我们的系统提供了保存上次使用的自动编号的表(而不是使用序列)。我们现在正在重做系统的客户端解决方案,并且需要“重新发明”如何获取下一个记录号 - 通过 SQL

客户端应用程序是在 FileMaker 中制作的,数据库仍然驻留在 Oracle 中。挑战在于更新上次使用的自动编号并将其提供给客户端中启动的新记录 - 一次操作。

SELECT 语句可以检索最后使用的数字。
UPDATE 语句可以增加最后使用的数字。

选择和返回数字的函数不允许包含更新语句。

过程可以进行更新,并且可以保留将其返回到 OUT 参数中的新值,但不会将新值返回给客户端 - 除非客户端以某种方式可以从过程中读取 OUT 参数(我不要认为它读取 DBMS_OUTPUT)。

如果该过程继续在客户端准备 INSERT 的表上执行 INSERT,就我所见,插入将不相同。

所以 - 是否有一种语法可以让客户端访问 OUT 值作为包括过程调用的 SQL 语句的结果(也许以某种方式使 OUT 参数引用客户端的新参数)记录 recnr 字段),或者这完全是一条死胡同?

【问题讨论】:

标签: sql oracle stored-procedures plsql filemaker


【解决方案1】:

关于语法 - 您需要将不带参数的 PL/SQL 过程包装到函数中(您可以在同一个包中使用具有相同名称的重载函数)并将值作为函数结果返回。

关于设计 - 我不建议使用“自制”机制来替换序列。序列得到了更好的优化和更可靠的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-09
    • 2012-06-07
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 2013-11-02
    相关资源
    最近更新 更多