Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.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
Oracle Pl/SQL函数返回带有已更改字符的字符串_Oracle_Function_Plsql - Fatal编程技术网

Oracle Pl/SQL函数返回带有已更改字符的字符串

Oracle Pl/SQL函数返回带有已更改字符的字符串,oracle,function,plsql,Oracle,Function,Plsql,如何编写一个简单的函数,在参数更改后返回,使其不再包含某些符号 (č=>c,ć=>c,š=>s,đ=>d,ž=>z.) e、 g.*urđević*=>“*djurdjevic*” e、 g.*kuća*=>*kuca* e、 g.*čaćkati*=>*cackati* 到目前为止我还没有代码。我对这方面很陌生,正在努力学习一些东西。查看翻译 例如: TRANSLATE('1tech23', '123', '456') Result: '4tech56' 你可以试试这个功能 SELECT

如何编写一个简单的函数,在参数更改后返回,使其不再包含某些符号

(č=>c,ć=>c,š=>s,đ=>d,ž=>z.)
e、 g.*urđević*=>“*djurdjevic*”
e、 g.*kuća*=>*kuca*
e、 g.*čaćkati*=>*cackati*

到目前为止我还没有代码。我对这方面很陌生,正在努力学习一些东西。

查看翻译

例如:

TRANSLATE('1tech23', '123', '456')
Result: '4tech56'
你可以试试这个功能

SELECT CONVERT('Ä Ê Í Õ Ø A B C D E ', 'US7ASCII', 'WE8ISO8859P1') 
   FROM DUAL; 

CONVERT('ÄÊÍÕØABCDE' 
--------------------- 
A E I ? ? A B C D E ? 

这是在不创建任何结构的情况下可以获得的最接近的值:

SELECT utl_raw.cast_to_varchar2((nlssort('čaćkati', 'nls_sort=binary_ai')))
FROM dual;

如果您有很多组合,我建议您创建一个包含可能组合的表,并使用
TRANSLATE
功能。

对于克罗地亚字符,您可以使用
TRANSLATE
REPLACE
的组合,因为
TRANSLATE
不支持一对多翻译(例如,đ=>dj)

SELECT CONVERT('Ä Ê Í Õ Ø A B C D E ', 'US7ASCII', 'WE8ISO8859P1') 
   FROM DUAL; 

CONVERT('ÄÊÍÕØABCDE' 
--------------------- 
A E I ? ? A B C D E ? 
以及输出:

out
--------------------------
djak zvakaca cicak suma 
编辑

下面是两个实现此功能的包装器函数。第一个使用内置的,而另一个有自己的自定义实现

-- first
CREATE OR REPLACE FUNCTION f_translate(p_string IN VARCHAR) 
RETURN VARCHAR 
AS
BEGIN
   RETURN REPLACE(TRANSLATE(p_string,'žćčš', 'zccs'), 'đ', 'dj');
END;

-- second
CREATE OR REPLACE FUNCTION f_translate_custom(p_string IN VARCHAR) 
RETURN VARCHAR 
AS
    v_current varchar(1);
    v_retval VARCHAR(255);
BEGIN
    FOR i IN 1..LENGTH(p_string) LOOP
        v_current := SUBSTR(p_string, i, 1);

        v_retval := v_retval || CASE v_current
                                    WHEN 'č'  THEN 'c'
                                    WHEN 'ć'  THEN 'c'
                                    WHEN 'ž'  THEN 'z'
                                    WHEN 'š'  THEN 's'
                                    WHEN 'đ'  THEN 'dj'
                                    ELSE v_current
                                END;                                
    END LOOP;

   RETURN v_retval;
END;
还有一些测试代码

SET SERVEROUTPUT ON;
BEGIN
    DBMS_OUTPUT.PUT_LINE('Built-in: ' || f_translate('đak žvakaća čičak šuma'));

    DBMS_OUTPUT.PUT_LINE('Custom: ' || f_translate_custom('đak žvakaća čičak šuma'));

END;

非常感谢。但是如何将其形成一个具有适当结构的函数呢