我需要将一串用逗号分隔的数字作为输入,然后将这些数字与其他一些信息一起插入到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;
/
答案 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;
/