如何在Oracle过程中定义键值变量

时间:2015-12-16 09:16:36

标签: oracle stored-procedures

我想创建一个Oracle Procedure来替换DB中的单词。 我有一个键值列表,其中包含原始单词和单词的替换值。 问题是如何在oracle过程中定义变量,以便我可以使用原始单词并替换单词的值。 另一个问题是,我想设置一个可以存储id列表的变量V.我可以像select * from table where id in V一样使用它。如何定义变量? 感谢

1 个答案:

答案 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