代码之家  ›  专栏  ›  技术社区  ›  hud

需要根据oracle中的某些条件使用游标生成18位代码

  •  -1
  • hud  · 技术社区  · 4 年前

    我有一个表,我想从中生成18位代码。

    下面是我想要的18位代码示例。

    R-AP-AP01-SMT-4567

    同样为了生成上述示例代码,这里是数据及其逻辑:

    1. R-固定值
    2. AP(state列中的2位状态代码)
    3. EAST-(来自以下查询的ZONE_NAME列
    4. SMT(来自以下查询的FORMAT_CODE列)
    5. 4567(来自以下查询的“来自商店代码”列)

    SELECT STATE, STORE_CODE, ZONE_NAME FROM TBL_RRSOC_STORE_INFO;

    以及

    select FORMAT_CODE from TBL_SITE_STORE_FORMAT;

    如何实现?

    使现代化

    下表描述

    Table name:- TBL_RRSOC_STORE_INFO
    
    Name                        Null     Type           
    --------------------------- -------- -------------- 
    RRSOC_ID                    NOT NULL NUMBER         
    STORE_CODE                  NOT NULL NVARCHAR2(55)  
    STATE                                NVARCHAR2(55)  
    SLP_STATE                            NVARCHAR2(100) 
    FORMAT_GROUP                         NVARCHAR2(100) 
    
    
    Table name:- TBL_SITE_STORE_FORMAT
    Name         Null Type          
    ------------ ---- ------------- 
    ID                VARCHAR2(20)  
    STORE_FORMAT      VARCHAR2(100) 
    ISACTIVE          VARCHAR2(3)   
    FORMAT_GROUP      VARCHAR2(100) 
    FORMAT_CODE       VARCHAR2(50)  
    1 回复  |  直到 4 年前
        1
  •  1
  •   Littlefoot    4 年前

    按照你的说法,你会以某种方式连接这些表(交叉连接和其他表一样好,因为你没有更好地解释它),并连接列值。

    像这样的东西:

    SQL> with
      2  tbl_rrsoc_store_info (state, store_code, zone_name) as
      3    (select 'AP', 'EAST', 'SMT' from dual union all
      4     select 'NY', 'WEST', 'XYZ' from dual
      5    ),
      6  tbl_site_store_format (format_code) as
      7    (select 4567 from dual)
      8  --
      9  select 'R' ||'-'|| r.state ||'-'|| r.store_code ||'-'|| r.zone_name ||'-'|| s.format_code result
     10  from tbl_rrsoc_store_info r cross join tbl_site_store_format s;
    
    RESULT
    --------------------
    R-AP-EAST-SMT-4567
    R-NY-WEST-XYZ-4567
    
    SQL>
    

    函数返回一个值;你没有解释它应该是什么样子(它接受哪些参数),所以我选择通过 state ,假设它在表中是唯一的。

    示例数据:

    SQL> select * From tbl_rrsoc_store_info;
    
    ST STOR ZON
    -- ---- ---
    AP EAST SMT
    NY WEST XYZ
    
    SQL> select * from tbl_site_store_format;
    
    FORMAT_CODE
    -----------
           4567
    

    功能:

    SQL> create or replace function f_test (par_state in varchar2)
      2    return varchar2
      3  is
      4    retval varchar2(18);
      5  begin
      6    select 'R' ||'-'|| r.state ||'-'|| r.store_code ||'-'|| r.zone_name ||'-'|| s.format_code
      7      into retval
      8      from tbl_rrsoc_store_info r cross join tbl_site_store_format s
      9      where r.state = par_state;
     10
     11    return retval;
     12  end;
     13  /
    
    Function created.
    

    测试:

    SQL> select r.state, f_test(r.state) result
      2  from tbl_rrsoc_store_info r;
    
    ST RESULT
    -- --------------------
    AP R-AP-EAST-SMT-4567
    NY R-NY-WEST-XYZ-4567
    
    SQL>
    
    推荐文章