【问题标题】:Oracle - How to use a function inside an escape with qOracle - 如何使用 q 在转义中使用函数
【发布时间】:2021-12-19 11:30:23
【问题描述】:

我知道我可以在这样的语句中转义字符串:

select 'That''s a really funny ''joke''' from dual; --returns: That's a really funny 'joke'

或者像这样:

select q'[That's a really funny 'joke']' from dual; --returns: That's a really funny 'joke'

两者都工作正常。

假设我需要在该 select 语句中准确地转义一个字符串,并且我还需要使用一个函数。

select q'[myfunction(somestringvariable)]' from dual;

当然这只返回“myfunction(somestringvariable)”

如前所述,我需要对函数的结果进行转义(不能在函数内部进行,需要在这个 select 语句中进行转义)。

我可以在用“q”转义的字符串中以某种方式使用该函数吗?

谢谢!

【问题讨论】:

  • 为什么?函数结果中的引号将被正确传递。只有在编写 SQL 文字时才需要费心。
  • 在我需要进行选择的地方不允许使用单引号 - 所以如果函数返回带有单引号的文本,我需要转义它们。
  • 不,你没有。列/结果值不需要转义。只有文字需要转义。
  • 这个选择的结果被用在一个脚本中(假设我现在不能改变这个脚本)。如果脚本在选择结果中找到单引号,则会引发错误。 q'[somestringvariable]' 在脚本中工作正常,但在这种情况下,我还需要使用带有 somestringvariable 的函数
  • @Hurt: Edit 问题并提供一个minimal reproducible example 来演示实际 问题。这闻起来像 XY problem

标签: sql oracle function select escaping


【解决方案1】:

在函数结果中使用双引号:

REPLACE(myfunction(somestringvariable), '''', '''''') 

【讨论】:

  • 谢谢!这将获取函数的结果并将每个单引号替换为 2 个单引号,这些单引号在之后的选择中被正确转义。很抱歉,最初需要什么不清楚(只写了“假设我需要在该 select 语句中完全转义一个字符串”)。
【解决方案2】:

Oracle 不支持模板文字。


只需使用:

SELECT myfunction(somestringvariable) FROM DUAL;

或者,如果函数没有返回字符串:

SELECT TO_CHAR(myfunction(somestringvariable)) FROM DUAL;

如果您想连接带引号的字符串文字和函数结果,请使用字符串连接。

SELECT q'[That's a really funny 'joke']'
       || myfunction(somestringvariable)
FROM   DUAL;

【讨论】:

  • 在需要使用select的地方不允许使用单引号。如果函数返回带有单引号的文本,这将失败(因为单引号仍在函数的结果中)。我需要以某种方式在选择中转义函数的返回值。
  • @Hurt 您问题中的前两个示例有单引号。这些示例的输出与函数(或与函数连接的字符串)的输出没有区别;如果“需要在哪里使用选择”(这是您之前没有定义的,所以我们无法知道该要求)适用于您问题中的前两个示例,那么答案中的所有示例也应该有效。如果他们不这样做,那么您需要edit 提供完整的minimal reproducible example 以及ALL 问题的详细信息。
  • 是的,我只是说“假设我需要在那个 select 语句中准确地转义一个字符串”——这不是很清楚,抱歉。我已经在另一条评论中得到了正确答案:stackoverflow.com/questions/69852748/…
  • 而且我还说“如前所述,我需要对函数的结果进行转义(不能在函数内部进行,需要在此 select 语句中进行转义)。”
猜你喜欢
  • 1970-01-01
  • 2021-04-17
  • 1970-01-01
  • 1970-01-01
  • 2015-09-29
  • 1970-01-01
  • 1970-01-01
  • 2011-10-31
  • 2021-10-16
相关资源
最近更新 更多