需要PL/SQL脚本的想法吗
我已经从一组表中提取了数据,这些表需要一个where子句,数据作为列。 我的团队在每次运行查询时手动输入日期时出错。我想编写一个PL SQL,从数据库(oracle)中动态获取日期字段。 以下是查询需要PL/SQL脚本的想法吗,sql,date,Sql,Date,我已经从一组表中提取了数据,这些表需要一个where子句,数据作为列。 我的团队在每次运行查询时手动输入日期时出错。我想编写一个PL SQL,从数据库(oracle)中动态获取日期字段。 以下是查询 select oli.cart_key,lext.minor_order_number,wlkp.mf_wh_loc_id,oli.warehouse_type from tab1 oli,tab2 lext,tab3 wlkp where oli.cart_line_key = lext.car
select oli.cart_key,lext.minor_order_number,wlkp.mf_wh_loc_id,oli.warehouse_type from tab1 oli,tab2 lext,tab3 wlkp where
oli.cart_line_key = lext.cart_line_key and
oli.warehouse_code = wlkp.warehouse_code and
oli.warehouse_type = 'DC' and
lext.fulfillment_partner_key = 106 and
lext.order_status_secondary = 2000 and
lext.date_sent_to_fp is not null and
to_char(lext.date_sent_to_fp ,'DD-MON-YYYY HH24:MI:SS') >= ('01-APR-2014 03:00:00') and
oli.active_flag = 'Y' and wlkp.active_flag = 'Y'
order by wlkp.mf_wh_loc_id
日期字段'01-APR-2014 03:00:00'是我想从双表中获取的内容。有可能这样做吗
请让我知道
问候,,
Arun如果要获取当前日期,可以使用SYSDATE
select oli.cart_key,lext.minor_order_number,wlkp.mf_wh_loc_id,oli.warehouse_type from
tab1 oli,tab2 lext,tab3 wlkp
where
oli.cart_line_key = lext.cart_line_key and
oli.warehouse_code = wlkp.warehouse_code and
oli.warehouse_type = 'DC' and
lext.fulfillment_partner_key = 106 and
lext.order_status_secondary = 2000 and
lext.date_sent_to_fp is not null and
to_char(lext.date_sent_to_fp ,'DD-MON-YYYY HH24:MI:SS') >=
(SELECT TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') FROM DUAL) and
oli.active_flag = 'Y' and wlkp.active_flag = 'Y'
order by wlkp.mf_wh_loc_id
请将日期作为日期类型进行比较。您不希望将比较建立在字母表的基础上(十二月<十一月)。它不仅非常简单,而且还可以在每条记录中保存对to_char函数的调用(一百万条记录,一百万个调用!!) 更新:如果您在4月1日凌晨3点运行查询,并且您的数据库位于同一时区,则无需执行任何操作。Sysdate将在凌晨3点取该日期的值 但是,如果您想将该值更改为今天的3.AM,只需将“SYSDATE”更改为“Trunc(SYSDATE)+3/24”即可从新的时间戳中删除时间信息并添加3小时 注:
你需要在这里澄清。你说你想要一个参数,然后你说它应该来自双表。双表没有日期字段,所以您可能想要前者?还是要使用带有日期字段的参数表?谢谢您的建议。我希望系统/数据库中的日期和时间是dd MON YYYY 03:00:00。由于查询是在每天凌晨3点手动运行的,因此感谢Madhivan的建议。我唯一的限制是时间字段应始终为凌晨3点。这是dd-MON-YYYY 03:00:00。然后,当我为建议borjab运行此修改的查询库时,使用SELECT从DUALIt中选择字符(SYSDATE,'dd-MON-YYYY 03:00:00'),表示无法识别日期格式。我唯一的限制是时间字段应始终为凌晨3点。那是当前日期的dd MON YYYY 03:00:00?但是你说这个查询将在凌晨3点执行。不是吗?现在的日期是凌晨3点,比如说今天是4月2日。那么wher条款应该包含('02-APR-2014 03:00:00'),明天它应该变成('03-APR-2014 03:00:00'),在这种情况下,更新版本应该有效。您可以使用“选择Trunc(SYSDATE)+3/24 FROM dual”测试日期计算。
select oli.cart_key,
lext.minor_order_number,
wlkp.mf_wh_loc_id,
oli.warehouse_type
from tab1 oli,
join tab2 lext on oli.cart_line_key = lext.cart_line_key
join tab3 wlkp ON oli.warehouse_code = wlkp.warehouse_code
where oli.warehouse_type = 'DC'
and lext.fulfillment_partner_key = 106
and lext.order_status_secondary = 2000
and lext.date_sent_to_fp is not null
and lext.date_sent_to_fp >= Trunc(SYSDATE) +3/24
and oli.active_flag = 'Y'
and wlkp.active_flag = 'Y'
order by wlkp.mf_wh_loc_id