【发布时间】:2023-06-07 14:07:02
【问题描述】:
我有分隔符分隔的输入字符串,它可以有大约 40 个标记(数量可能会增加),我想使用 oracle 11 中的存储过程将这些值插入到表中; 最好的方法是什么
- 创建一个包含 40 个 IN 参数的 SP 并使用它来插入。
- 创建一个带有 1 个 IN 参数的 SP,它将采用该字符串并拆分分隔符分隔的标记并将它们插入到表中
如果第二种方法看起来不错,那么请建议如何实现它??
例如,如果一个字符串类似于"abc,123,xyz,pqr,12"(这里的分隔符是逗号)
所以在运行 SP 我的表 table1(A varchar2, B Number, C varchar2, D varchar2, E number ) 应该有类似的条目
A | B | C | D | E
abc|123|xys|pqr |12
我想出了以下解决方案,不确定性能,有没有更好的方法来做同样的事情?
declare
string_to_parse varchar2(2000) := 'abc,123,xyz,pqr,12';
A varchar2(4);
B number;
C varchar2(4);
D varchar2(4);
E number;
begin
string_to_parse := string_to_parse||',';
A := REGEXP_SUBSTR(string_to_parse,'[^,]+', 1, 1);
B := TO_NUMBER(REGEXP_SUBSTR(string_to_parse,'[^,]+', 1, 2));
C := REGEXP_SUBSTR(string_to_parse,'[^,]+', 1, 3);
D := REGEXP_SUBSTR(string_to_parse,'[^,]+', 1, 4);
E := TO_NUMBER(REGEXP_SUBSTR(string_to_parse,'[^,]+', 1, 5));
dbms_output.put_line('A ' || A || ' B ' || B || ' c ' || c || ' D ' || D || ' E ' || E);
--insert into table
end;
【问题讨论】:
-
这和 Java 有什么关系?
-
移除了 java 标签
-
您的单位/管理层必须认真考虑将您的 Oracle 数据库升级到最新版本(或至少升级到 Oracle 11)。 Oracle 9 在当今世界是原始且过时的。
-
对不起,我们将在我的本地使用 oracle 11..9。编辑问题
-
我想问题是,为什么输入是分隔字符串?在过程中的某个时刻,您必须具有离散数据值。为什么不让它们保持离散并像这样将它们传递到数据库?
标签: regex oracle stored-procedures plsql