首页 > 数据库 >Oracle 实现多语言(即根据用户登录的环境自适应本地语言)

Oracle 实现多语言(即根据用户登录的环境自适应本地语言)

时间:2024-04-12 09:00:44浏览次数:26  
标签:END 语言 登录 msg VARCHAR2 str Oracle SD079 id

  CREATE OR REPLACE PACKAGE BODY OADBA.db_global
IS
   --設定參數值
   PROCEDURE set_value (parameter VARCHAR2, val VARCHAR2)
   IS
   BEGIN
      DBMS_SESSION.set_context ('db_context' , parameter , val );
   END set_value ;

   --取得參數值
   FUNCTION get_value (parameter VARCHAR2)
      RETURN VARCHAR2
   IS
      v_value   VARCHAR2 (200);
   BEGIN
      SELECT SYS_CONTEXT ('db_context' , parameter ) INTO v_value FROM DUAL;

      RETURN v_value ;
   EXCEPTION
      WHEN OTHERS
      THEN
         RETURN NULL;
   END get_value ;

   /*
   把以strb作為分隔符號分解stra,並返回陣列。
   */
   FUNCTION split (v_stra IN VARCHAR2, v_strb IN VARCHAR2 )
      RETURN v_str_array
   IS
      i          INT := 1;
      j          INT := 0;
      v_len      INT := 0;
      v_len1     INT := 0;
      str        VARCHAR2 (4000);
      my_array   v_str_array ;
   BEGIN
      v_len := LENGTH (v_stra);
      v_len1 := LENGTH (v_strb);

      WHILE j <= v_len
      LOOP
         j := INSTR (v_stra , v_strb , i );

         IF j = 0
         THEN
            j := v_len + 1;
            str := SUBSTR (v_stra , i );
            --str_split.EXTEND;
            --my_table.extend;
            my_array (my_array .COUNT) := str ;

            IF i >= v_len
            THEN
               EXIT;
            END IF;
         ELSE
            str := SUBSTR (v_stra , i , j - i );
            i := j + v_len1 ;
            --str_split.EXTEND;
            my_array (my_array .COUNT) := str ;
         END IF;
      END LOOP;

      RETURN my_array ;
   END;

   /*
   依傳入Msg_ID返回Message
   v_msg_parameter為傳入參數,格式如:LOT_NO=SK123-001,MTR_NO=NX0012309
   多個參數以逗?分開
   */
   FUNCTION get_messages (v_msg_id VARCHAR2, v_msg_parameter VARCHAR2 DEFAULT NULL)
      RETURN VARCHAR2
   IS
      v_msg      VARCHAR2 (1000);
      v_array1   v_str_array ;
      v_array2   v_str_array ;
      v_str      VARCHAR2 (500);
   BEGIN
      SELECT fd040_desc
        INTO v_msg
        FROM fd040_v
       WHERE fd040_msg_id = v_msg_id ;

      IF v_msg_parameter IS NOT NULL
      THEN
         v_array1 := split (v_msg_parameter , ',');

         FOR i IN 0 .. (v_array1 .COUNT - 1)
         LOOP
            v_str := v_array1 (i );

            IF v_str IS NOT NULL
            THEN
               v_array2 := split (v_str , '=');

               IF v_array2 (0) IS NOT NULL AND v_array2.COUNT > 1
               THEN
                  v_msg := REPLACE (v_msg , '{' || v_array2 (0) || '}' , v_array2 (1));
               END IF;
            END IF;
         END LOOP;
      END IF;

      RETURN v_msg;
   EXCEPTION
      WHEN NO_DATA_FOUND
      THEN
         RETURN db_global .GET_MESSAGE ('FDM00000', 'MsgID=' || v_msg_id);
      WHEN OTHERS
      THEN
         RETURN 'MsgID:' || v_msg_id || ' error! ' || SQLERRM;
   END get_messages ;

   /*
   依傳入Msg_ID返回Message
   v_msg_parameter為傳入參數,格式如:LOT_NO=SK123-001,MTR_NO=NX0012309
   多個參數以逗?分開
   */
   FUNCTION GET_MESSAGE (v_msg_id VARCHAR2, v_msg_parameter VARCHAR2 DEFAULT NULL)
      RETURN VARCHAR2
   IS
      v_msg      VARCHAR2 (1000);
      v_array1   v_str_array ;
      v_array2   v_str_array ;
      v_str      VARCHAR2 (500);
   BEGIN
      SELECT fd040_desc
        INTO v_msg
        FROM fd040_v
       WHERE fd040_msg_id = v_msg_id ;

      IF v_msg_parameter IS NOT NULL
      THEN
         v_array1 := split (v_msg_parameter , ',');

         FOR i IN 0 .. (v_array1 .COUNT - 1)
         LOOP
            v_str := v_array1 (i );

            IF v_str IS NOT NULL
            THEN
               v_array2 := split (v_str , '=');

               IF v_array2 (0) IS NOT NULL AND v_array2.COUNT > 1
               THEN
                  v_msg := REPLACE (v_msg , '{' || v_array2 (0) || '}' , v_array2 (1));
               END IF;
            END IF;
         END LOOP;
      END IF;

      v_msg := v_msg_id || ':' || v_msg;
      RETURN v_msg;
   EXCEPTION
      WHEN NO_DATA_FOUND
      THEN
         RETURN db_global .GET_MESSAGE ('FDM00000', 'MsgID=' || v_msg_id);
      WHEN OTHERS
      THEN
         RETURN 'MsgID: ' || v_msg_id || ' error! ' || SQLERRM;
   END GET_MESSAGE ;

   --行動生成MessageID
   FUNCTION get_message_id (v_system_id VARCHAR2)
      RETURN VARCHAR2
   IS
      v_seq          NUMBER;
      v_message_id   VARCHAR2 (8);
   BEGIN
      IF v_system_id IS NOT NULL
      THEN
         BEGIN
                SELECT NVL (fd041_seq , 0) + 1
                  INTO v_seq
                  FROM fd041
                 WHERE fd041_system_id = v_system_id
            FOR UPDATE NOWAIT;
         EXCEPTION
            WHEN NO_DATA_FOUND
            THEN
               v_seq := 1;
         END;

         v_message_id := v_system_id || 'M' || LTRIM (TO_CHAR (v_seq , '00000'));

         UPDATE fd041
            SET fd041_seq = v_seq
          WHERE fd041_system_id = v_system_id ;

         IF SQL% NOTFOUND
         THEN
            INSERT INTO fd041 (fd041_system_id , fd041_seq )
                 VALUES (v_system_id , v_seq );
         END IF;

         COMMIT;

         RETURN v_message_id ;
      ELSE
         RETURN NULL;
      END IF;
   END get_message_id ;

   PROCEDURE p_test
   IS
      v_array1   v_str_array ;
   BEGIN
      v_array1 := db_global .split ('a=', '=' );
      DBMS_OUTPUT.put_line (v_array1.COUNT);
   END;
