"景先生毕设|www.jxszl.com

oracle 自定拼音码、五笔吗函数

2023-09-12 15:40编辑: www.jxszl.com景先生毕设

oracle 自定拼音码、五笔吗函数

函数定义如下:
create or replace function fun_get_PYWB (v_string in varchar2, v_spellFlag in number) return varchar2 is
 
/*----
 
|| 函数名称 :转换成拼音码或者五笔码
 
 
|| 功能描述 :将传入的字符串转换成相应的拼音码或者五笔码
 
|| 参数描述 :参数标识      输入/输出       类型          名称
 
||  -------------------------------------------------------------
 
||   v_string       输入           varchar2      需要转换的字符串
 
||  v_type         输入           number        转换类型-0 转换成五笔码,1 (或其他)转换成拼音码,
 
|| 返回:     字符型   转换后的查询码,如果出错误返回''
 
*/
 
I            number(5);
 
li_sqlcode   number;
li_count     number;
 
ls_sqlerrm   varchar2(128);
 
Ls_ReturnStr varchar2(50);
 
Ls_ch        varchar2(10);
 
Ls_temp      varchar2(10);
 
begin
 
    --如果传入字符串为空,则返回空值
 
    if v_string is null then
 
       return v_string;
 
    end if;
 
 
    ls_ReturnStr := '';
 
 
    I := 1;
 
 
    li_count := Length(substr(v_string,1,30));
 
 
    --依次处理v_string中每个字符
 
 
    For i in 1 .. li_count   loop
 
 
        ls_ch := substr(v_string , i , 1);
 
        --If ASCII(ls_ch)<128  then
 
 
            --  非汉字 ,不变
 
 
            --ls_returnStr := ls_returnStr || upper(ls_ch);
 
 
        --Else
 
 
            --   是汉字
 
            begin
 
 
                if v_spellFlag = 0 then
 
 
                    --查询五笔码
 
 
                    SELECT WB_CODE
 
 
                    INTO   Ls_temp
 
 
                    FROM   COM_SPELLBASE
 
 
                    WHERE  NAME     = ls_ch
 
 
                    AND    ROWNUM = 1;
 
 
                else
 
 
                    --查询拼音码
 
 
                    SELECT SPELL_CODE
 
 
                    INTO   Ls_temp
 
 
                    FROM   COM_SPELLBASE
 
 
                    WHERE  NAME     = ls_ch
 
 
                    AND    ROWNUM = 1;
 
               end if;
 
               --返回的字符串
 
               ls_returnStr := ls_returnStr || ls_temp;
 
               EXCEPTION
 
               WHEN NO_DATA_FOUND THEN
 
                    ls_returnStr := ls_returnStr;
 
               WHEN OTHERS THEN
 
 
                    li_sqlcode := sqlcode;
 
 
                    ls_sqlerrm := substr(sqlerrm,1,128);
 
 
                    return '';
 
            end;
 
        ---end if  ;
 
    end loop;
 
  --返回
  return substr(ls_returnStr,1,30);
end fun_get_PYWB;
------------------------------------------------------------------------------
------------------------------------------------------------------------------
例子:
拼音码查询:
select fun_get_querycode('张三',1) from dual  -- 输出:ZS
五笔码查询:
select fun_get_querycode('张三',0) from dual  -- 输出:XD
 

原文链接:http://www.jxszl.com/biancheng/shujuku/445692.html