【问题标题】:Getting DATE value from oracle forms using USER EXIT使用 USER EXIT 从 oracle 表单中获取 DATE 值
【发布时间】:2020-05-21 04:42:42
【问题描述】:

我正在尝试使用 EXEC TOOLS GET 将 ORACLE FORMS 中的日期字段检索到 char 变量中,如下所示:

EXEC TOOLS GET filter.generation_depuis INTO :qstrGenerationDepuis;

当我尝试显示变量 qstrGenerationDepuis 时,我得到了这个值:

27-JANV.-2 

代替:

27/01/2020

知道 qstrGenerationDepuis 变量被声明为 10 个字符的字符串。

我应该如何检索用户出口中的字段以获得正确的日期格式?

用户出口文件的扩展名为.pcs

非常感谢。

【问题讨论】:

    标签: oracle oracleforms oracle-pro-c


    【解决方案1】:

    两步程序怎么样?

    先获取值:

    EXEC TOOLS GET filter.generation_depuis INTO :qstrGenerationDepuis;
    

    将项目设置为27-JANV.-2

    然后将其转换为所需的格式,但首先你必须知道你得到了哪种格式。这是法语,不是吗?看起来像27th of January of ... 哪一年? -2 是什么?它可以是 2020 年到 2029 年之间的任何一年,因为变量的长度为 10 个字符:

    SQL> select to_char(date '2020-01-27', 'dd-MON-yy', 'nls_date_language = french') datum from dual;
    
    DATUM
    -----------
    27-JANV.-20
             ^ tenth character is "2"; "0" is lost
    12345678901
    

    如果我们假设这是当前年份,那么你可以尝试这样的事情:

    • 将字符串27-JANV.-2 转换为日期,方法是添加当前年份的最后一位数字(substr 就是这样做的)
    • to_char 应用于新的日期值27-JANV.-20,并带有所需的格式掩码

      SQL> select to_char(to_date('27-JANV.-2' || substr(to_char(sysdate, 'yyyy'), -1),
        2                         'dd-mon-rr',
        3                         'nls_date_language = french'),
        4                 'dd/mm/yyyy') result
        5  from dual;
      
      RESULT
      ----------
      27/01/2020
      

    并不是说这是不可能的(显然),但是 - 你宁愿

    • filter.generation_depuis返回所需的格式掩码
    • 或者,如果这不可行,请将项目/变量长度扩大到至少 11 个字符,因为您会丢失最后一个数字

    请注意,您可能不必使用nls_date_language 参数;我愿意,因为我的数据库是克罗地亚语的,而且我们的格式与你们的完全不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 2018-07-07
      • 2012-10-21
      相关资源
      最近更新 更多