shell脚本需要读取批处理行(可以说前150行)。然后将该值存储在变量中。 SQL执行完毕后,现在应该从151读到300.这样,它将读取批量为150的行并将其存储在一个变量中,直到读取32000行。如何读取文件中的行,存储文件并再次从UNIX中的最后存储行开始
脚本如下所示
#!/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列的价值,请告知。或者按我想的方式帮助我(在SQL中执行150个条目的批处理)。
精确副本[这个问题] (http://stackoverflow.com/questions/3994189/to-read-from-file-and-putting-values-in-where-clause-via-shell-script/3994334#3994334);你不喜欢我的sqlldr答案吗? – Benoit 2010-10-22 08:34:36
@Benoit我喜欢你的sqlloader答案:-)唯一的问题是,我只在数据库上的用户级别工作。我没有管理员权限:-(所以,我在我的家庭驱动器上使用这些脚本,使用用户名和密码登录并运行它们。那么,你觉得我可以使用SQL加载器吗? – ErAB 2010-10-22 08:52:17
Ashish,你有权利创建临时表?如果是这样,您仍然可以在该表中插入“插入”... – Benoit 2010-10-22 09:00:36