我想读取文本文件并在表中存储(使用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'来实现这一目标。大文本文件中的字符串,并使用子字符串获取表名。
答案 0 :(得分:0)
在大文本上进行字符串比较是完全可行的。
有几种不同的方法。一种是使用UTL_FILE逐行读取文件。换句话说是将其加载到临时CLOB中并以块的形式处理它。可能第二种方式是更好的选择。确保使用DBMS_LOB函数进行字符串操作,因为它们的性能会更好。 Find out more
您的主要问题是规范问题。您需要隔离SQL语句的所有不同起点。如果您的脚本就像CREATE,ALTER和DROP那么它并不太难,取决于您需要多少后续细节(提取对象类型?提取对象名称等等)以及您需要执行的其他处理。
如果您的脚本包含DML语句,则任务变得更难。如果DDL包含程序对象(TYPE,PACKAGE等),那么它会更难一个数量级。