尝试将文本文件的内容插入Oracle表

时间:2014-11-11 22:40:16

标签: sql database oracle plsql

我有大约500个Linux脚本。我试图将每个脚本的源代码插入到Oracle表中:

CREATE TABLE "SCRIPT_CODE" (
    "SCRIPT_NAME" VARCHAR2(200 BYTE), 
    "CODE_LINE" NUMBER(*,0), 
    "CODE_TEXT" VARCHAR2(2000 BYTE)
)

我正在使用(痛苦的)手动Excel解决方案。打开每个脚本并将代码粘贴到列中。我遇到了困难并换了档。

我决定更改表并将每个脚本的完整源代码放入CLOB字段......

CREATE TABLE "SCRIPT_CODE_CLOB" (
    "SCRIPT_NAME" VARCHAR2(200 BYTE), 
    "CODE_TEXT" CLOB
)

这是我写的插入代码:

set define off;
Declare Code Clob;
Script Varchar2(100);
sql_exec varchar2(1000);
Begin
Script := 'Some Script Name'
;
Code := '
[pasted code here]
'
;

sql_exec := 'INSERT INTO SCRIPT_CODE_CLOB VALUES (:1, :2)';
EXECUTE IMMEDIATE(sql_exec) USING Script, Code;
COMMIT;
End;

在我遇到拥有1,700行代码的脚本之前,情况一直很好。当我粘贴所有代码并运行脚本时,它给了我:

ORA-01704: string literal too long

我正在寻找一种更好的方法。是否有可能以某种方式导入文件并自动化该过程?

Oracle数据库中有一些外部表,我可以到达他们指向的文件夹位置。

非常感谢您的帮助。 - 史蒂夫

环境: Oracle Database 11g企业版11.2.0.3.0版 - 64位生产 Oracle SQL Developer版本4.0.2.15,Build 15.21

1 个答案:

答案 0 :(得分:1)

为了插入clob,您需要使用DBMS_LOB函数(特别是DBMS_LOB.WRITE),而不是将其读入变量并将其直接传递到insert语句中。查看包的documentation。您需要将数据读入缓冲区或临时lob,然后在插入中使用它。