2013-06-20 38 views
2

如何在Oracle中創建一個具有表作爲輸入參數並返回字符串的函數?這裏是我的嘗試,但返回一個錯誤:以表格作爲輸入參數的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()會給我其他錯誤。有誰知道如何調試呢?

回答

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; 
+0

謝謝!我想我最終把自己與命名混淆了。 – user2506680

相關問題