2017-03-03 93 views
0

我開發了1個apex頁面,其中有一個文本字段。我將通過逗號分隔來插入多個值。我希望當我點擊提交按鈕時,它應該根據逗號分隔值,並應單獨插入不同的行中。例如,如果我在文本字段中傳遞「abc,cde,efgh,ijhk,gygg」,那麼它應該在一行中插入「abc」,在另一行中插入「cde」,依此類推。當我只插入一個值時,它也不應該通過任何錯誤。從Oracle Apex頁面獲取多個值並將其存儲在表中

我能夠存儲只有一個數據的值,因爲我已經創建了一個過程,該過程只接受一個數據,但我沒有想到如果我通過逗號分隔它傳遞多個值,那麼它應該插入。我在這裏發佈我的程序。

create or replace procedure Exclude_items(
p_analyze_name in varchar2, 
p_material_number in varchar2 
) 
as 
p_analyze_id number; 

begin 

select analyze_id 
into p_analyze_id 
from analyzes 
where table_name = p_analyze_name; 

insert into p20da.test_vishal(ANALYZE_ID,MATNR,) values(p_analyze_id,p_material_number) 
end; 

這裏matnr將有多個由逗號分隔的值,因爲它是apex頁面中的文本字段,但analyze_id將是常量。

我想編寫過程,以便它可以分隔每當逗號出現,並且不應該通過任何錯誤,如果我只插入一個值。

+0

這是爲大家SO向他人SO禮儀社會負有責任,所以請仔細閱讀本 http://stackoverflow.com/help/有人-答案 – XING

回答

0

如何像:

create or replace procedure exclude_items(p_analyze_name in varchar2, p_material_number in varchar2) 
as 
    comma_pos number; 
    sub_name varchar2(4000); 
    temp_name varchar2(4000); 

    p_analyze_id number; 
begin 

select analyze_id 
into p_analyze_id 
from analyzes 
where table_name = p_analyze_name; 

    temp_name := p_material_number; 
    LOOP 
    comma_pos := instr(temp_name, ','); 
    exit when comma_pos = 0; 
    sub_name := substr(temp_name,1,comma_pos-1); 

    insert into p20da.test_vishal(ANALYZE_ID,MATNR,) values(p_analyze_id,sub_name) 
    temp_name := substr(temp_name, comma_pos + 1); 

    END LOOP; 

    insert into p20da.test_vishal(ANALYZE_ID,MATNR,) values(p_analyze_id,temp_name) 

end; 
/
0

你應該採取APEX_UTIL封裝的STRING_TO_TABLE功能的優勢。將以下代碼添加到提交過程中,您的exclude_items過程保持不變。在API包函數

DECLARE 
    L_MATERIAL_NUMBER APEX_APPLICATION_GLOBAL.VC_ARR2; 
BEGIN 
    L_MATERIAL_NUMBER := APEX_UTIL.STRING_TO_TABLE(:P2_MATERIAL_NUMBER,','); 
    FOR I IN 1..L_MATERIAL_NUMBER.COUNT 
    LOOP 
    EXCLUDE_ITEMS('tablea', L_MATERIAL_NUMBER(I)); 
    END LOOP; 
END; 

更多信息 - >http://docs.oracle.com/cd/E11882_01/appdev.112/e12510/apex_util.htm#CHDFEEJD

相關問題