如何使用SELECT结果记录作为DECODE参数?

发布于 2024-12-23 04:41:25 字数 344 浏览 2 评论 0原文

当此 SELECT 仅返回带有准备好的字符串的一条记录时,是否可以使用 SELECT 结果作为 DECODE 参数? 例如:

从表中选择替换(替换(serialized_data)..)..)作为结果

在一行中返回以下结果:

0,'标签0',1,'标签1',2,'标签2'

但是当我将其放入 DECODE 时,它被解释为一个参数。 是否有可能将此结果“字符串”转换为“纯” sql代码? ;)

感谢您的帮助。

Is it possible to use SELECT result as DECODE parameters when this SELECT returns only one record with prepared string?
For example:

SELECT replace(replace(serialized_data)..)..) as result FROM table

Returns following result in ONE ROW:

0,'label0',1,'label1',2,'label2'

But when I put this to DECODE it's being interpreted as ONE PARAMETER.
Is there possiblity to convert this result "string" to "pure" sql code? ;)

Thanks for any help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

郁金香雨 2024-12-30 04:41:25

您可以使用 instrsubstr 来复制decode。下面的一个例子(可能会被大大整理但有效):

select DTXT
      ,Nvl(
         Substr(
           DTXT
          ,Instr(DTXT, SEARCHTXT || VALMTCH)
           + Length(SEARCHTXT || VALMTCH)
          ,  Instr(DTXT, VALSEP, Instr(DTXT, SEARCHTXT || VALMTCH))
           - Instr(DTXT, SEARCHTXT || VALMTCH)
           - Length(SEARCHTXT || VALMTCH))
        ,CASEOTHER)
         as TXTMATCH
  from (select '0=BLACK;1=GREEN;2=YELLOW;' as DTXT
              ,'1' as SEARCHTXT
              ,';' as VALSEP
              ,'=' as VALMTCH
              ,'OTHER' as CASEOTHER
          from Dual)

您确实需要在文本末尾有一个分号(VALSEP),以确保您可以找到最后一个值(尽管可以解决这个问题)如果我进一步研究的话)。

You could kind of replicate decode by use of instr and substr. An example below (which could probably be tidied up considerably but works):

select DTXT
      ,Nvl(
         Substr(
           DTXT
          ,Instr(DTXT, SEARCHTXT || VALMTCH)
           + Length(SEARCHTXT || VALMTCH)
          ,  Instr(DTXT, VALSEP, Instr(DTXT, SEARCHTXT || VALMTCH))
           - Instr(DTXT, SEARCHTXT || VALMTCH)
           - Length(SEARCHTXT || VALMTCH))
        ,CASEOTHER)
         as TXTMATCH
  from (select '0=BLACK;1=GREEN;2=YELLOW;' as DTXT
              ,'1' as SEARCHTXT
              ,';' as VALSEP
              ,'=' as VALMTCH
              ,'OTHER' as CASEOTHER
          from Dual)

You do need to have a semi-colon (VALSEP) at the end of the text though to ensure you can find the last value (though it's possible to work around that if I looked into it further).

云朵有点甜 2024-12-30 04:41:25

list_agg 或 wm_concat 取决于 oracle 版本。

http://docs.oracle.com/cd/E14072_01/server .112/e10592/functions087.htm

list_agg or wm_concat depending on version of oracle.

http://docs.oracle.com/cd/E14072_01/server.112/e10592/functions087.htm

帅哥哥的热头脑 2024-12-30 04:41:25

您可以使用动态 SQL:

declare
  DECTXT   varchar2(4000);
begin
  select replace(replace(serialized_data)..)..) as result into dectxt from table;
  execute immediate 'select decode(col1,' || DECTXT || ') from tab1';
end;

这只是一个简单的示例,未显示任何输出等。

You can use dynamic SQL:

declare
  DECTXT   varchar2(4000);
begin
  select replace(replace(serialized_data)..)..) as result into dectxt from table;
  execute immediate 'select decode(col1,' || DECTXT || ') from tab1';
end;

This is just a quick example, not showing any output, etc.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文