首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NexusDB执行失败

NexusDB执行失败
EN

Stack Overflow用户
提问于 2015-11-12 10:46:16
回答 1查看 152关注 0票数 1

NexusDB :查询执行失败:临时存储管理器中的操作系统错误: Espace sur le disque($70/112) 2B27/11047美元

我不明白这个信息。真正的问题是什么?

查询代码:

代码语言:javascript
复制
SELECT d.Code, c.RaisonSociale, c.EMail, m.Article, m.Quantite, m.TotalTTC, m.NumeroTicket 
FROM C_Client c, C_Mouvement m, C_Depot d, C_Article a, C_Ticket t 
WHERE c.Ident = m.RefClient 
AND m.Article = a.Code 
AND t.DateFacture BETWEEN :dateDebut AND :dateFin
EN

回答 1

Stack Overflow用户

发布于 2015-11-13 00:45:19

“临时存储管理器”负责存储脏块,如果缓冲区管理器已达到允许的最大内存量,并且必须将块从内存中清除。

"Espace insuffisant le disque“是一条操作系统错误消息,我猜这句话的意思是”磁盘已经满了“。这意味着TSM用于存储的磁盘已满。

可能是因为您的查询产生的结果集非常庞大,超出了可用内存和磁盘空间。

如果您查看您的查询,这并不奇怪:

代码语言:javascript
复制
FROM 
  C_Client c, 
  C_Mouvement m, 
  C_Depot d, 
  C_Article a, 
  C_Ticket t 
WHERE 
  c.Ident = m.RefClient AND 
  m.Article = a.Code AND 
  t.DateFacture BETWEEN :dateDebut AND :dateFin

您正在连接5个表,但您只定义了其中3个表(c、m和a)之间的联接条件,这将与其他两个表生成一个完全不受限制的交叉连接。如果我们仅假设每个(c、m和a)、d和t都有1000条记录,那么已经有了1,000,000,000条记录结果集。

这就是为什么您使用的join语法已经被SQL标准废弃了20多年的原因之一。如果您试图使用当前语法编写查询,问题很快就会变得很明显:

代码语言:javascript
复制
FROM 
    C_Client AS c
  INNER JOIN
    C_Mouvement AS m ON c.Ident = m.RefClient
  INNER JOIN 
    C_Article AS a ON m.Article = a.Code
  INNER JOIN
    C_Depot AS d ON --???
  INNER JOIN
    C_Ticket AS t ON --???
WHERE 
  t.DateFacture BETWEEN :dateDebut AND :dateFin
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33669668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档