5

好的,这是一个晦涩的问题,但希望有人可以帮助我解决这个问题。

我正在开发的系统构建了一个动态 SQL 字符串,用于在存储过程中执行,并且动态 SQL 的一部分定义了列别名,它们本身实际上是从另一个用户生成的数据表中检索的值。

因此,例如,字符串可能看起来像:

SELECT table1.Col1 AS "This is an alias" FROM table1

这工作正常。但是,用于别名的值可能包含双引号字符,这会破坏外引号。我认为我可能会以某种方式在别名中转义双引号,但我没有运气弄清楚如何这样做。反斜杠不起作用,连续使用两个双引号会导致此错误;

SQL Error: ORA-03001: unimplemented feature
03001. 00000 -  "unimplemented feature"
*Cause:    This feature is not implemented.

有没有人有过这个问题的经验?为任何人的任何见解而欢呼。

ps 别名周围需要引号,因为它们可以包含空格。

4

5 回答 5

4

你可以在代码中用双引号代替另一个字符而不是双引号吗?

像这样的东西:

SELECT table1.Col1 AS "This is |not| an alias" FROM table1

然后只需替换 | 和 ”。

我知道这是一个 hack,但我想不出更好的解决方案......无论如何,你正在做的是一个 hack。“不错”的方法是分别选择值和列名并将它们关联到您的代码中。那会让事情变得更干净。

于 2008-09-11T14:39:39.200 回答
2

使用 Oracle 引号运算符:

select q'#someone's quote#' from dual;

'#' 可以替换为任何字符

于 2010-02-02T07:50:30.560 回答
1

当我运行这个:

select 'test"columnname"' from dual

Oracle 返回这个(注意 Oracle 生成的列名):

'TESTCOLUMNNAME'
--------------------------------
test"columnname

Oracle 的列名不包含我的双引号这一事实告诉我,Oracle 可能无法代表这一点。

据我所知,最好的选择是在使用列名之前从数据中去除双引号。可悲的是,这也需要您在选择这些列时执行相同的过滤,但我没有看到其他方式。

于 2008-09-11T14:10:21.190 回答
0

一个可能富有成果的调查领域是研究引用方法。

我的 $quotedString = $dbh->quote( $string );

于 2008-09-16T18:29:44.707 回答
0

试试这个,两个单引号实际上在输出中看起来像一个双引号:
select 1 as "University ''John Smith''" from dual;

于 2013-09-23T07:43:39.127 回答