如何从Oracle中的select语句调用具有Rowtype参数的函数

如何从Oracle中的select语句调用具有Rowtype参数的函数,oracle,stored-procedures,Oracle,Stored Procedures,我有一个oracle函数,它有一个in参数,它是表的rowtype,从select语句中,我需要将当前行传递给这个函数,以便它进行一些处理并返回一个值。是否有一个伪变量可以在select语句的上下文中使用—相当于旧的和新的in触发器 我想做一些像 select *,function1(rowtype) from table1 我希望避免传递多个参数,因此应该在该上下文中看到这个问题。为什么不在中传递行的id并使函数在该行上工作 编辑:您可能能够动态构造对象/类型并将其传递给函数。然后只需要查

我有一个oracle函数,它有一个in参数,它是表的rowtype,从select语句中,我需要将当前行传递给这个函数,以便它进行一些处理并返回一个值。是否有一个伪变量可以在select语句的上下文中使用—相当于旧的和新的in触发器

我想做一些像

select *,function1(rowtype) from table1

我希望避免传递多个参数,因此应该在该上下文中看到这个问题。

为什么不在中传递行的id并使函数在该行上工作


编辑:您可能能够动态构造对象/类型并将其传递给函数。然后只需要查询一次数据。如果你需要一个例子,请告诉我


您可以这样做:

DECLARE
    foo table1%ROWTYPE;
BEGIN
     function1(foo);
END;

编辑:您可以查看有关如何使用此技术的更详细说明。

您不能使用%ROWTYPE执行此操作。%ROWTYPE实际上是PL/SQL记录类型,它在SQL中不是合法类型,因此不能在SELECT中使用它。您应该创建一个与表具有相同列的对象类型,更改为function以期望该对象类型而不是%ROWTYPE,然后您可以编写如下内容:

SELECT function(table1_typ(column1, column2, column3))
  FROM table1 t1

缺点:您仍然必须在SELECT中键入所有列,如果更改表,则还需要更改对象类型和SELECT

这需要是一个select语句,如果我使用PL/SQL,那么我有很多选项这并不能回答如何从select语句调用函数。实际上,我一直在寻找这个选项,因为我希望避免将多个列传递给存储过程,但如果我仍然需要传递所有列,我认为我最好先将它们传递给SP,然后再传递给connvert到某个类型,然后再发送给它。正如@DineshManne所说,这并不比表1 t1中的
选择函数(column1,column2,column3)好多少,只是输入的时间更长。除非你不能改变函数的定义。