如何使用Oracle中的select语句调用带有Rowtype参数的函数

时间:2009-03-03 10:49:10

标签: oracle stored-procedures

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

我想做点什么

select *,function1(rowtype) from table1

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

3 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:0)

为什么不直接传入行的id并使函数工作呢?


编辑:您可以动态构建OBJECT / TYPE并将其传递给函数。然后,您只需要查询一次数据。如果您需要一个例子,请告诉我。


答案 2 :(得分:-1)

你可以这样做:

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

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