我有大约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
答案 0 :(得分:1)
为了插入clob,您需要使用DBMS_LOB函数(特别是DBMS_LOB.WRITE),而不是将其读入变量并将其直接传递到insert语句中。查看包的documentation。您需要将数据读入缓冲区或临时lob,然后在插入中使用它。