查询在Oracle SQL Developer中工作但在Microsoft Query

时间:2017-07-05 17:05:39

标签: excel oracle

我花了最近两天的时间浏览Google,并在这个网站上搜索这方面的帮助,但没有一个建议的解决方案对我有用/遗憾。基本上我有一个在Oracle SQL Developer中可以正常运行的代码,我试图将其放入Excel工作簿中,这样没有SQL知识的人可以简单地更改几个单元格中的开始/停止时间并收集他们报告所需的必要信息。

在尝试将其链接到特定单元格之前,我尝试测试下面的代码以查看它是否有效但遗憾的是它失败了所以我还没有尝试将变量设置为单元格。

守则如下:

    SET NOCOUNT ON;

define start_dateA = TO_DATE('2017-07-05_00:00:00', 'YYYY-MM-DD"_"HH24:MI:SS');
define stop_dateB = TO_DATE('2017-07-05_23:59:59', 'YYYY-MM-DD"_"HH24:MI:SS');

select tdate, FRSTOL, TOSTOL,   DEVCOD, USR_ID, PRTNUM, TRNQTY
from mytable
where 
tdate BETWEEN &start_dateA AND &stop_dateB
and (FRSTOL like 'A%'
OR FRSTOL like 'B%'
OR FRSTOL like 'C%'
OR FRSTOL like 'E%'
OR FRSTOL like 'F%'
OR FRSTOL like 'L%'
OR FRSTOL like 'P%'
OR FRSTOL like 'R%'
OR FRSTOL like 'T%')

order by usr_id, tdate

我尝试运行时收到的错误是ORA-00922。我大约95%确定define语句存在问题,因为将变量start_dateA和stop_dateB替换为实际值时,它可以正常工作。请注意我将需要两个日期和时间组件来处理我正在处理的事情。此外,我只拥有服务器的ReadOnly权限,因此我无法/不具备对表或服务器本身进行更改的知识。

也不确定我是否可以提出两个问题,但是如果有人也可以帮忙解决如何将start_dateA和& stop_dateB设置为特定单元格的问题,那将是非常感激的,因为这是障碍我搞清楚这一步后面对。

提前谢谢你,

1 个答案:

答案 0 :(得分:0)

我不建议通过编写脆弱的定义语句来解决问题,而是建议您稍微重构日期谓词w.r.t. define语句:

define dtA=2017-07-05_00:00:00
define dtB=2017-07-05_23:59:59
define fmt='YYYY-MM-DD"_"HH24:MI:SS'

tdate between TO_DATE('&dtA', '&fmt') and TO_DATE('&dtB', '&fmt')