如何通过 SQLPlus 将 SQL 脚本附加到 bash 循环?

How attach the SQL script by SQLPlus to the bash loop?

我想通过 sqlplus[从所有数据(Table_with_DB(它在程序 sqldeveloper 中))中清除 table =44=] 并基于路径中的文件名 (path/to/files) 使用 SQLPlus 完成 table (Table_with_DB)路径中的文件名。

我创建了 2 个单独的 SQL 文件 (clear.sql ; register.sql)

和 1 与 bash (bashloop.sh)

clear.sql

BEGIN 
 package.clear('Table_with_DB'); 
END;

register.sql

BEGIN 
 package.register('folderName' , '&1);
END;

bashloop.sh

for i in path/to/files;
 do
  sqlplus -s userid/password@ @clear.sql
  sqlplus -s userid/password@ @register.sql
 done

我希望查询清楚 Table_with_DB 并将文件名从 path/to/files 转移到 Table_with_DB 使用 SQLPlus

但实际上它不起作用:(

如果我明白你想做什么,那么在你的 bashloop.sh 中你想用 $i[= 替换 db_name 14=] - 或者 ${i} 如果你有带空格的文件名。

循环中的 sqlplus 示例。

#!/bin/bash

username=system
password=passwordsystem
tns_alias=esmd


for i in /opt/oracle/example1/test*/file*.txt;
 do
$ORACLE_HOME/bin/sqlplus   $username/$password@$tns_alias <<EOF
SET SERVEROUTPUT ON SIZE 2000
    BEGIN
      dbms_output.put_line('$i');
    END;
/
EOF

done;

示例输出

Connected to:
Oracle Database 11g Release 11.2.0.3.0 - 64bit Production

SQL> SQL>   2    3    4  /opt/oracle/example1/test2/file2.txt

PL/SQL procedure successfully completed.

SQL> Disconnected from Oracle Database 11g Release 11.2.0.3.0 - 64bit Production

SQL*Plus: Release 11.2.0.3.0 Production on Tue Oct 22 13:59:24 2019

Copyright (c) 1982, 2011, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Release 11.2.0.3.0 - 64bit Production

SQL> SQL>   2    3    4  /opt/oracle/example1/test3/file3.txt

PL/SQL procedure successfully completed.

SQL> Disconnected from Oracle Database 11g Release 11.2.0.3.0 - 64bit Production

SQL*Plus: Release 11.2.0.3.0 Production on Tue Oct 22 13:59:24 2019

Copyright (c) 1982, 2011, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Release 11.2.0.3.0 - 64bit Production

SQL> SQL>   2    3    4  /opt/oracle/example1/test4/file4.txt

PL/SQL procedure successfully completed.

SQL> Disconnected from Oracle Database 11g Release 11.2.0.3.0 - 64bit Production
oracle@esmd:~/example1>