我想创建一个Oracle Procedure来替换DB中的单词。
我有一个键值列表,其中包含原始单词和单词的替换值。
问题是如何在oracle过程中定义变量,以便我可以使用原始单词并替换单词的值。
另一个问题是,我想设置一个可以存储id列表的变量V.我可以像select * from table where id in V
一样使用它。如何定义变量?
感谢
答案 0 :(得分:1)
键值列表可以通过以下方式实现:
DECLARE
TYPE mapper IS TABLE OF VARCHAR2(30) INDEX BY VARCHAR2(30);
htab mapper;
BEGIN
htab('A') := 'B';
htab('B') := 'A';
dbms_output.put_line(htab('A'));
END;
/
关于你的第二个问题,互联网上有很多样本如何在Oracle中拆分字符串。其中之一是:
CREATE OR REPLACE TYPE split_tbl as table of varchar2(2000);
CREATE OR REPLACE FUNCTION split
(
p_list varchar2,
p_del varchar2 := ','
) return split_tbl pipelined
is
l_idx pls_integer;
l_list varchar2(2000) := p_list;
l_value varchar2(2000);
begin
loop
l_idx := instr(l_list,p_del);
if l_idx > 0 then
pipe row(substr(l_list,1,l_idx-1));
l_list := substr(l_list,l_idx+length(p_del));
else
pipe row(l_list);
exit;
end if;
end loop;
return;
end split;
/
之后您可以使用以下方式使用拆分功能:
select * from table(split('2d,2fdsd'))
它将返回:
COLUMN_VALUE
------
2d
2fdsd
您的查询:
select * from table where id in V
可以替换为:
select t.*
from table t
join table(split('1,2')) V
on V.Column_Value = t.id