Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 对Oracle数据库列执行多个替换操作_Sql_String_Oracle_Performance - Fatal编程技术网

Sql 对Oracle数据库列执行多个替换操作

Sql 对Oracle数据库列执行多个替换操作,sql,string,oracle,performance,Sql,String,Oracle,Performance,我目前在Oracle数据库列中有一组字符串需要更改,现在我正在运行多个update语句来完成此操作 UPDATE TABLE1 SET COLUMN1 = REPLACE (COLUMN1, 'ABC', 'SR1') UPDATE TABLE1 SET COLUMN1 = REPLACE (COLUMN1, '123', 'SR2') UPDATE TABLE1 SET COLUMN1 = REPLACE (COLUMN1, 'XYZ', 'SR3') UPDATE TABLE1 S

我目前在Oracle数据库列中有一组字符串需要更改,现在我正在运行多个update语句来完成此操作

UPDATE TABLE1 SET COLUMN1 = REPLACE 
(COLUMN1, 'ABC', 'SR1')
UPDATE TABLE1 SET COLUMN1 = REPLACE  
(COLUMN1, '123', 'SR2')
UPDATE TABLE1 SET COLUMN1 = REPLACE  
(COLUMN1, 'XYZ', 'SR3')
UPDATE TABLE1 SET COLUMN1 = REPLACE    
(COLUMN1, '789', 'SR4')
比如说,我是否可以一次就完成这项工作

UPDATE TABLE1 
SET
COLUMN1 = REPLACE(COLUMN1, 'XYZ', 'SR3'), 
COLUMN1 = REPLACE(COLUMN1, '789', 'SR4')

您可以嵌套
replace()
调用:

UPDATE TABLE1
    SET COLUMN1 = REPLACE(REPLACE(REPLACE(REPLACE(COLUMN1, 'ABC', 'SR1'), '123', 'SR2'), 'XYZ', 'SR3'), '789', 'SR4');

甲骨文公司还提供。对于某些数据转换,您可能会发现这很方便。

您可以使用关联数组创建UDF

CREATE OR REPLACE  FUNCTION my_replace (
    inp VARCHAR2
) RETURN VARCHAR2 IS
    v_out   VARCHAR2(1000) := inp;
    TYPE v_astype IS
        TABLE OF VARCHAR2(40) INDEX BY VARCHAR(40);
    v_pat      v_astype;
    v_idx      VARCHAR2(40);
BEGIN
   v_pat('ABC') := ('SR1');
   v_pat('123') := ('SR2');
   v_pat('XYZ') := ('SR3');
   v_pat('789') := ('SR4');
    v_idx := v_pat.first;
    WHILE v_idx IS NOT NULL LOOP
        v_out := replace(v_out,v_idx,v_pat(v_idx) );
        v_idx := v_pat.next(v_idx);
    END LOOP;
    RETURN v_out;
END; 
/
至少现在,您的update语句看起来很干净:

UPDATE TABLE1
    SET COLUMN1 = my_replace(column1) ;
此外,对于Oracle 12c及更高版本,您可以使用内联函数(如果您只想在
选择
中使用函数,则该函数有效)


由于这是Oracle,您可以编写PL/SQL函数来进行转换:

create or replace function multi_replace(vi_string varchar2) return varchar2 is
  vo_string varchar2(4000);
begin
  vo_string := vi_string;
  vo_string := replace(vo_string, 'XYZ', 'SR3');
  vo_string := replace(vo_string, '789', 'SR4');
  ...
  return vo_string;
end;
然后在查询中调用它:

update mytable set column1 = multi_replace(column1);

您的速度更快:),只是好奇什么是最大嵌套func限制(255或32)?我如何使用regexp_replace实现相同的功能?我担心我会遇到最高级别的问题functions@lad2025 . . . 我碰巧知道,在SQL Server中,它大约是32。我不知道Oracle中的限制是什么。请检查我的答案,让我知道它是否有效。请阅读:。