oracle—有没有任何方法可以使用pl/sql在oracledb中输出每行一列的结果以显示不同的值?

2uluyalo  于 2021-07-26  发布在  Java
关注(0)|答案(4)|浏览(292)

我有一个select语句,它有一列是代码值。例如,用jv代替java,用python代替py。但是,我不想输出编码值,而是将它们显示为java或python,即它们的完整描述。有没有一种方法可以用pl/sql实现这一点?任何帮助都将不胜感激,谢谢!

myss37ts

myss37ts1#

你可以用 case 表达式

select
   case 
     when myColumn = 'JV' then 'Java'
     when myColumn = 'PY' then 'Python'
   end as myColumn
from yourTable

oracle 你可以用 decode 也。

decode(col, 'JV', 'Java',
             'PY', 'Python'
             'No Match'
        )
8nuwlpux

8nuwlpux2#

鉴于您使用的是oracle,我建议您使用 DECODE 功能:

SELECT
    col,
    DECODE(col, 'JV', 'Java',
                'PY', 'Python',
                'Not found') AS col_out
FROM yourTable;
rbpvctlc

rbpvctlc3#

您可以使用“decode”函数或“case”构造,如下所示:

select DECODE(my_column,
              'JV','Java',
              'PY','Python',
              'no_match_found') my_column_alias 
from my_table;

select
   case my_column 
      when 'JV' then 'Java'
      when 'PY' then 'Python'
      else 'no_match_found'
   end my_column_alias
from my_table;
pw9qyyiw

pw9qyyiw4#

虽然对给定的样本数据有几种硬编码方法,但对于非常有限的数据集,没有一种方法是合适的。正确的方法是创建查找表。在本例中包含代码和相应的名称。是的,对于两种语言来说,这是相当过分的,但是tiobe索引或者wikipedia中列出的700个,或者hopl列表中估计的大约9000个呢。请参阅此处和其他链接。
此外,这是一种标准的技术来解决下面的问题:是否有一种方法可以提供关于给定代码值的详细信息。它很容易扩展(只需将行添加到表中)并且适用于几乎所有的域(稍加修改即可)。

-- create language lookup
create table language_lookup(
       code        varchar2(8)
     , name        varchar2(200)
     , description varchar2(4000)
     , constraint  language_lookup_pk
                   primary key (code)
     ); 

insert into language_lookup(code, name)
  select 'JV','Java'      from dual union all
  select 'PY','Python'    from dual ;

-- your table 
create table your_table ( id        integer
                        , lang_code varchar2(8)
                          --... 
                        , constraint your_table_pk 
                                     primary key (id)
                        , constraint your_table_2_language_lookup_fk
                                     foreign key (lang_code) 
                                     references language_lookup(code)
                        ) ;
insert into your_table (id, lang_code)
  select 1,'JV'  from dual union all 
  select 2,'PY'  from dual;

select yt.lang_code, ll.name 
   from your_table      yt
   join language_lookup ll 
     on ll.code = yt.lang_code
  where yt.lang_code in ('JV','PY')
; 

-- now modify to include plsql
insert into language_lookup(code, name)
  values ( 'PLSQL', 'Oracle''s Programming Language extension for SQL');
insert into your_table (id,lang_code)
  values (3,'PLSQL');

select yt.lang_code, ll.name 
   from your_table      yt
   join language_lookup ll 
     on ll.code = yt.lang_code
;

用你的硬编码值试试。再加上30-40。。。

相关问题