oracle 将列作为对象传递给函数

1szpjjfi  于 2023-08-03  发布在  Oracle
关注(0)|答案(1)|浏览(141)

是否可以将当前行的列作为一个类似变量的对象传递,这样我就可以在函数中从中提取一些信息?函数可以在包中
比如说

Select myfunction(column1) from dual;

字符串
然后在函数中像对象一样获取该列的信息

Function myfunction(objCol object)
Return something
Is
... declaration 
Begin
  schema := objCol.schema
  table := objCol.table_name
 ... 
  do some other things
  return something 
End


是这样吗

fcipmucu

fcipmucu1#

默认情况下,Oracle不是面向对象的,它不会将普通列作为使用关于自身的元数据增强的对象进行传递。如果不创建自定义对象类型和变量和/或使用这些自定义对象类型的表、列和嵌套表,则传递的所有值都将是标量。因此,对于普通表,您不仅需要传入列值,还需要传入关于该列的任何属性(模式,表名,列名等):

CREATE OR REPLACE FUNCTION myfunction (owner IN varchar2, table_name IN varchar2, column_name IN varchar2, column_value IN varchar2)
  RETURN something
AS

BEGIN
  -- do something with owner, table_Name, column_name and column_value
  RETURN something
END;

字符串
/

SELECT myfunction('MYSCHEMA','MYTABLE','MYCOLUMN',mycolumn)
  FROM myschema.mytable


此外,Oracle是硬类型的,因此如果您想要一个泛型函数,则需要为my_column/column_value的不同可能数据类型创建重载(在一个包中具有相同函数名的多个定义)。一个用于字符串,一个用于数字,一个用于日期,等等。

相关问题