首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有办法使用Excel获取Oracle错误的行号?

有没有办法使用Excel获取Oracle错误的行号?
EN

Stack Overflow用户
提问于 2020-03-24 23:06:33
回答 1查看 73关注 0票数 1

我使用Microsoft Excel执行许多Oracle SQL查询。与Oracle的连接是通过VBA使用一个ADODB.Connection对象和一个带有Provider=OraOLEDB.Oracle的连接字符串建立的。它工作得很好。但是,有时在构造新查询时,我会出错。我想知道是否有一种方法可以从传递给VBA的Oracle错误消息中提取更多信息(比如行号)。

例如,这是一个有效的查询,它给出了有效的结果:

代码语言:javascript
运行
复制
SELECT owner, table_name, column_name 
FROM all_tab_columns 
WHERE upper(column_name) LIKE  '%FRAME%'

现在,让我们通过忘记第3行上()函数的闭括号来引入一个错误:

代码语言:javascript
运行
复制
SELECT owner, table_name, column_name 
FROM all_tab_columns 
WHERE upper(column_name LIKE  '%FRAME%'

如果我在Oracle SQL Developer中运行此查询,则会收到以下错误消息:

代码语言:javascript
运行
复制
ORA-00907: missing right parenthesis
00907. 00000 -  "missing right parenthesis"
*Cause:    
*Action:
Error at Line: 3 Column: 25

如果我在更基本的Oracle SQL*Plus终端中运行相同的查询,我还会得到行号和错误发生位置的可视指示器:

代码语言:javascript
运行
复制
WHERE upper(column_name LIKE  '%FRAME%'
                        *
ERROR at line 3:
ORA-00907: missing right parenthesis

然而,在Excel中,我得到的只是基本的Oracle错误语句(ORA-00907:缺少右括号),而没有任何关于错误在查询中的位置的指示。(Excel VBA Run-time Error)

对于本例,查找很容易,但是对于一些复杂的查询,查找错误的位置可能比较棘手。

有没有办法从ADODB Open方法或OraOLEDB.Oracle提供程序抛出的错误消息中获得其他信息,比如行号?

示例VBA代码:

代码语言:javascript
运行
复制
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim cnStr As String
Dim qry As String

Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
cnStr = "Provider=OraOLEDB.Oracle;" _
      & "Data Source=(DESCRIPTION=(CID=GTU_APP)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=redacted)(PORT=1234)))(CONNECT_DATA=(SID=redacted)(SERVER=DEDICATED)));" _
      & "User Id=redacted;" _
      & "Password=redacted;"
qry = "SELECT owner, table_name, column_name " _
    & "FROM all_tab_columns " _
    & "WHERE upper(column_name LIKE '%FRAME%'"
cn.Open cnStr
rs.Open qry, cn

( qry语句实际上并不是用VBA硬编码的;我是从一个工作表中读取它的,但这会产生相同的结果。)

如果SQL query语句中存在错误,则在尝试打开RecordSet时,运行时错误将出现在最后一行。

EN

回答 1

Stack Overflow用户

发布于 2020-04-09 16:12:59

Te上部函数需要右括号。所以..。

代码语言:javascript
运行
复制
WHERE upper(column_name) LIKE '%FRAME%'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60833728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档