INSERT用户在表中输入了条件

时间:2017-04-13 11:38:15

标签: oracle plsql

我需要将一串用逗号分隔的数字作为输入,然后将这些数字与其他一些信息一起插入到Oracle表中。

我有以下代码来获取字符串并将其分成单独的数字,然后可以执行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;
/  

2 个答案:

答案 0 :(得分:1)

由于您通过替换变量输入数字,您可以这样做:

Oracle设置

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来拆分字符串。

答案 1 :(得分: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;
/