我的文件中有员工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。
答案 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
);