【发布时间】:2012-01-13 08:51:15
【问题描述】:
我正在尝试创建一个字符串,用于在 execute_immediate 语句中插入表。使用的列之一是 BLOB 类型。我正在使用“||”运算符来追加列并构建 sql。 BLOB 类型似乎不适用于“||”。查看示例代码(非原创)和错误
声明
FIRST_NAME varchar2(10);
图片斑点; -- 斑点类型
TEMP_STR varchar2(2000);
开始
FIRST_NAME := '阿伦';
-- 创建一个 blob
DBMS_LOB.CREATETEMPORARY(图片,真);
-- next line works
insert into BLOB_TEST (PERSON_NAME,PHOTO) values (FIRST_NAME,PICTURE);
-- creating the string
TEMP_STR := 'insert into BLOB_TEST values (''' || first_name||''''||','||PICTURE||')';
-- just to view the string
DBMS_OUTPUT.PUT_LINE(TEMP_STR);
/* code to be done */
-- execute immediate(temp_str);
end;
错误
错误报告:
ORA-06550:第 9 行,第 17 列:
PLS-00306:调用“||”时参数的数量或类型错误
ORA-06550:第 9 行,第 5 列:
PL/SQL:语句被忽略
06550. 00000 - “第 %s 行,第 %s 列:\n%s”
*原因:通常是 PL/SQL 编译错误。
*行动:
My table BLOB_TEST is
create table BLOB_TEST
(
PERSON_NAME varchar2(20),
PHOTO blob
);
请帮忙。我想要的是动态执行插入语句以将 BLOB 值插入表的选项。
【问题讨论】:
-
你的问题来了,因为你试图连接一个字符串和一个 blob。您可以使用
dmbs_lob.substr对图片进行细分,但这不是一个可行的解决方案。使用@vincent 的代码,这样更安全,不会破坏你的图片。
标签: oracle dynamic blob execute-immediate