使用utl_file

时间:2019-05-28 11:25:42

标签: plsql utl-file oracle-ebs

我正在使用utl_file来写入csv文件。数据还包括日期列。这里的问题是

对于一位数字,当将数据插入csv文件中时,第0天将被删除。    例如-将13年6月7日作为13年6月7日插入,如何确保0停留?

我已经to_charconcat“”,但我仍然只获得一位数字日期。生成的csv文件由第三方系统使用,因此无法csv中进行任何更改。

我正在使用EBS 12.1.3。

谢谢

PL / SQL代码段

   concat(concat('"',lv_proj_start_date),'"')    ||','||
   concat(concat('"',lv_proj_start_date_plus_1),'"')     ||','||

我希望csv中的日期输出像07-Jun-13

但是在csv文件中,o / p为7-Jun-13

1 个答案:

答案 0 :(得分:0)

假设两列均为DATE格式,则需要将日期明确转换为所需的任何格式,例如:

'"' || to_char(lv_proj_start_date, 'dd-Mon-yy', 'nls_date_language=english') || '","' 
    || to_char(lv_proj_start_date_plus_1, 'dd-Mon-yy', 'nls_date_language=english') || '",'

我还转换了您的CONCAT函数调用以使用串联运算符||,因为这更容易阅读。我还尽可能结合了文本字符串。

我还使用了to_char()的可选第三个参数来将日期语言显式设置为英语,从而使其独立于NLS。

最后一点:您是否绝对必须输出两位数年份的日期?时下首选4位数字,发布Y2K!


ETA:这是一个显示输出正确的示例:

DECLARE
  lv_proj_start_date DATE := to_date('07/07/2019', 'dd/mm/yyyy');
  lv_proj_start_date_plus_1 DATE := lv_proj_start_date + 1;

  v_str VARCHAR2(4000);
BEGIN
  v_str := '"Testing","' || to_char(lv_proj_start_date, 'dd-Mon-yy', 'nls_date_language=english') || '","' 
                          || to_char(lv_proj_start_date_plus_1, 'dd-Mon-yy', 'nls_date_language=english') || '"';

  dbms_output.put_line(v_str);
END;
/

"Testing","07-Jul-19","08-Jul-19"