当前位置: 首页 > 面试题库 >

Oracle Sql Developer“字面量太长”错误

陈宜修
2023-03-14
问题内容

我要在Oracle SQL Developer中针对Oracle 10g服务器运行以下SQL:

WITH openedXml AS (
  SELECT extractvalue(column_value, '/theRow/First') FIRST,
         extractvalue(column_value, '/theRow/Last') LAST,
         to_number(extractvalue(column_value, '/theRow/Age')) Age
    FROM TABLE(XMLSequence(XMLTYPE('
  <theRange>
    <theRow><First>Bob</First><Last>Smith</Last><Age>30</Age></theRow>
    <theRow><First>Sue</First><Last>Jones</Last><Age>34</Age></theRow>
...
...
...
    <theRow><First>Tom</First><Last>Anderson</Last><Age>39</Age></theRow>
    <theRow><First>Ali</First><Last>Grady</Last><Age>45</Age></theRow>
  </theRange>
  ').extract('/theRange/theRow')))
)
SELECT *
FROM openedxml
WHERE age BETWEEN 30 AND 35;

当我尝试运行它时,出现以下错误:

Error at Command Line:1 Column:0 Error report: SQL Error: ORA-01704: string literal too long
01704. 00000 -  "string literal too long"
*Cause:    The string literal is longer than 4000 characters.
*Action:   Use a string literal of at most 4000 characters.
           Longer values may only be entered using bind variables.

我的字符串有时会长于4000个字符。关于如何解决这个问题的任何想法吗?


问题答案:

您将需要使用CLOB作为XMLTYPE()的输入,而不是VARCHAR。

使用dbms_lob.loadclobfromfile文件中加载xml,或通过将xml分成32000个字符块并附加到CLOB的方式。

DECLARE
   xmlClob CLOB;
BEGIN
/* Build Clob here */

WITH openedXml AS (
  SELECT extractvalue(column_value, '/theRow/First') FIRST,
         extractvalue(column_value, '/theRow/Last') LAST,
         to_number(extractvalue(column_value, '/theRow/Age')) Age
    FROM TABLE(XMLSequence(XMLTYPE(xmlClob).extract('/theRange/theRow')))
)
SELECT *
FROM openedxml
WHERE age BETWEEN 30 AND 35;
END;


 类似资料:
  • 问题内容: 我正在使用大量文本更新BLOB,但出现此错误: 有什么办法解决吗? 文本长度为2670个字符,通过进行了转换,如[我如何在Oracle SQL Developer中编辑BLOB(包含JSON)所述。并且全部在查询中的一行上。 更新: 有问题的BLOB已经包含2686个字符长的文本,比我要插入的文本长。 问题答案: A限制为2000个字节。如果您的数据长于此长度,则需要将其存储在a中,然

  • 问题内容: 为什么在将long分配给min和max的地方得到的int数太大? 问题答案: 默认情况下,java中的所有文字数字均为,范围为 包含在内。 您的文字超出了此范围,因此要进行编译,您需要指出它们是文字(即带有的后缀): 请注意,java同时支持大写和小写,但我建议 不要 使用小写,因为它看起来像: 相同的Java语言规范 如果以ASCII字母L或l(ell)为后缀,则整数文字的类型为lo

  • 问题内容: 我正在使用ckeditor格式化我的内部一些数据 现在,当我尝试使用这种方式发布数据时, 我得到错误 HTTP错误414。请求URL太长。 我在这里遇到错误:http : //iranfairco.com/example/errorLongUrl.aspx 尝试单击该页面左下方的“ 编辑文本” 按钮。 为什么会这样呢?我该如何解决? 问题答案: 根据这个问题,URL的最大实际长度是20

  • 问题内容: 我最近尝试使用sftp访问我的linux机器,在那里我实现了自己的简单外壳。并且我设置了除root用户以外的其他用户默认使用我的shell(通过编辑/ etc / passwd文件)。然后问题出现了,一旦我尝试通过sftp访问,我将收到一条消息:“接收的消息太长:”,我搜索了解决方案,一种解决方案是将该用户的默认shell改回普通的bash shell。我试过了,而且奏效了,问题在于,

  • 我有一个Alfresco(5.2.4)工作流,它在activiti引擎上运行。当用户提交任务并且用户任务块完成时,我收到以下错误: 到目前为止,我发现activiti自动存储在工作流中执行的“步骤”的历史记录,因此它会引发错误。 我想知道是否有一些数据库表定义,我可以寻找搜索超过255个字符总数的列。 如果我不能在用户完成任务时修改javascript代码,有没有办法增加长度? 谢啦 附注:我找到

  • 问题内容: 我有两个MySQL实例。当数据太长时,第一个会在插入时截断字符串。第二个引发错误: 我希望第二个也截断数据。是否有任何MySQL设置来管理此行为? 问题答案: 您可以禁用和。这样可以自动截断插入的字符串。 引用来自MySQL Documantation。 严格模式控制MySQL如何处理数据更改语句(例如INSERT或UPDATE)中的无效或缺失值。值可能由于多种原因而无效。例如,它可能