解析 PL/SQL 中的字符串并使用 RESTful 网络服务将值插入数据库
Parsing string in PL/SQL and insert values into database with RESTful web service
我正在读取要插入数据库的值。我正在逐行阅读它们。一行是这样的:
String line = "6, Ljubljana, Slovenija, 28";
Web 服务需要用逗号分隔值并将它们插入数据库。使用 PL/SQL 语言。我该怎么做?
这里是一些 pl/sql 我用来解析分隔字符串然后提取单个单词的东西。使用 Web 服务时,您可能不得不稍微弄乱它,但是当您在 Oracle 中 运行 它工作正常。
declare
string_line varchar2(4000);
str_cnt number;
parse_pos_1 number := 1;
parse_pos_2 number;
parsed_string varchar2(4000);
begin
--counting the number of commas in the string so we know how many times to loop
select regexp_count(string_line, ',') into str_cnt from dual;
for i in 1..str_cnt + 1
loop
--grabbing the position of the comma
select regexp_instr(string_line, ',', parse_pos_1) into parse_pos_2 from dual;
--grabbing the individual words based of the comma positions using substr function
--handling the last loop
if i = str_cnt + 1 then
select substr(string_line, parse_pos_1, length(string_line)+1 - parse_pos_1) into parsed_string from dual;
execute immediate 'insert into your_table_name (your_column_name) values (' || parsed_string || ' )';
execute immediate 'commit';
--handles the rest
else
select substr(string_line, parse_pos_1, parse_pos2 - parse_pos_1) into parsed_string from dual;
execute immediate 'insert into your_table_name (your_column_name) values (' || parsed_string || ' )';
execute immediate 'commit';
end if;
parse_pos_1 := parse_pos_2+1;
end loop;
end;
我找到了那个特定问题的答案。如果您的值与我针对某个问题发布的值相似,例如数字,看起来像这样:
String line = "145, 899";
此字符串通过 POST 请求(RESTful 网络服务,APEX)发送。现在获取 PL/SQL 中的值并将它们插入 table 看起来像这样:
DECLARE
val1 NUMBER;
val2 NUMBER;
str CLOB;
BEGIN
str := string_fnc.blob_to_clob(:body); // we have to convert body
val1 := TO_NUMBER(REGEXP_SUBSTR(str, '[^,]+', 1, 1));
val2 := TO_NUMBER(REGEXP_SUBSTR(str, '[^,]+', 1, 2));
// REGEXP_SUBSTR(source, pattern, start_position, nth_appearance)
INSERT INTO PRIMER VALUES (val1, val2);
END;
但是,这是逐行插入数据库的方法,因此如果文件中有大量行要插入,这不是一种方法。但这是我要求的例子。我希望它对某人有所帮助。
我正在读取要插入数据库的值。我正在逐行阅读它们。一行是这样的:
String line = "6, Ljubljana, Slovenija, 28";
Web 服务需要用逗号分隔值并将它们插入数据库。使用 PL/SQL 语言。我该怎么做?
这里是一些 pl/sql 我用来解析分隔字符串然后提取单个单词的东西。使用 Web 服务时,您可能不得不稍微弄乱它,但是当您在 Oracle 中 运行 它工作正常。
declare
string_line varchar2(4000);
str_cnt number;
parse_pos_1 number := 1;
parse_pos_2 number;
parsed_string varchar2(4000);
begin
--counting the number of commas in the string so we know how many times to loop
select regexp_count(string_line, ',') into str_cnt from dual;
for i in 1..str_cnt + 1
loop
--grabbing the position of the comma
select regexp_instr(string_line, ',', parse_pos_1) into parse_pos_2 from dual;
--grabbing the individual words based of the comma positions using substr function
--handling the last loop
if i = str_cnt + 1 then
select substr(string_line, parse_pos_1, length(string_line)+1 - parse_pos_1) into parsed_string from dual;
execute immediate 'insert into your_table_name (your_column_name) values (' || parsed_string || ' )';
execute immediate 'commit';
--handles the rest
else
select substr(string_line, parse_pos_1, parse_pos2 - parse_pos_1) into parsed_string from dual;
execute immediate 'insert into your_table_name (your_column_name) values (' || parsed_string || ' )';
execute immediate 'commit';
end if;
parse_pos_1 := parse_pos_2+1;
end loop;
end;
我找到了那个特定问题的答案。如果您的值与我针对某个问题发布的值相似,例如数字,看起来像这样:
String line = "145, 899";
此字符串通过 POST 请求(RESTful 网络服务,APEX)发送。现在获取 PL/SQL 中的值并将它们插入 table 看起来像这样:
DECLARE
val1 NUMBER;
val2 NUMBER;
str CLOB;
BEGIN
str := string_fnc.blob_to_clob(:body); // we have to convert body
val1 := TO_NUMBER(REGEXP_SUBSTR(str, '[^,]+', 1, 1));
val2 := TO_NUMBER(REGEXP_SUBSTR(str, '[^,]+', 1, 2));
// REGEXP_SUBSTR(source, pattern, start_position, nth_appearance)
INSERT INTO PRIMER VALUES (val1, val2);
END;
但是,这是逐行插入数据库的方法,因此如果文件中有大量行要插入,这不是一种方法。但这是我要求的例子。我希望它对某人有所帮助。