gpt4 book ai didi

bash - 通过 shell 脚本读取文件并将值放入 WHERE 子句

转载 作者:行者123 更新时间:2023-11-29 09:32:21 26 4
gpt4 key购买 nike

shell 脚本

#! /bin/bash
sqlplus -s <username>/<passwd>@dbname << EOF
set echo on
set pagesize 0
set verify off
set lines 32000
set trimspool on
set feedback off
SELECT *
FROM <dbname>.<tablename1> tr
LEFT JOIN <tablename2> t2 ON t2.id2 = tr.id1
LEFT JOIN <tablename3> t3 ON t3.id2 = tr.id1
LEFT JOIN <tablename4> t4 ON t4.id2 = tr.id1
WHERE tr.TIMESTAMP > SYSDATE - 75 / 1440
AND tr.TIMESTAMP <= SYSDATE - 15 / 1440
AND t2.value in ( value1, value2, etc...)
ORDER BY timestamp;

exit;
EOF

现在,目的是读取 t2.value 列中的 32000 个值。这些值只是数字,如 1234、4567、1236 等。我想我应该将这些数字放在一个单独的文件中,然后在 t2.value 中读取该文件。但我希望 SQL 只执行一次而不是 32000 次。你能告诉我这怎么可能吗?我如何获取 t2.value 中的值(以逗号分隔)(通过一些循环,可能是读取行)?

最佳答案

您可以使用 SQL*Loader 将这些值加载到您第一次创建的临时表中,该表的唯一列上有索引。

sqlldr user/password%@sid control=ctl_file

ctl_file 的内容:

load data
infile *
append
into table MY_TEMP_TABLE
fields terminated by ";" optionally enclosed by '"'
(
column1
)
begindata
"value1"
"value2"
[...]

(双引号是可选的,数字不需要。

然后修改您的查询:

AND t2 in (SELECT column1 FROM my_temp_table)

然后 DROP my_temp_table

关于bash - 通过 shell 脚本读取文件并将值放入 WHERE 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3994189/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com