END db_global;
View Code

 

CREATE OR REPLACE FORCE VIEW OADBA.SD079_V
(
SD079_CUST_NO,
SD079_SHP_MTR,
SD079_SHP_NAME,
SD079_LOC_NAME,
SD079_NLS_NAME,
SD079_UNIT,
SD079_LOC_UNIT,
SD079_NLS_UNIT,
SD079_TYPE,
SD079_CFM_USER,
SD079_CFM_DATE,
SD079_SYS_USER,
SD079_SYS_DATE
)
AS
SELECT SD079_CUST_NO ,
SD079_SHP_MTR ,
SD079_SHP_NAME ,
SD079_LOC_NAME ,
NVL (
DECODE (db_global.get_value ( 'USER_LANG'),
db_global.get_value ('LOC_LANG' ), SD079_LOC_NAME ,
'EN', SD079_SHP_NAME ,
SD079_SHP_NAME ),
SD079_SHP_NAME )
SD079_NLS_NAME ,
SD079_UNIT ,
SD079_LOC_UNIT ,
NVL (
DECODE (db_global.get_value ( 'USER_LANG'),
db_global.get_value ('LOC_LANG' ), SD079_LOC_UNIT ,
'EN', SD079_UNIT,
SD079_UNIT ),
SD079_UNIT )
SD079_NLS_UNIT ,
SD079_TYPE ,
SD079_CFM_USER ,
SD079_CFM_DATE ,
SD079_SYS_USER ,
SD079_SYS_DATE
FROM sd079;
View Code

 

