【问题标题】:Classic ASP - PL/SQL mathematical operations with VARCHAR2经典 ASP - 带有 VARCHAR2 的 PL/SQL 数学运算
【发布时间】:2016-07-08 03:33:58
【问题描述】:

我会尽力解释这一点。

我有 varchar2 列的物化视图。

这是代码示例:

SELECT field1 * 1000
FROM my_mv 
WHERE id = 15

当我从 TOAD 执行此操作时,它工作得很好(我只在数字 ofc 上执行此操作)。但是当我尝试从 ASP 做同样的事情时

sql = "SELECT field1 * 1000 FROM my_mv WHERE id = 15"
set rs = conntemp.Execute(sql)

我收到一个错误

[Microsoft][Oracle ODBC 驱动程序][Oracle]ORA-01722: 无效编号

尝试在专栏上做to_number,但还是一样

也许我不够清楚。这不是 Oracle 错误(Oracle 可以毫无问题地执行此查询,因为列值可以转换为数字)。问题是当从经典 ASP 调用它时,会引发错误。

如前所述,我也尝试过这样做

SELECT to_number(field1) * 1000

但我仍然得到相同的结果

【问题讨论】:

  • 错误来自 Oracle ODBC driver for Oracle。错误ORA-01722
  • 说这是一个经典的 ASP 错误是无稽之谈,我保证使用任何其他语言的提供程序都会得到相同的结果。
  • 对不起,我不熟悉 ASP(.NET?),但这在 vb.net 中可以重现吗?
  • 这可能是一个过于简单的例子的产物,但你不能在 VBScript 中进行乘以 1000,你已经完成了过滤以确保你的结果总是数字的?

标签: oracle plsql asp-classic


【解决方案1】:

发生这种情况是因为 Oracle 尝试将 field1 隐式转换为整数,但由于该列中包含其他非数字值而失败。

@jason-quinonesanswerCan I pass a number for varchar2 in Oracle?

【讨论】:

  • 不,事实并非如此。它是数值,当我从 toad 调用它时,oracle 可以转换它。我只在从经典 asp 调用时出现错误,直接从 toad 调用工作正常
  • @BeRightBack 该值可能是“数字”VARCHAR2 值隐式转换为数字) 但表列的其余部分是数字吗?尝试进行这样的隐式转换是在自找麻烦,无论它是否在 TOAD 中有效。
  • 您可能会发现 TOAD is handling the implicit casting 适合您,但 Oracle ODBC 提供程序不是。
  • 是的,该字段中的所有值都是数字。是的,知道这不是最好的方法,但这是我唯一的方法:) 是的,我知道蟾蜍正在做隐式转换,我想问的是有没有办法让 ODCB 做到这一点?并感谢您的回答在您说之前,无法更改视图甚至创建新的以使该字段编号代替 varchar
  • NLS 变量是我检查的第一件事,当从 ASP 中选择并显示在屏幕上时,它们看起来是正确的 NLS_NUMERIC_CHARACTERS - ., 但现在实际上尝试替换 (field1, ',','.') * 1000 并且错误消失了。谢谢,不知道为什么我在检查 nls 变量时会得到错误的值,但这似乎是个问题。
猜你喜欢
  • 1970-01-01
  • 2011-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多