【问题标题】:how to know the datatype of an output value in oracleoracle如何知道输出值的数据类型
【发布时间】:2016-08-29 09:44:28
【问题描述】:

假设我正在运行以下查询,它给了我以下输出:

查询:SELECT SYSDATE FROM DUAL;

输出:29-AUG-16

我们知道 SYSDATE 返回“日期”类型的值。但是如何在输出窗口中看到该数据类型?

假设当我用某个函数查询时说'type()'SELECT TYPE(SYSDATE) FROM DUAL,它会给出SYSDATE的数据类型

输出:DATE

有没有像“type()”这样的内置方法或者可以给我数据类型的东西?

注意它不一定是SYSDATE,它可以是任何变量或值,例如SELECT 'HELLO' FROM DUAL

【问题讨论】:

    标签: oracle output sqldatatypes


    【解决方案1】:

    你可以使用DUMP函数:

    SELECT DUMP(SYSDATE, 1016) FROM DUAL;
    
    Typ=13 Len=8: e0,7,8,1d,b,31,1c,0
    

    您可以在此处查找数据类型:Oracle Built-in Datatypes

    如果您想知道为什么 Typ=13 没有出现在此表中,请查看:datatype 13

    【讨论】:

    • 只是为了评论这个特定情况,您可能会注意到内存中的 DATE 表示与存储表示不同(当您转储列值而不是 SYSDATE 函数时)。在内存中类型 13 有 8 个字节,而存储类型 12 只有 7 个字节。
    • @Domscheit 这个 1016 return_fmt 是什么?你能解释一下吗?或演示文稿的任何文档?
    • @Hakuna-Matata - 如果您可以访问 Google,请搜索“Oracle dump()”(或者更好的是,在 Oracle 输入您的版本号之后,例如在我的情况下,我会搜索“ Oracle 11.2 dump()".) 这将带您直接进入文档。
    • 我什至在我对DUMP 文档(蓝色文本)的回答中添加了一个链接!
    • @Domscheit link 在这里我得到这样的语句:“默认情况下,返回值不包含字符集信息。要检索 expr 的字符集名称,请在前面的任何格式值中添加 1000 . 例如,return_fmt 为 1008 以八进制返回结果,并提供 expr 的字符集名称。我问了这个解释,就像这里提到了1008,它意味着1016,它来自哪里?并且您的“蓝色文本”不是指转储()或我问的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多