我收到此错误' ORA-01704:字符串字面太长'而我正在尝试从Oracle表中的SQL表中插入数据。在我的Oracle表中,我有一个XMLTYPE列类型的列。当我创建表时,我指定了这样的XML列:
ExecutorService threadExecutor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
for(int i = 0; i < size; i++) {
if(expr != null) {
threadExecutor.execute(new Runnable() {
@Override
public void run() {
doSmth();
}
});
}
}
threadExecutor.shutdown();
try {
threadExecutor.awaitTermination(10, TimeUnit.MINUTES);
} catch (InterruptedException ex) {
// handle timeout
}
除了这一列之外,在它之前我有其他23列,当我从insert语句XML列中排除时,insert正在传递。 XML列包含表格中所有其他23列的XML格式的数据。我是否应该在XML列中添加一些额外的规范以获取长度或其他内容?
答案 0 :(得分:4)
我的猜测是你将XML作为文字传递给insert语句。 Oracle的SQL在文字中最多只能处理4000个字符。否则,您需要使用绑定变量并以块的形式传递它。或者你可以使用PL / SQL。
例如,这应该没有问题,因为文字
CREATE TABLE TEST_REPORTS
(
ID NUMBER,
DESCRIPTION VARCHAR2 (50),
XML XMLTYPE NULL
);
INSERT INTO TEST_REPORTS (ID, DESCRIPTION, XML)
VALUES (1, 'BLAH BLAH', XMLTYPE.CREATEXML ('<MyMessage>Meeesaaagee</MyMessage>'));
COMMIT;
只有34个字符:
DECLARE
in_xml_value varchar2(32767);
BEGIN
in_xml_value := '<MyMessage>MeeesaaageeBLAHBLAHBLAH<--repeat--></MyMessage>';
INSERT INTO TEST_REPORTS (ID, DESCRIPTION, XML)
VALUES (1, 'BLAH BLAH', XMLTYPE.CREATEXML (in_xml_value);
commit;
END;
/
但如果你有: Meeesaaagee(+ 3976个额外字符)
你会得到ORA-01704:字符串文字错误。
你可以尝试:
import UIKit
@IBDesignable
class RoundButton: UIButton {
override func awakeFromNib() {
setupView()
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
setupView()
}
func setupView() {
let radius = self.frame.size.height / 2
layer.cornerRadius = radius
}
}
没有PL / SQL代码并使用绑定变量,你必须与应用程序开发人员交谈。它不在Oracle之外(据我所知)。
答案 1 :(得分:0)
错误在哪里?显示insert语句。我在这里看不到任何问题:
CREATE TABLE TEST_REPORTS
(
ID NUMBER,
DESCRIPTION VARCHAR2 (50),
XML XMLTYPE NULL
);
INSERT INTO TEST_REPORTS (ID, DESCRIPTION, XML)
VALUES (1, 'BLAH BLAH', XMLTYPE.CREATEXML ('<MyMessage>Meeesaaagee</MyMessage>'));