SQL Developer'运行脚本'失败,但运行声明'作品

时间:2014-06-18 13:53:52

标签: sql oracle oracle-sqldeveloper

我在两个表链接上有一个简单的左连接查询来获取描述:

SELECT WORK.ACTION_ID, WORK.ACTION_STAT, WORK.DESCRIPTION_ID,
  WORK.CLIENT_SERVER_IND, WORK.UPDATE_TSTAMP, WORK.UPDATE_USER_ID,
  WORK.OTHER_ACTION_DATA, D.DESCRIPTION_ID, D.LANGUAGE, D.DESCRIPTION_TEXT,
  D.UPDATE_TSTAMP DSCRP_UPD_TSTAMP
FROM xxxx.R_ACTION WORK
INNER JOIN xxxx.R_DESC_TEXT D ON WORK.DESCRIPTION_ID = D.DESCRIPTION_ID
WHERE D.LANGUAGE = 'ENGLISH'
AND D.DESCRIPTION_STAT = 'P';

我在SQL Developer中有查询,如果我选择'Run Statement',它可以在不到一秒的时间内正常工作,我可以检索所有283条记录。

如果我选择“运行脚本”,我可以看到大约33行的输出,然后它就会挂起,最后我得到一个'socket read timed out'消息。

我在不同的模式中有相同的表,但其中的数据略有不同,在那一个中​​,运行语句和运行脚本运行正常。

为什么它会用于'运行语句'但在此模式中的'运行脚本'失败?

1 个答案:

答案 0 :(得分:0)

我也加入CLOB行列。认为DESCRIPTION_TEXTCLOB字段的可能性为90%。

作为测试,请尝试此查询"运行脚本",它会忽略实际的DESCRIPTION_TEXT并输出"伪造"代替:

SELECT WORK.ACTION_ID, WORK.ACTION_STAT, WORK.DESCRIPTION_ID,
  WORK.CLIENT_SERVER_IND, WORK.UPDATE_TSTAMP, WORK.UPDATE_USER_ID,
  WORK.OTHER_ACTION_DATA, D.DESCRIPTION_ID, D.LANGUAGE, 'bogus' DESCRIPTION_TEXT,
  D.UPDATE_TSTAMP DSCRP_UPD_TSTAMP
FROM xxxx.R_ACTION WORK
INNER JOIN xxxx.R_DESC_TEXT D ON WORK.DESCRIPTION_ID = D.DESCRIPTION_ID
WHERE D.LANGUAGE = 'ENGLISH'
AND D.DESCRIPTION_STAT = 'P';

如果可行,请尝试使用此查询,该查询使用DBMS_LOB.SUBSTR()通过将输出截断为前四个字符来帮助将CLOB强制转换为VARCHAR。

SELECT WORK.ACTION_ID, WORK.ACTION_STAT, WORK.DESCRIPTION_ID,
  WORK.CLIENT_SERVER_IND, WORK.UPDATE_TSTAMP, WORK.UPDATE_USER_ID,
  WORK.OTHER_ACTION_DATA, D.DESCRIPTION_ID, D.LANGUAGE,
  dbms_lob.substr(D.DESCRIPTION_TEXT, 4000) DESCRIPTION_TEXT,
  D.UPDATE_TSTAMP DSCRP_UPD_TSTAMP
FROM xxxx.R_ACTION WORK
INNER JOIN xxxx.R_DESC_TEXT D ON WORK.DESCRIPTION_ID = D.DESCRIPTION_ID
WHERE D.LANGUAGE = 'ENGLISH'
AND D.DESCRIPTION_STAT = 'P';