Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Groovy-多表旋转到文件_Java_Sql_Groovy_Groovy Console - Fatal编程技术网

Java Groovy-多表旋转到文件

Java Groovy-多表旋转到文件,java,sql,groovy,groovy-console,Java,Sql,Groovy,Groovy Console,我正在运行一个多表SQL调用,该调用将启动到file.write。这段代码在SQuirreL甚至Groovy中都能工作,直到我找到file.write(“”)行(代码的最后4行)。我得到的第一条错误消息是“因为:ORA-00911:invalid character”,其余的与之类似 这就是我认为错误所在的地方: file.write("") db.eachRow(sql) { file.append(it.MOPID + "\t" + it.EOM + "\t" + it.Mopsta

我正在运行一个多表SQL调用,该调用将启动到file.write。这段代码在SQuirreL甚至Groovy中都能工作,直到我找到file.write(“”)行(代码的最后4行)。我得到的第一条错误消息是“因为:ORA-00911:invalid character”,其余的与之类似

这就是我认为错误所在的地方:

file.write("")
db.eachRow(sql) {
    file.append(it.MOPID + "\t" + it.EOM + "\t" + it.Mopstart + "\n")
我认为我的代码存在的问题是,有不止一个表,在编写代码时,有些东西变得非常复杂。非常感谢你的知识


尊敬的~Corpa Loom我不确定您是否首先检查了返回任何行的sql。我篡改了你的SQL,结果证明它是无效的。您现在编写sql的方式不会返回任何行,尽管它说它是有效的

预期问题:
和to_char(mopactivity.mopend,'dd-mon-yyyyy hh24:mi:')>“2013-05-28 06:01”

在上一行中,您试图比较两个不同格式的
varchar
,这两种格式永远不会产生任何结果


下面是一个为您的sql定制的正确格式的示例。试试看。

这是您的修复Copra。上周末见到你真高兴

import groovy.sql.Sql

def db = Sql.newInstance(
    'jdbc:oracle:thin:@10.10.47.193:1521:ORCL',
    'reporter', 'r3p0rt3r', 'oracle.jdbc.pool.OracleDataSource')

def sql = """
SELECT * FROM
(SELECT MOPACTIVITY.MOPID,
MOPACTIVITY.MOPSERVICEIMPACTED "TYPE",
MOPACTIVITY.MOPSTART,
MOPACTIVITY.MOPAPPROVEDTIME,
ROUND(MOPACTIVITY.MOPSTART -  MOPACTIVITY.MOPAPPROVEDTIME,2)||' days' "TIME_DIF",
ROUND(MOPACTIVITY.MOPSTART -  MOPACTIVITY.MOPAPPROVEDTIME,0) "TIME_ORDER",
 (CASE 
  WHEN SUBSTR(MOPACTIVITY.MOPID, 7, 2) = '24' THEN SUBSTR(MOPACTIVITY.MOPID, 1, 6)||'00'||SUBSTR(MOPACTIVITY.MOPID, 9, 4)
  ELSE MOPACTIVITY.MOPID
 END ) FIXED_MOP,
(CASE 
  WHEN SUBSTR(MOPACTIVITY.MOPID, 7, 2) = '24' THEN SUBSTR(MOPACTIVITY.MOPID, 7, 2)
  ELSE SUBSTR(MOPACTIVITY.MOPID, 7, 2)
 END ) MOP_HR 
FROM MOPUSER.MOPACTIVITY
WHERE MOPACTIVITY.MOPSTART -  MOPACTIVITY.MOPAPPROVEDTIME BETWEEN 0 and 14)
WHERE TRUNC(TO_DATE(FIXED_MOP, 'MMDDYYHH24MISS'))
  BETWEEN TRUNC(SYSDATE-90) AND TRUNC(SYSDATE)
ORDER BY "TIME_ORDER"
    """
def date = new Date() 
def dts = date.format("yyyy-MM-dd-HH-mm-ss") 
File file = new File('C:/Output/' + dts + ' EXPEDITE_MOPS.xls')
file.write("")
db.eachRow(sql) {
    file.append(it.MOPID + "\t" + it.TYPE + "\n")
}

如果您没有将其写入文件,而是执行了一个println-它工作吗?好的,只是查找错误消息-它说sql语句中有一个特殊字符。我要做的第一件事是尝试db.eachRow(sql.toString()),我的sql似乎运行顺利,甚至可以从SQuirreL导出到Excel。我忍不住想知道,在一个多表SQL调用中,然后想写入文件,在启动文件之前,如何确保选择或集中了要导出的表。write?
import groovy.sql.Sql

def db = Sql.newInstance(
    'jdbc:oracle:thin:@10.10.47.193:1521:ORCL',
    'reporter', 'r3p0rt3r', 'oracle.jdbc.pool.OracleDataSource')

def sql = """
SELECT * FROM
(SELECT MOPACTIVITY.MOPID,
MOPACTIVITY.MOPSERVICEIMPACTED "TYPE",
MOPACTIVITY.MOPSTART,
MOPACTIVITY.MOPAPPROVEDTIME,
ROUND(MOPACTIVITY.MOPSTART -  MOPACTIVITY.MOPAPPROVEDTIME,2)||' days' "TIME_DIF",
ROUND(MOPACTIVITY.MOPSTART -  MOPACTIVITY.MOPAPPROVEDTIME,0) "TIME_ORDER",
 (CASE 
  WHEN SUBSTR(MOPACTIVITY.MOPID, 7, 2) = '24' THEN SUBSTR(MOPACTIVITY.MOPID, 1, 6)||'00'||SUBSTR(MOPACTIVITY.MOPID, 9, 4)
  ELSE MOPACTIVITY.MOPID
 END ) FIXED_MOP,
(CASE 
  WHEN SUBSTR(MOPACTIVITY.MOPID, 7, 2) = '24' THEN SUBSTR(MOPACTIVITY.MOPID, 7, 2)
  ELSE SUBSTR(MOPACTIVITY.MOPID, 7, 2)
 END ) MOP_HR 
FROM MOPUSER.MOPACTIVITY
WHERE MOPACTIVITY.MOPSTART -  MOPACTIVITY.MOPAPPROVEDTIME BETWEEN 0 and 14)
WHERE TRUNC(TO_DATE(FIXED_MOP, 'MMDDYYHH24MISS'))
  BETWEEN TRUNC(SYSDATE-90) AND TRUNC(SYSDATE)
ORDER BY "TIME_ORDER"
    """
def date = new Date() 
def dts = date.format("yyyy-MM-dd-HH-mm-ss") 
File file = new File('C:/Output/' + dts + ' EXPEDITE_MOPS.xls')
file.write("")
db.eachRow(sql) {
    file.append(it.MOPID + "\t" + it.TYPE + "\n")
}