如何在unix中将参数从文件传递到sqlplus

时间:2014-11-03 23:50:36

标签: sqlplus

我的文件中有员工ID,每个员工ID都不同,这意味着文件中员工ID的计数每次都不同。例如:

343535435
365765767
343534543
343543543

我想将此文件传递给sqlplus。

SQL命令是

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

我从unix通过

调用这个.sql文件
$ sqlplus -s user/password@servername @.sql 

请告诉我们如何将unix中的上述文件名传递给sqlplus。

1 个答案:

答案 0 :(得分: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
  );