求助:plsql如何将一条sql语句的执行结果生成Object selection的文件(后缀是.

2024-11-28 16:43:56
推荐回答(2个)
回答1:

更换导出方式为,Tools=>Export Tables=>PL/SQL Developer(不使用SQL Inserts是因为该选项导出数据量小没问题,但数据量大时效率非常低,尤其是在B库上导入时,耗时更久,而且容易卡死)。结果发现在编译过程中也报错了“stream read error”,查找原因发现是因为导出的部分表中有大字段(CLOB或BLOB),而PL/SQL Developer并不支持大字段数据类型。所以,必须先把含有大字段的表找出来,可使用系统表ALL_TAB_COLUMNS,SQL如下:
SELECT DISTINCT t.TABLE_NAME
FROM SYS.ALL_TAB_COLUMNS t
WHERE t.TABLE_NAME NOT LIKE 'BIN%'
AND t.OWNER = ‘USER_NAME’
AND t.DATA_TYPE IN ('CLOB', 'BLOB')
ORDER BY t.TABLE_NAME;
注意,USER_NAME是导出用户的用户名,需要更改。
若需要导出的表较少,有大字段的表也不多,则可以手工按shift配合ctrl来选择要导出的不带大字段的表。若要导出的表多,且有大字段的表也多,用手工选择表的方式就比较麻烦了,可以使用PL/SQL自带的Object Selection功能。
1)使用SQL语句拼出Load Object Selection所需文件内容,SQL如下:
SELECT DISTINCT ('TABLE "' || t.OWNER || '"."' || t.TABLE_NAME || '"')
FROM SYS.ALL_TAB_COLUMNS t
WHERE t.TABLE_NAME NOT LIKE 'BIN%'
AND t.OWNER = 'USER_NAME'
AND t.DATA_TYPE NOT IN ('CLOB', 'BLOB');

注意,USER_NAME是导出用户的用户名,需要更改。
2)编辑osf文件,在Tools=>Export Tables=>PL/SQL Developer的选择框里随便选择一个表,右键=>Save Object Selection,选择文件存放位置,然后生成文件。
使用文本编辑工具(如UltraEdit)打开osf文件,将上面SQL语句的结果粘贴进文件,然后保存。osf文件内容样式如下:
PL/SQL Developer Object Selection File
1
TABLE "SCOTT"."EMP"
TABLE "SCOTT"."DEPT"
3)在选择框里,右键=>Load Object Selection,然后选择上面做成的osf文件,然后就会发现,想要导出的且不包含大字段的表已经被选中了,然后在右下Export前选择导出文件的位置及命名文件,然后点Export就可以等待文件导出了。若导出的表较多,该步可能耗时较长。

回答2:

.osf文件是什么文件?如果只是平面文件的话可以用spool生成