Oracle - 在选择查询中用 OEM_sqlplus_input_finished 替换 &

Posted

技术标签:

【中文标题】Oracle - 在选择查询中用 OEM_sqlplus_input_finished 替换 &【英文标题】:Oracle - replacing & with OEM_sqlplus_input_finished in select query 【发布时间】:2011-08-19 19:09:44 【问题描述】:
select * from tableName where somecode = '$$$$$$$&8Y~$$$$'

当我在 SQLPlus Worksheet 中运行此查询时,我得到如下输出:

输入 8y 的值:old 2: And somecode = '$$$$$$$&8Y~$$$$') 新 2: 还有一些代码 = '$$$$$$$OEM_sqlplus_input_finished~$$$$')

没有选择行

我的问题是,如果使用 OracleConnection 和 OracleCommand(命令类型为文本)从 ASP.NET 应用程序执行此查询,它会作为查询 1 还是 2 执行?

1. select * from tableName where somecode = '$$$$$$$&8Y~$$$$'
2. select * from tableName where somecode = '$$$$$$$OEM_sqlplus_input_finished~$$$$'

如果以后是这种情况,我如何仅对当前的 OracleConnection 会话禁用像这样的参数替换(在关闭连接后恢复到原来的状态)?

(是旧的.NET 1.1应用,所以使用OracleConnection和OracleCommand)

【问题讨论】:

【参考方案1】:

以 & 开头的变量替换是 SQL*plus 提供的一项功能。它既不是 SQL 也不是 PL/SQL。 SQL Developer 实现了大多数这些 SQL*plus 扩展。

因此,在您的 .NET 应用程序中,与号没有特殊含义。

您也可以在 SQL*plus 和 SQL Developer 中通过执行以下命令将其关闭:

SET DEF OFF

【讨论】:

以上是关于Oracle - 在选择查询中用 OEM_sqlplus_input_finished 替换 &的主要内容,如果未能解决你的问题,请参考以下文章

oracle sql查询中用in列表中最大表达式数大于1000的处理

oracle sql查询中用in列表中最大表达式数大于1000的处理

Oracle中用子查询创建临时表 并赋值数据

oracle中用dblink查询,有时候使用where中的字符串参数不起作用

oracle SQL查询中,如何在where中用条件语句,判断不同情况,追加不同的And条件?

在 Oracle 中用 RegEx 替换列中的值