2017-04-13 30 views
0

我需要輸入一個由逗號分隔的數字字符串,然後這些數字將被插入Oracle表中並附帶一些其他信息。INSERT用戶輸入標準到表

我有以下代碼將字符串和它分離成單獨的數字,然後可以做一個INSERT,但不知道如何循環所需的次數來將每個輸入的數字插入單獨的Oracle表中的行。

任何人都可以幫忙嗎?

DECLARE 
    stores VARCHAR2 (1000) := '&3'; 
    cnt number; 
BEGIN 

select count(*) into cnt from (
SELECT REGEXP_SUBSTR (stores, 
             '[^,]+', 
             1, 
             LEVEL) 
        FROM DUAL 
      CONNECT BY REGEXP_SUBSTR (stores, 
             '[^,]+', 
             1, 
             LEVEL) 
          IS NOT NULL); 
         DBMS_OUTPUT.put_line ('Stores in list   : ' || cnt); 


    END; 
/ 

回答

0

的結構將是沿着線:

declare 
    stores varchar2(1000) := '&3'; 
begin 
    for r in (
     select regexp_substr(stores, '[^,]+', 1, level) as store 
     from dual 
     connect by regexp_substr(stores, '[^,]+', 1, level) is not null 
    ) 
    loop 
     dbms_output.put_line(r.store); -- Add your INSERT etc here 
    end loop; 
end; 
/
+1

威廉,你的代碼有「作爲商店」,這是一個新的變量?是否應該宣佈? – Dean

+0

[cursor for loop](https://docs.oracle.com/database/121/LNPLS/cursor_for_loop_statement.htm)根據其遊標隱式定義記錄,因此記錄「r」將爲每個列查詢。在這種情況下,只有一列,「商店」。 –

+0

謝謝,昨天晚上我沒有看到我需要使用r,但今天早上看到它,現在有完整的代碼,可以啓動並提供給我的用戶。再次感謝。 – Dean

1

既然你是通過置換變量輸入數字時,你可以這樣做:

甲骨文設置

CREATE TABLE your_table (your_column_name NUMBER); 

PL/SQL塊

DECLARE 
    stores SYS.ODCINUMBERLIST := SYS.ODCINUMBERLIST(&3); 
BEGIN 
    FORALL i IN 1 .. stores.COUNT 
    INSERT INTO your_table (your_column_name) VALUES (stores(i)); 
END; 
/

運行,然後輸入值1,3,5,7

輸出

SELECT * FROM your_table; 

輸出:

YOUR_COLUMN_NAME 
---------------- 
       1 
       3 
       5 
       7 

如果你正在輸入從綁定變量的字符串,那麼你可以使用this function拆分字符串。

+0

對不起,這裏有新內容。我的表使用varchar來存儲stores參數,這是不能改變的。 – Dean

+0

不錯的主意:) –