标签:END,语言,登录,msg,VARCHAR2,str,Oracle,SD079,id
From: https://www.cnblogs.com/ivenlin/p/18130435

相关文章

  • 自然语言 to 高级语言の瞎解
    好久没写博客了起因是早上写题的时候突然感受不到写下代码的含义了,思维混乱了一阵子后才重新想清楚(流感还没好+到点吃午饭没去吃=神志不清),所以现在写下来当现实稳定锚简单来说,高级语言应该能做到代码与自然语言的对应,先通过自然语言内部的转化,然后再通过相应的语法转化成高级语......
  • ansible 通过密码登录主机
    hosts[centos-root]192.168.174.129ansible_ssh_port=22ansible_ssh_user=rootansible_ssh_pass=host1192.168.174.130ansible_ssh_port=22ansible_ssh_user=root192.168.174.131ansible_ssh_port=22ansible_ssh_user=rootAnsibleVault文件创建AnsibleVault......
  • 实验2 C语言分支与循环基础应用编程
    //task1.c#include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5intmain(){intnumber;inti;srand(time(0));//以当前系统时间作为随机种子for(i=0;i<N;++i){number=rand()%65+1; printf("20238331%04d\n&......
  • C语言09-指针(指针数组、数组指针、字符指针),值传递和引用传递,指针和函数,注释写法
    第12章指针pointer12.3指针和数组①数组名可以把数组名当做是存储了首元素地址的常量。//arr的类型表示为int[5]intarr[5]={10,20,30,40,50};②指针数组指针数组(PointerArray)是一个数组,其中的每个元素都是指针。intnum1=10,num2=20,num3=30;//ptr_......
  • R语言基于决策树的银行信贷风险预警模型
    原文链接:http://tecdat.cn/?p=2783原文出处:拓端数据部落公众号 引言我国经济高速发展,个人信贷业务也随着快速发展,而个人信贷业务对提高内需,促进消费也有拉动作用。有正必有反,在个人信贷业务规模不断扩大的同时,信贷的违约等风险问题也日益突出,一定程度上制约着我国的信贷市场......
  • Kaggle自然语言处理入门 推特灾难文本分类 Natural Language Processing with Disaste
    和新闻按照标题分类差不多,用的朴素贝叶斯#导入必要的包importrandomimportsysfromsklearnimportmodel_selectionfromsklearn.naive_bayesimportMultinomialNBimportjoblibimportre,stringimportpandasaspdimportnumpyasnpdeftext_to_words(file_path)......
  • JAVA语言学习-Day8
    参考教学视频:秦疆GUI组件:窗口、弹框、面板、文本框、列表框、按钮、图片、监听事件、鼠标、键盘事件、破解工具1.简介Gui的核心:SwingAWT界面不美观需要jre环境2.AWTawt介绍:包含了很多的接口和类元素:窗口、按钮、文本框java.awt.*组件Componentbu......
  • 鸿蒙开发TypeScript语言:【TypeScript 安装】
    TypeScript安装本文介绍TypeScript环境的安装。我们需要使用到npm工具安装。NPM安装TypeScript如果你的本地环境已经安装了npm工具,可以使用以下命令来安装。使用国内镜像:npmconfigsetregistryhttps://registry.npmmirror.com安装typescript:npminstall-g......
  • 从 Oracle 到 MySQL 数据库的迁移之旅
    目录引言一、前期准备工作1.搭建新的MySQL数据库2.建立相应的数据表2.1数据库兼容性分析2.1.1字段类型兼容性分析2.1.2函数兼容性分析2.1.3是否使用存储过程?存储过程的个数?复杂度?2.1.4是否使用触发器?个数?使用的场景?2.2建表过程中其他需要注意的事项3.为项目配置Oracle和MyS......
  • c语言通过cgi做网站
    效果图:       主代码如下:#include<stdlib.h>#include<stdio.h>#include"hiredis/hiredis.h"#include"mysql/mysql.h"#pragmacomment(lib,"libmysql")#include<libmemcached/memcached.h>#include<......