java.sql.SQLSyntaxErrorException: ORA-01797: 此运算符后必须跟有 ANY 或 ALL
java.sql.SQLSyntaxErrorException: ORA-01797: this operator must be followed by ANY or ALL
我的查询是
sql = "SELECT pmmr.REQUEST_NO , pmel.event_datetime Event_Datetime,Pmmr.Form_No Form_No, nvl(Pmf.Form_Name, Pmmr.Form_No) formName, pmmr.MRN, nvl (p.FIRST_NAME || DECODE(p.FAMILY_NAME, NULL, '', ' ' || p.FAMILY_NAME),pmmr.MRN) PATIENT_NAME,pmmr.ASSIGNED_TO,"
+" pmmr.DRUG_GENERIC_NAME,pmmr.LAST_STATUS, nvl(initcap(( hr1.FIRST_NAME || ' ' || hr1.LAST_NAME)),pmmr.LAST_PERFORMER_ID) LastActionBy,"
+" nvl(hr2.DEPARTMENT || ' - ' || hr2.SECTION_NAME,'') ORGANIZATION_UNIT, nvl(initcap(( hr2.FIRST_NAME || ' ' || hr2.LAST_NAME)),pmmr.REQUESTER_ID) RequesterName, pmmr.REQUEST_DATE,"
+" pmmr.item_cost"
+" FROM PHRM_MFRP_MEDICATION_REQUEST pmmr"
+" join PHRM_MFRP_EVENT_LOG pmel on pmmr.REQUEST_NO = pmel.REQUEST_NO"
+" left outer join Hr_Employee hr1 on Pmmr.Last_Performer_Id = Hr1.Employee_Number"
+" left outer join Hr_Employee hr2 on Pmmr.Requester_Id = Hr2.Employee_Number"
+" left outer join EAPPTMT.PATIENT p on Pmmr.Mrn = P.Mrn"
+" left outer join Phrm_Mfrp_Form pmf on Pmmr.Form_No = Pmf.Form_No";
if (status.equals("Pending")){
}
else if(status.equals("Approved")){
sql += " WHERE pmmr.BRANCH_ID = ? AND pmel.EVENT_STATUS IN ('Pharmacy Director Approved')"
+" and Pmmr.Form_No = 1";
sql +=" and pmel.event_datetime >= (?,'dd/MM/yyyy') and pmel.event_datetime <= (?,'dd/MM/yyyy')";
sql+=" order by LAST_STATUS, EVENT_DATETIME DESC ";
} else if(status.equals("Disapproved")){
sql += " WHERE pmmr.BRANCH_ID = ? AND pmel.EVENT_STATUS IN ('Pharmacy Director Disapproved')"
+ "and Pmmr.Form_No = 1";
sql +=" and pmel.event_datetime >= (?,'dd/MM/yyyy') and pmel.event_datetime <= (?,'dd/MM/yyyy')";
sql+=" order by LAST_STATUS, EVENT_DATETIME DESC ";}
stmt = Con.prepareStatement(sql);
stmt.setString(2, startDate);
stmt.setString(3, endDate);
//tmt.setString(3, status);
stmt.setInt(1, branchId);
rs = stmt.executeQuery();
我收到错误 java.sql.SQLSyntaxErrorException:ORA-01797:每当我 运行 它时,此运算符必须后跟 ANY 或 ALL,
这是什么意思,我该如何解决?
您的代码非常混乱,应该清理一下。在这里提问时,您通常应该创建一个 MRE 来突出显示具体问题,而不是将您的整个代码库粘贴到此处让我们找到您的错误。
无论如何,自从我对此感兴趣后,我用谷歌搜索了一下,发现您的问题已经得到解答 here。
它说 ORA-01797 与缺少 to_date()
常量的查询有关。
通过查看您的代码,我可以看到它缺少的几个地方,如下所示:
sql +=" and pmel.event_datetime >= /*to_date missing here!*/ (?,'dd/MM/yyyy') and
pmel.event_datetime <= /*to_date missing here!*/ (?,'dd/MM/yyyy')";
尝试修复它,然后它就会起作用。希望对您有所帮助
我的查询是
sql = "SELECT pmmr.REQUEST_NO , pmel.event_datetime Event_Datetime,Pmmr.Form_No Form_No, nvl(Pmf.Form_Name, Pmmr.Form_No) formName, pmmr.MRN, nvl (p.FIRST_NAME || DECODE(p.FAMILY_NAME, NULL, '', ' ' || p.FAMILY_NAME),pmmr.MRN) PATIENT_NAME,pmmr.ASSIGNED_TO,"
+" pmmr.DRUG_GENERIC_NAME,pmmr.LAST_STATUS, nvl(initcap(( hr1.FIRST_NAME || ' ' || hr1.LAST_NAME)),pmmr.LAST_PERFORMER_ID) LastActionBy,"
+" nvl(hr2.DEPARTMENT || ' - ' || hr2.SECTION_NAME,'') ORGANIZATION_UNIT, nvl(initcap(( hr2.FIRST_NAME || ' ' || hr2.LAST_NAME)),pmmr.REQUESTER_ID) RequesterName, pmmr.REQUEST_DATE,"
+" pmmr.item_cost"
+" FROM PHRM_MFRP_MEDICATION_REQUEST pmmr"
+" join PHRM_MFRP_EVENT_LOG pmel on pmmr.REQUEST_NO = pmel.REQUEST_NO"
+" left outer join Hr_Employee hr1 on Pmmr.Last_Performer_Id = Hr1.Employee_Number"
+" left outer join Hr_Employee hr2 on Pmmr.Requester_Id = Hr2.Employee_Number"
+" left outer join EAPPTMT.PATIENT p on Pmmr.Mrn = P.Mrn"
+" left outer join Phrm_Mfrp_Form pmf on Pmmr.Form_No = Pmf.Form_No";
if (status.equals("Pending")){
}
else if(status.equals("Approved")){
sql += " WHERE pmmr.BRANCH_ID = ? AND pmel.EVENT_STATUS IN ('Pharmacy Director Approved')"
+" and Pmmr.Form_No = 1";
sql +=" and pmel.event_datetime >= (?,'dd/MM/yyyy') and pmel.event_datetime <= (?,'dd/MM/yyyy')";
sql+=" order by LAST_STATUS, EVENT_DATETIME DESC ";
} else if(status.equals("Disapproved")){
sql += " WHERE pmmr.BRANCH_ID = ? AND pmel.EVENT_STATUS IN ('Pharmacy Director Disapproved')"
+ "and Pmmr.Form_No = 1";
sql +=" and pmel.event_datetime >= (?,'dd/MM/yyyy') and pmel.event_datetime <= (?,'dd/MM/yyyy')";
sql+=" order by LAST_STATUS, EVENT_DATETIME DESC ";}
stmt = Con.prepareStatement(sql);
stmt.setString(2, startDate);
stmt.setString(3, endDate);
//tmt.setString(3, status);
stmt.setInt(1, branchId);
rs = stmt.executeQuery();
我收到错误 java.sql.SQLSyntaxErrorException:ORA-01797:每当我 运行 它时,此运算符必须后跟 ANY 或 ALL,
这是什么意思,我该如何解决?
您的代码非常混乱,应该清理一下。在这里提问时,您通常应该创建一个 MRE 来突出显示具体问题,而不是将您的整个代码库粘贴到此处让我们找到您的错误。
无论如何,自从我对此感兴趣后,我用谷歌搜索了一下,发现您的问题已经得到解答 here。
它说 ORA-01797 与缺少 to_date()
常量的查询有关。
通过查看您的代码,我可以看到它缺少的几个地方,如下所示:
sql +=" and pmel.event_datetime >= /*to_date missing here!*/ (?,'dd/MM/yyyy') and
pmel.event_datetime <= /*to_date missing here!*/ (?,'dd/MM/yyyy')";
尝试修复它,然后它就会起作用。希望对您有所帮助