用于查找文件名的shell脚本&;每个文件的行数,现在将此记录插入Oracle表

用于查找文件名的shell脚本&;每个文件的行数,现在将此记录插入Oracle表,oracle,bash,Oracle,Bash,我必须在每个文件行计数的文件夹中找到可用的文件名。然后,我将有两列数据 现在我必须将该记录插入到一个有两列(col1,col2)的oracle表中 我可以写一个shell脚本来完成这两个任务吗 我在这里找到了写第一部分的方法。 i、 e 现在,如何将output.txt的数据插入oracle表。您可以使用其命令行工具SQLLoader将文本数据加载到oracle中。关于如何使用SQLLoader,这里有太多要描述的内容,请阅读以下网页: 您可以使用Oracle的命令行工具SQLLoader将文本

我必须在每个文件行计数的文件夹中找到可用的文件名。然后,我将有两列数据

现在我必须将该记录插入到一个有两列(col1,col2)的oracle表中

我可以写一个shell脚本来完成这两个任务吗

我在这里找到了写第一部分的方法。 i、 e


现在,如何将output.txt的数据插入oracle表。

您可以使用其命令行工具SQLLoader将文本数据加载到oracle中。关于如何使用SQLLoader,这里有太多要描述的内容,请阅读以下网页:


您可以使用Oracle的命令行工具SQLLoader将文本数据加载到Oracle中。关于如何使用SQLLoader,这里有太多要描述的内容,请阅读以下网页:


我不知道Oracle,但SQL语法似乎与MySQL非常相似

本质上,你会做你在这里所做的一个小小的改变

wc -l *| egrep -v " total$" | awk '{print $2 "|" $1}' > output.txt
您将编写一个名为
thesql.SQL
的SQL脚本,该脚本如下所示:

LOAD DATA
INFILE output.txt
INTO TABLE yourtable
FIELDS TERMINATED BY '|'
(col1, col2)
然后,在你的剧本中(这就是我的模糊之处),有这样一句话:

sqlplus <user>/<pw>@<db> @thesql.sql
SQL> select * from tbl_files;

FILENAME              LINECOUNT
-------------------- ----------
File1.txt                    10
File2.txt                    20
File3.txt                    30
"File1.txt",10
"File2.txt",20
"File3.txt",30
sqlplus/@@thesql.sql
我从几个不同的渠道找到了一些帮助——而且


希望这有帮助

我不知道Oracle,但SQL语法似乎与MySQL非常相似

本质上,你会做你在这里所做的一个小小的改变

wc -l *| egrep -v " total$" | awk '{print $2 "|" $1}' > output.txt
您将编写一个名为
thesql.SQL
的SQL脚本,该脚本如下所示:

LOAD DATA
INFILE output.txt
INTO TABLE yourtable
FIELDS TERMINATED BY '|'
(col1, col2)
然后,在你的剧本中(这就是我的模糊之处),有这样一句话:

sqlplus <user>/<pw>@<db> @thesql.sql
SQL> select * from tbl_files;

FILENAME              LINECOUNT
-------------------- ----------
File1.txt                    10
File2.txt                    20
File3.txt                    30
"File1.txt",10
"File2.txt",20
"File3.txt",30
sqlplus/@@thesql.sql
我从几个不同的渠道找到了一些帮助——而且


希望这有帮助

在Oracle提供给我们的9i版中。这些对象允许我们通过SELECT语句查询操作系统文件中的数据。这很酷。更酷的是,在11.0.1.7中,我们可以将shell脚本与外部表关联以生成其OS文件。看看阿德里安·比林顿的文章。shell脚本是预处理器功能的理想候选


如果您现在出于任何目的需要了解目录的内容,只需从外部表中选择即可。如果你想保留文件名的永久记录,你可以在。。。从外部_表中选择*。此语句可以使用数据库作业自动运行。

在Oracle提供的9i版中。这些对象允许我们通过SELECT语句查询操作系统文件中的数据。这很酷。更酷的是,在11.0.1.7中,我们可以将shell脚本与外部表关联以生成其OS文件。看看阿德里安·比林顿的文章。shell脚本是预处理器功能的理想候选

如果您现在出于任何目的需要了解目录的内容,只需从外部表中选择即可。如果你想保留文件名的永久记录,你可以在。。。从外部_表中选择*。此语句可以使用数据库作业自动运行。

您有两个选择。 我用这个表结构测试了这两个问题:

SQL> create table tbl_files(fileName varchar(20), lineCount number);
第一个选择是使用generate insert sql命令生成sql脚本,并运行sqlplus命令行实用程序。我稍微修改了您的shell脚本:

wc -l *| egrep -v " total$" | awk '{q=sprintf("%c", 39); print "INSERT INTO TBL_FILES(fileName, lineCount) VALUES (" q$2q ", " $1 ");";}' > sqlplusfile.sql
运行此脚本文件“sqlplusfile.sql”后,将包含以下内容:

