【发布时间】:2010-10-22 08:21:11
【问题描述】:
shell 脚本需要读取一批行(比如说前 150 行)。然后将该值存储在变量中。 SQL执行后,现在应该从151读取到300行。这样,它将读取150行,并将其存储在一个变量中,直到读取到32000行。
脚本看起来像
#!/bin/bash
t2val=$(cat /home/trnid | tr '\n' ',' | sed 's/,$//')
sqlplus -s <username>/<passwd>@dbname > /home/file << 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 ( "t2val")
order by timestamp;
exit;
EOF
trnid 有 32000 行,每行包含 11 位数字。这里变量 t2val 有 32000 个值,用逗号分隔。但是脚本运行的价值不大。因此,我需要将其划分为少于 2499 个字符,因此要从 trnid 文件中获取大约 150 个条目。我想分批选择 150 个,然后将其放入 t2val 列(以逗号分隔),直到我到达第 32000 行。我认为以这种方式,如果您有更明确的想法来获取 t2val
【问题讨论】:
-
与this question 完全相同;你不喜欢我的 sqlldr 答案吗?
-
@Benoit 我喜欢你的 sqlloader 答案 :-) 唯一的问题是我只在数据库上作为用户级别工作。我没有管理员权限:-(所以,我在我的家庭驱动器上制作这些脚本,使用我的登录名和密码并运行它们。所以,你觉得我可以使用 SQL 加载器吗?
-
Ashish,你有权创建临时表吗?如果是这样,您仍然可以将“插入”打印到该表中......