Oracle函数用表作为输入参数

时间:2013-06-20 20:01:59

标签: oracle function plsql

如何在Oracle中创建一个具有表作为输入参数并返回字符串的函数?这是我的尝试但是返回错误:

create or replace type temp_table as object (col_name varchar(100));
/
create or replace type col_table as TABLE of temp_table;
/
create or replace FUNCTION COLUMN_HEADERS
  (col_name in col_table)
  RETURN VARCHAR2 
is
  return_string VARCHAR2(4096);
BEGIN
  return_string := '';
  for i in 1 .. col_name.count loop
    return_string := return_string || ' ''' || col_name(i) || ''' as ' || regexp_replace(col_name(i), '[ \+]', '_');
    if i < col_name.count then
      return_string := return_string || ',';
    end if;
  end loop;
  RETURN return_string;
END;

我得到以下内容:

Error(9,9): PL/SQL: Statement ignored
Error(9,26): PLS-00306: wrong number or types of arguments in call to '||'

指向这一行:

return_string := return_string || ' ''' || col_name(i) || ''' as ' || regexp_replace(col_name(i), '[ \+]', '_');

我的猜测是col_name(i)不会返回字符串,但使用VALUE()TO_CHAR()会给我带来其他错误。有谁知道如何调试这个?

1 个答案:

答案 0 :(得分:2)

使用col_name(i)引用表中的索引时,您还需要引用该表索引的object属性,如col_name(i).col_name中所示。在您的情况下,您使用col_name作为对象属性和函数参数。为清楚起见,您可以改变它。这是为我编写的:

create or replace type temp_table is object (col_name varchar(100));
/
create or replace type col_table is TABLE of temp_table;
/
create or replace FUNCTION COLUMN_HEADERS
  (col_name in col_table)
  RETURN VARCHAR2 
is
  return_string varchar2(4096);
BEGIN
  return_string := '';
  for i in 1 .. col_name.count loop
    return_string := return_string || ' ''' || col_name(i).col_name || ''' as ' || regexp_replace(col_name(i).col_name, '[ \+]', '_');
    if i < col_name.count then
      return_string := return_string || ',';
    end if;
  end loop;
  return return_string;
END;
相关问题