Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我有一个800K封电子邮件的列表,我想从我拥有只读访问权限的数据库中检索-我该怎么做?_Sql_Oracle - Fatal编程技术网

Sql 我有一个800K封电子邮件的列表,我想从我拥有只读访问权限的数据库中检索-我该怎么做?

Sql 我有一个800K封电子邮件的列表,我想从我拥有只读访问权限的数据库中检索-我该怎么做?,sql,oracle,Sql,Oracle,所以我有一个数据库,里面有一堆成员信息(700万条记录),我可以从中提取信息。然后在一个单独的系统中,我有一个800K EMIAL的列表。我想做的是将db中的所有成员与800K封电子邮件列表进行匹配。我没有能力用这些电子邮件在数据库中创建一个表-我只能从数据库中读取 所以我的问题是,最好的方法是什么?我是否可以编写一个sql语句,将这些800k从csv文件读入内存,然后对照此列表进行查找?方法是什么?我只想为那些信息在外部列表中的成员提取所有emmebr信息 谢谢如果您有一个单独的Oracle数

所以我有一个数据库,里面有一堆成员信息(700万条记录),我可以从中提取信息。然后在一个单独的系统中,我有一个800K EMIAL的列表。我想做的是将db中的所有成员与800K封电子邮件列表进行匹配。我没有能力用这些电子邮件在数据库中创建一个表-我只能从数据库中读取

所以我的问题是,最好的方法是什么?我是否可以编写一个sql语句,将这些800k从csv文件读入内存,然后对照此列表进行查找?方法是什么?我只想为那些信息在外部列表中的成员提取所有emmebr信息


谢谢

如果您有一个单独的Oracle数据库,并且您有DDL访问权限,那么您可以尝试使用您的只读帐户在两个数据库之间创建一个连接

CREATE DATABASE LINK <DB Link Name>
CONNECT TO <Your read-only account>
IDENTIFIED by <password>
USING <ServiceName or TNS Entry of remote database>;
根据文档,此设置的先决条件是:

先决条件

要创建专用数据库链接,必须具有“创建数据库”命令 链接系统权限。要创建公共数据库链接,必须具有 创建公共数据库链接系统权限。还有,你一定有 远程Oracle数据库上的创建会话系统权限

必须在本地和远程Oracle上安装Oracle Net 数据库


还要注意的是,dblink访问只与用于连接的帐户一样好。因此,如果您的帐户是只读的,那么您的dblink将保留相同的限制。

构建一个巨大的SQL语句,如下所示:

select *
from member_data
join
(
    --Add all the text information here.
    --
    --Up to 32767 values can be stored in this collection.
    select column_value email_address from table(sys.odcivarchar2list(
        'asdf1@asdf.com',
        'qwer1@qwer.com'
        --...
    ))
    --Another 32767 values
    union all
    select * from table(sys.odcivarchar2list(
        'asdf2@asdf.com',
        'qwer2@qwer.com'
        --...
    ))
    --...
) other_system
    on member_data.email = other_system.email_address;

它很难看,但构建起来并不难,也不需要任何额外的特权。通过一些文本处理技巧,可能是文本编辑器中的正则表达式,或者使用Excel添加单引号和逗号,该语句可能可以在几分钟内生成。这么大的SQL语句通常不是个好主意,但对于一次性流程来说也没问题。

我建议将您的问题提交给控制您访问数据库的人。是的,我们将研究更好的长期解决方案(实际上目前正在进行)。但我想看看是否有办法在这段时间内做到这一点。我是SQL新手,所以我想知道是否有一种方法可以从csv读取电子邮件,然后查询这些电子邮件?是否有任何方法可以在不修改数据库的情况下检索此信息?是否可以让dba创建一个外部表来引用SQL中的csv?否,但如果可能,可以编写PL/SQL脚本。您还可以创建PL/SQL表函数,稍后可以将其用作
FROM
子句中的数据源。当然,我想它会工作得很慢。
select *
from member_data
join
(
    --Add all the text information here.
    --
    --Up to 32767 values can be stored in this collection.
    select column_value email_address from table(sys.odcivarchar2list(
        'asdf1@asdf.com',
        'qwer1@qwer.com'
        --...
    ))
    --Another 32767 values
    union all
    select * from table(sys.odcivarchar2list(
        'asdf2@asdf.com',
        'qwer2@qwer.com'
        --...
    ))
    --...
) other_system
    on member_data.email = other_system.email_address;