Oracle中如何根据某些条件使用游标生成18位代码

How to generate 18 digit code using cursor based on some conditions in Oracle

我有一个 table,我想从中生成 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描述

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)  

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

像这样:

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>

函数returns一个值;你没有解释它应该是什么样子(它接受哪些参数)所以我选择传递 state,假设它在 table.

中是唯一的

示例数据:

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>