有时我调用PL / SQL函数来接收和处理它返回的值。其他时候,我只想为副作用调用相同的函数。
例如,考虑一个日志记录函数,该函数将其参数记录在表中,然后返回由相同参数创建的格式化字符串。有时我想使用返回值,例如将其显示给用户,而其他时候,我只是调用表记录功能,而忽略返回值。在后一种情况下,我想避免声明一个变量来保存返回的值并编写一条assigment语句。
这个问题触及主题,答案似乎是调用者必须使用函数返回的值,无论是通过赋值语句还是select into
。
有没有一种方法可以在PL / SQL中调用函数并丢弃返回的值?
分配一个变量,然后不执行任何操作,这是代码的味道
如果我们在谈论代码的味道,那么拥有一个更改数据库状态的功能就有点奇特。惯例是过程更改状态,而函数仅读取状态。
因此,以您的示例为例,您可以在记录器程序包中将记录功能实现为两个重载过程。
procedure log_this(p1_in number, p2 in timestamp, p_fmt_txt out varchar2); procedure log_this(p1_in number, p2 in timestamp);
在程序包主体中,第二个过程仅调用第一个过程并吞并out参数。
现在,您可以根据是否要查看格式化的字符串来调用适当的过程。
当然,如果要在SELECT语句中调用函数,则此解决方案将不起作用,但是通过查询更改数据库状态确实是一种代码味道。