sql - 在单元格上执行 Oracle 查询的最佳方式?

标签 sql excel database oracle

我有一个 Excel 电子表格,其中一个单元格包含串联的姓名和姓氏(不要问为什么)。例如,单元格 A2:BLOGGSJOE

在此单元格上,我想运行以下 SQL 并将其输出到单元格 A3、A4 和 A5:

SELECT i.id, i.forename, i.surname FROM individual i  WHERE UPPER(REPLACE('" & A2 & "', ' ', '')) =  UPPER(REPLACE(i.surname|| i.forename, ' ', ''))  AND NVL(i.ind_efface, 'N') = 'N'

知道如何对每个单元格执行 Oracle 查询并返回结果吗?

我已经在 Excel 中启用了 Oracle 数据源连接,只是不确定现在该做什么。

这是一种愚蠢的方法吗,你能推荐一个更好更熟练的方法吗?

我知道我可以只编写一个简单的 Ruby/PHP/Python/任何脚本来遍历 Excel 电子表格(或 .csv 文件)然后执行查询等,但我认为可能有Excel 本身的快捷方式。

最佳答案

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sql As String

Set cn = New ADODB.Connection
cn.ConnectionString = 'Get one from http://www.connectionstrings.com/oracle 
'eg. "Driver={Oracle in OraHome92};Dbq=tns;Uid=uid;Pwd=pwd;"
cn.Open

sql = Your SQL

Set rs = cn.Execute(sql)

for loop or something to paste records

rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing

如果您正确地格式化电子表格,您可以将 rs 分配给一个变体,然后将该变体分配给一个范围,而不是循环遍历它。

编辑

使用当前的 SQL,您需要遍历每个单元格并查询数据库,然后将结果保存到 A3:A5。 编辑 2,类似的东西:

Private Function GetRow(user As String) As Variant
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sql As String
Dim v As Variant

Set cn = New ADODB.Connection
cn.ConnectionString = "Driver={Oracle in OraHome92};Dbq=tns;Uid=uid;Pwd=pwd;"
cn.Open

sql = "SELECT i.id, i.forename, i.surname FROM individual i  WHERE UPPER(REPLACE('" & user & "', ' ', '')) =  UPPER(REPLACE(i.surname|| i.forename, ' ', ''))  AND NVL(i.ind_efface, 'N') = 'N'"

Set rs = cn.Execute(sql)

v = rs.GetRows()
GetRow = v

rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
End Function

Sub a()
Dim user As String
For i = 2 To x
    user = ActiveSheet.Cells(i, 1).Value

    GetRow (user)
    ActiveSheet.Cells(i, 2).Value = GetRow(0)
    ActiveSheet.Cells(i, 3).Value = GetRow(1)
    ActiveSheet.Cells(i, 4).Value = GetRow(2)

Next

End Sub

请注意,我使用了您想要的不同单元格,并且 GetRow 是二维的而不是一维的,但是我很难在无法访问实际电子表格/数据库的情况下编写它

关于sql - 在单元格上执行 Oracle 查询的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2956559/

相关文章:

sql - Oracle 中不区分大小写的搜索

php - 计算 laravel 中查询返回的行数

vba - Excel 中的 VBA 函数可以返回范围吗?

mysql - Rails数据库结构及优化建议

mysql - SQL 分隔大字段以加快查询速度

c++ - 更新 QTreeView 而不更改选择

sql - Hive 左半连接 'NOT EXISTS'

java - 如何从 Java 备份 mysql 数据库?

excel - 用户上传 Excel 工作表 - 文件类型为 application/octet-stream

vba - 从函数返回工作簿对象