将Cognos特定的行转换为oraclesql



我试图在Oracle SQL中创建一个存储过程,同时查看我遇到的代码,这一行在cognos中使用,其中后端是Oracle数据库。

如何转换此行,以便在存储过程中使用它?

(#PROMPT('P_DATE_TYPE')#) = 1 
and A.STRD_DTT between TO_DATE(SUBSTR(#SQ(PROMPT('P_fromCreateDate', 'datetime'))#,1,19), 'YYYY-MM-dd HH24:MI:SS')
and TO_DATE(SUBSTR(#SQ(PROMPT('P_ToCreateDate', 'datetime'))#,1,19), 'YYYY-MM-dd HH24:MI:SS')       
OR      
(#PROMPT('P_DATE_TYPE')#) = 2 
and A.crtd_dtt between TO_DATE(SUBSTR(#SQ(PROMPT('P_fromCreateDate', 'datetime'))#,1,19), 'YYYY-MM-dd HH24:MI:SS')
and TO_DATE(SUBSTR(#SQ(PROMPT('P_ToCreateDate', 'datetime'))#,1,19), 'YYYY-MM-dd HH24:MI:SS')
OR
(#PROMPT('P_DATE_TYPE')#) = 3 
and A.END_DTT between TO_DATE(SUBSTR(#SQ(PROMPT('P_fromCreateDate', 'datetime'))#,1,19), 'YYYY-MM-dd HH24:MI:SS')
and TO_DATE(SUBSTR(#SQ(PROMPT('P_ToCreateDate', 'datetime'))#,1,19), 'YYYY-MM-dd HH24:MI:SS')

共有3个参数,P_DATE_TYPE的值为1、2或3,用于指示要在日期范围中使用的日期列。其他2个参数简单地定义了日期范围的边界。这两个值似乎是作为字符串传递的,需要转换为日期。

虽然以下内容可能仍需要进一步的修改,但对于Oracle查询,它看起来与以下内容类似

WHERE ($P_DATE_TYPE = 1 AND
A.STRD_DTT BETWEEN to_date(substr($P_fromCreateDate,1,19),'YYYY-MM-dd HH24:MI:SS')
AND to_date(substr($P_ToCreateDate,1,19),'YYYY-MM-dd HH24:MI:SS')
)
OR ($P_DATE_TYPE = 2 AND
A.crtd_dtt BETWEEN to_date(substr($P_fromCreateDate,1,19),'YYYY-MM-dd HH24:MI:SS')
AND to_date(substr($P_ToCreateDate,1,19),'YYYY-MM-dd HH24:MI:SS')
)
OR ($P_DATE_TYPE = 3  AND
A.END_DTT BETWEEN to_date(substr($P_fromCreateDate,1,19),'YYYY-MM-dd HH24:MI:SS')
AND to_date(substr($P_ToCreateDate,1,19),'YYYY-MM-dd HH24:MI:SS')
)

在存储过程中,您将声明自己的参数名称,并使用这些名称,而不是我用来指示参数的$

  1. $P_DATE_TYPE::保持值1、2或3
  2. $P_fromCreateDate::日期文字
  3. $P_ToCreateDate::日期文字

最新更新