INSERT INTO TBL_FILES(fileName, lineCount) VALUES ('File1.txt', 10);
INSERT INTO TBL_FILES(fileName, lineCount) VALUES ('File2.txt', 20);
INSERT INTO TBL_FILES(fileName, lineCount) VALUES ('File3.txt', 30); 
LOAD DATA
INFILE data.txt
INSERT
INTO TABLE TBL_FILES
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
(fileName, lineCount)
现在,您可以在parametr中使用此文件直接运行sqlplus命令:

sqlplus username/password@oracle_database @sqlplusfile.sql
运行此脚本后,表如下所示:

sqlplus <user>/<pw>@<db> @thesql.sql
SQL> select * from tbl_files;

FILENAME              LINECOUNT
-------------------- ----------
File1.txt                    10
File2.txt                    20
File3.txt                    30
"File1.txt",10
"File2.txt",20
"File3.txt",30
注意:文件“sqlplusfile.sql”的末尾必须显示为“commit”;否则,您将无法在表中看到数据

第二个选择是使用sqlldr命令行工具(该工具是Oracle客户端安装的一部分)

再一次,稍微修改一下您的脚本:

wc -l *| egrep -v " total$" | awk '{print "\""$2"\"" "," $1}' > data.txt
文件“data.txt”的内容如下所示:

sqlplus <user>/<pw>@<db> @thesql.sql
SQL> select * from tbl_files;

FILENAME              LINECOUNT
-------------------- ----------
File1.txt                    10
File2.txt                    20
File3.txt                    30
"File1.txt",10
"File2.txt",20
"File3.txt",30
在同一目录中,我创建了包含以下内容的文件“settings.ctl”:

INSERT INTO TBL_FILES(fileName, lineCount) VALUES ('File1.txt', 10);
INSERT INTO TBL_FILES(fileName, lineCount) VALUES ('File2.txt', 20);
INSERT INTO TBL_FILES(fileName, lineCount) VALUES ('File3.txt', 30); 
LOAD DATA
INFILE data.txt
INSERT
INTO TABLE TBL_FILES
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
(fileName, lineCount)
现在可以运行此命令,将数据加载到数据库中:

sqlldr userid=user/passwd@oracle_database control=settings.ctl
sqlldr实用程序是更好的选择,但在某些Oracle客户端安装不存在。

您有两种选择。 我用这个表结构测试了这两个问题:

SQL> create table tbl_files(fileName varchar(20), lineCount number);
第一个选择是使用generate insert sql命令生成sql脚本,并运行sqlplus命令行实用程序。我稍微修改了您的shell脚本:

wc -l *| egrep -v " total$" | awk '{q=sprintf("%c", 39); print "INSERT INTO TBL_FILES(fileName, lineCount) VALUES (" q$2q ", " $1 ");";}' > sqlplusfile.sql
运行此脚本文件“sqlplusfile.sql”后,将包含以下内容:

INSERT INTO TBL_FILES(fileName, lineCount) VALUES ('File1.txt', 10);
INSERT INTO TBL_FILES(fileName, lineCount) VALUES ('File2.txt', 20);
INSERT INTO TBL_FILES(fileName, lineCount) VALUES ('File3.txt', 30); 
LOAD DATA
INFILE data.txt
INSERT
INTO TABLE TBL_FILES
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
(fileName, lineCount)
现在,您可以在parametr中使用此文件直接运行sqlplus命令:

sqlplus username/password@oracle_database @sqlplusfile.sql
运行此脚本后,表如下所示:

sqlplus <user>/<pw>@<db> @thesql.sql
SQL> select * from tbl_files;

FILENAME              LINECOUNT
-------------------- ----------
File1.txt                    10
File2.txt                    20
File3.txt                    30
"File1.txt",10
"File2.txt",20
"File3.txt",30
注意:文件“sqlplusfile.sql”的末尾必须显示为“commit”;否则,您将无法在表中看到数据

第二个选择是使用sqlldr命令行工具(该工具是Oracle客户端安装的一部分)

再一次,稍微修改一下您的脚本:

wc -l *| egrep -v " total$" | awk '{print "\""$2"\"" "," $1}' > data.txt
文件“data.txt”的内容如下所示:

sqlplus <user>/<pw>@<db> @thesql.sql
SQL> select * from tbl_files;

FILENAME              LINECOUNT
-------------------- ----------
File1.txt                    10
File2.txt                    20
File3.txt                    30
"File1.txt",10
"File2.txt",20
"File3.txt",30
在同一目录中,我创建了包含以下内容的文件“settings.ctl”:

INSERT INTO TBL_FILES(fileName, lineCount) VALUES ('File1.txt', 10);
INSERT INTO TBL_FILES(fileName, lineCount) VALUES ('File2.txt', 20);
INSERT INTO TBL_FILES(fileName, lineCount) VALUES ('File3.txt', 30); 
LOAD DATA
INFILE data.txt
INSERT
INTO TABLE TBL_FILES
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
(fileName, lineCount)
现在可以运行此命令,将数据加载到数据库中:

sqlldr userid=user/passwd@oracle_database control=settings.ctl

sqlldr实用程序是更好的选择,但在某些Oracle客户端安装中不存在。

您描述的是SQL*加载器的输入文件(请参见@Bill Karwin的答案),而不是sqlplus。您描述的是SQL*加载器的输入文件(请参见@Bill Karwin的答案),而不是sqlplus。