如何使用pl / sql读取文本文件并对每行进行字符串搜索

时间:2017-03-24 10:22:52

标签: sql string oracle file plsql

我想读取文本文件并在表中存储(使用clob数据类型)其数据。我想对加载的数据进行字符串比较。

加载的文本文件包含DDL脚本,我想要分离新的/修改的表,新的/修改的索引和约束。

这可以像汤姆建议Ask tom article

那样完成

我面临的挑战是,我必须在运行这些脚本之前获得上述细节,否则我会使用一些DDL触发器来审核架构更改。

我的问题是,在大文本上进行字符串比较是否可行?还是有更好的选择。请分享您对此的看法/想法。

示例文件

Create table table_one

Alter table table_two

create index index_table_one_idx table_one (column_one)

etc etc... 100s of statements

从上面的代码我希望 table_one,table_two 作为修改后的表, index_table_one_idx 作为新创建的索引。

我希望通过寻找'创建表格,' alter table'来实现这一目标。大文本文件中的字符串,并使用子字符串获取表名。

1 个答案:

答案 0 :(得分:0)

在大文本上进行字符串比较是完全可行的。

有几种不同的方法。一种是使用UTL_FILE逐行读取文件。换句话说是将其加载到临时CLOB中并以块的形式处理它。可能第二种方式是更好的选择。确保使用DBMS_LOB函数进行字符串操作,因为它们的性能会更好。 Find out more

您的主要问题是规范问题。您需要隔离SQL语句的所有不同起点。如果您的脚本就像CREATE,ALTER和DROP那么它并不太难,取决于您需要多少后续细节(提取对象类型?提取对象名称等等)以及您需要执行的其他处理。

如果您的脚本包含DML语句,则任务变得更难。如果DDL包含程序对象(TYPE,PACKAGE等),那么它会更难一个数量级。