2014-11-03 62 views
0

我有一个文件,其中我有员工ID和每个员工ID号都不相同,这意味着文件中员工ID的计数每次都是不同的。示例:如何将参数从文件传递到unix中的sqlplus

343535435 
365765767 
343534543 
343543543 

我想将此文件传递给sqlplus。

的SQL命令是

SELECT * FROM TABLENAME WHERE EMPLYOE_ID IN (ALL RECORDS FROM ABOVE FILE) 

,我通过

$ sqlplus -s user/[email protected] @.sql 

调用从UNIX这个.sql文件,请让我们知道如何可以在UNIX通过上述文件名在sqlplus。

回答

0

你最好的选择是使用SQL * Loader的或外部表加载该文件到工作表,在下面的例子中名为work_table,然后做一个

SELECT * FROM TABLENAME WHERE EMPLYOE_ID IN (select EMPLYOE_ID from work_table); 

或者,如果你不这样做有时间也没有耐心去做,如果你能控制输入文件格式,只需在每个员工ID结尾之后加一个逗号(除了最后一个)(假设你总共少于256个ID),并假设文件在当前目录中被命名为emp_input.txt

SELECT * FROM TABLENAME WHERE EMPLYOE_ID IN (
    @@emp_input.txt 
); 

如果文件与正在运行的脚本位于同一目录中,则emp_input.txt的内容通过@@嵌入;在这种情况下,您可能只需使用一个@字符。

如果不管是谁创建的输入文件并不想省略对文件中的最后一个条目的逗号,那么你可以在查询中包括一个虚假的值将占到后面的逗号:

SELECT * FROM TABLENAME WHERE EMPLYOE_ID IN (
    @@emp_input.txt 
    -999999 
); 
+0

嗨,马克,我没有访问数据库来创建外部表,我们只有读取权限 – 2014-11-04 00:26:02

+0

然后你可以使用上面的例子,如果你有控制输入文件。如果您使用单个“@”字符,则可以使用文件的完整路径: @/home/user/emp_ids.txt – 2014-11-04 01:26:38

+0

嗨,马克,我使用@但它给出错误,缺少表达式,我同时使用@@或@的方式,同样的错误 – 2014-11-04 10:52:25

相关问题