Java ORA-00942:表或视图不存在,但查询在SQL developer上运行
我得到了一个oracle sql查询,它在oracle sql developer上运行良好,但当我从Java准备语句运行它时,sql异常抛出为“ORA-00942:表或视图不存在”,用户获得了上述3个模式的所有特权。 这个查询有问题吗?目前我似乎找不到问题,仍然在调试sql字符串,也可以在sql developer中执行 SQL查询Java ORA-00942:表或视图不存在,但查询在SQL developer上运行,java,sql,oracle,oracle-sqldeveloper,Java,Sql,Oracle,Oracle Sqldeveloper,我得到了一个oracle sql查询,它在oracle sql developer上运行良好,但当我从Java准备语句运行它时,sql异常抛出为“ORA-00942:表或视图不存在”,用户获得了上述3个模式的所有特权。 这个查询有问题吗?目前我似乎找不到问题,仍然在调试sql字符串,也可以在sql developer中执行 SQL查询 SELECT CLI_CLIENT.NAME ,CLI_CLIENT.CLIENT_ID, AA.SEARCHES, (SELECT COUNT(*) FRO
SELECT CLI_CLIENT.NAME ,CLI_CLIENT.CLIENT_ID,
AA.SEARCHES,
(SELECT COUNT(*) FROM RES_BOOKING,CLI_WEB_USER WHERE RES_BOOKING.BOOKED_USER=CLI_WEB_USER.ADM_USER_ID
AND TRUNC(RES_BOOKING.BOOKING_DATE) BETWEEN '01-MAR-16' AND '24-MAR-16' AND CLI_WEB_USER.CLIENT_ID=CLI_CLIENT.CLIENT_ID)AS BOOKINGS
FROM CLI_CLIENT,
(SELECT CWU.CLIENT_ID,
COUNT(ST.OPERATION) AS SEARCHES
FROM STAT.ST_TRANSACTION ST , CLI_WEB_USER CWU , CACHE.CACC_CRITERIA CC , CACHE.CACC_CRITERIA_STATS CS
WHERE ST.USER_NAME=CWU.USERNAME
AND ST.OPERATION LIKE 'OTA_HotelAvailRQ%'
AND TRUNC(ST.TRS_TIMESTAMP) BETWEEN '01-MAR-16' AND '24-MAR-16'
AND CWU.CLIENT_ID IN (10975,10040)
AND CC.CRITERIA_ID=CS.CRITERIA_ID
AND CS.SESSION_ID=ST.SESSION_ID
AND CS.DISTRIBUTION_CHANNEL='W'
GROUP BY CLIENT_ID, CWU.CLIENT_ID
)AA
WHERE CLI_CLIENT.CLIENT_ID=AA.CLIENT_ID;
Java异常
java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist
检查您是否在SQL Developer和java应用程序中以相同的用户帐户连接到数据库。很可能情况并非如此,您的java应用程序无法访问查询中的一个或多个表。检查您是否在SQL Developer和java应用程序中以相同的用户帐户连接到数据库。很可能情况并非如此,java应用程序无法访问查询中的一个或多个表。以下是您在更好的视图和性能下的查询:
select C.NAME,
C.CLIENT_ID,
AA.SEARCHES,
(select count(1)
from RES_BOOKING R
join CLI_WEB_USER U
on U.ADM_USER_ID = R.BOOKED_USER
and trunc(R.BOOKING_DATE)
between '01-MAR-16'
and '24-MAR-16'
and U.CLIENT_ID = C.CLIENT_ID
) AS BOOKINGS
from CLI_CLIENT C
join
(select CWU.CLIENT_ID as CLIENT,
count(ST.OPERATION) AS SEARCHES
from STAT.ST_TRANSACTION ST
join CLI_WEB_USER CWU
on CWU.USERNAME = ST.USER_NAME
join CACHE.CACC_CRITERIA CC
on CC.CRITERIA_ID = CS.CRITERIA_ID
join CACHE.CACC_CRITERIA_STATS CS
on CS.SESSION_ID = ST.SESSION_ID
where ST.OPERATION like 'OTA_HotelAvailRQ%'
and trunc(ST.TRS_TIMESTAMP)
between '01-MAR-16'
and '24-MAR-16'
and CWU.CLIENT_ID in (10975,10040)
and CS.DISTRIBUTION_CHANNEL='W'
group by CLIENT_ID, CLIENT -- OLD OF CLIENT -> CWU.CLIENT_ID
) AA
on AA.CLIENT = C.CLIENT_ID; -- OLD OF AA.CLIENT -> AA.CLIENT_ID
然后将查询划分为块并逐个执行。比如说,
第一部分:
select C.NAME,
C.CLIENT_ID,
(select count(1)
from RES_BOOKING R
join CLI_WEB_USER U
on U.ADM_USER_ID = R.BOOKED_USER
and trunc(R.BOOKING_DATE)
between '01-MAR-16'
and '24-MAR-16'
and U.CLIENT_ID = C.CLIENT_ID
) AS BOOKINGS
from CLI_CLIENT C;
第二部分:获取连接块内的代码,等等。如果您在该块中遇到错误,请继续进行分割。以下是您在更好的视图和性能下的查询:
select C.NAME,
C.CLIENT_ID,
AA.SEARCHES,
(select count(1)
from RES_BOOKING R
join CLI_WEB_USER U
on U.ADM_USER_ID = R.BOOKED_USER
and trunc(R.BOOKING_DATE)
between '01-MAR-16'
and '24-MAR-16'
and U.CLIENT_ID = C.CLIENT_ID
) AS BOOKINGS
from CLI_CLIENT C
join
(select CWU.CLIENT_ID as CLIENT,
count(ST.OPERATION) AS SEARCHES
from STAT.ST_TRANSACTION ST
join CLI_WEB_USER CWU
on CWU.USERNAME = ST.USER_NAME
join CACHE.CACC_CRITERIA CC
on CC.CRITERIA_ID = CS.CRITERIA_ID
join CACHE.CACC_CRITERIA_STATS CS
on CS.SESSION_ID = ST.SESSION_ID
where ST.OPERATION like 'OTA_HotelAvailRQ%'
and trunc(ST.TRS_TIMESTAMP)
between '01-MAR-16'
and '24-MAR-16'
and CWU.CLIENT_ID in (10975,10040)
and CS.DISTRIBUTION_CHANNEL='W'
group by CLIENT_ID, CLIENT -- OLD OF CLIENT -> CWU.CLIENT_ID
) AA
on AA.CLIENT = C.CLIENT_ID; -- OLD OF AA.CLIENT -> AA.CLIENT_ID
然后将查询划分为块并逐个执行。比如说,
第一部分:
select C.NAME,
C.CLIENT_ID,
(select count(1)
from RES_BOOKING R
join CLI_WEB_USER U
on U.ADM_USER_ID = R.BOOKED_USER
and trunc(R.BOOKING_DATE)
between '01-MAR-16'
and '24-MAR-16'
and U.CLIENT_ID = C.CLIENT_ID
) AS BOOKINGS
from CLI_CLIENT C;
第二部分:获取连接块内的代码,等等。如果在该块中出现错误,请继续分割。是的,我也检查了这一点,这就是问题所在,所有表都可以从Java端单独访问,您好,您可能使用了不同的连接凭据。如果您正在使用数据源,请在其凭据下进行检查。连接也可以,但我没有提到我当前使用的模式,只提到了其他模式,添加后如何运行查询。。塔克斯!schema=useraccount。很高兴听到这就是问题所在。是的,我也检查了这一点,这就是问题所在,所有的表都可以从Java端单独访问,您好,您可能使用了不同的连接凭据。如果您正在使用数据源,请在其凭据下进行检查。连接也可以,但我没有提到我当前使用的模式,只提到了其他模式,添加后如何运行查询。。塔克斯!schema=useraccount。很高兴听到这就是问题所在。请尝试将您的查询划分为小查询并尝试逐步检查。此外,您可以使用JOIN提高查询效率,将查询划分为小查询并尝试逐步检查,您可以使用JOIN来提高查询效率EP我按照您所说的划分查询并逐步运行,发现了问题,因为我没有提到我当前使用的模式,对于“CLI_CLIENT”之类的表,我应该使用TBX.CLI_CLIENT,但我目前在TBX模式中,无论我添加了什么,它都起到了作用,现在我正在尝试你的查询!!非常感谢您的询问和解释!是的,我按照你说的划分了我的查询,然后一步一步地运行,发现了问题所在,因为我没有提到我当前使用的模式,对于“CLI_CLIENT”之类的表,我应该使用TBX.CLI_CLIENT,但我当前在TBX模式中,不管怎样,现在我添加了它,它工作了,现在我正在尝试您的查询!!非常感谢您的询问和解释!