2

入力パラメーターとしてテーブルを持ち、文字列を返す関数を 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()他のエラーが発生します。これをデバッグする方法を知っている人はいますか?

4

1 に答える 1

2

を使用してテーブル内のインデックスを参照する場合col_name(i)、 のように、そのテーブル インデックスのオブジェクト プロパティも参照する必要があります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;
于 2013-06-20T20:43:13.090 に答える