Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要PL/SQL脚本的想法吗_Sql_Date - Fatal编程技术网

需要PL/SQL脚本的想法吗

需要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

我已经从一组表中提取了数据,这些表需要一个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.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