【问题标题】:Oracle get column data sizeoracle获取列数据大小
【发布时间】:2020-04-14 18:11:10
【问题描述】:

我是 Oracle db 的新手,我想知道我是否可以找出数据类型和数据大小... 我的意思是:假设我在表“产品”中有类型为 varchar2(20) 的列“位置”。 我可以写一个查询结果“varchar2”和“20”吗?

谢谢!

【问题讨论】:

    标签: oracle types


    【解决方案1】:

    查看user_tab_columns

    select data_type, data_length 
      from user_tab_columns
     where table_name = 'PRODUCTS'
       and column_name = 'LOCATION';
    

    【讨论】:

      【解决方案2】:

      您是否需要找出列的类型和大小以了解数据,或者您正在编写一个需要在运行时知道它的程序?

      如果您只需要了解它,在 SQLPlus 中输入desc tablename 将告诉您有关表中的列。

      如果您需要以编程方式找出类型和大小,您使用的是什么语言...PL/SQL?爪哇?

      请注意,从 USER_TAB_COLUMNS 中选择只会列出您自己架构中的表中的列。对于其他表,您需要查看 ALL_TAB_COLUMNS(或 DBA_TAB_COLUMNS,如果 DBA 允许您访问它)。请注意,您的雇主或客户可能不允许针对其中任何一个编译存储过程或包。

      【讨论】:

        【解决方案3】:
        SELECT CHAR_LENGTH FROM USER_TAB_COLUMNS WHERE TABLE_NAME = <TABLENAME> AND COLUMN_NAME = <COLUMNNAME>;     
        

        【讨论】:

        • 我忘记在 Select 子句中添加 DATA_TYPE。
        【解决方案4】:

        这个问题的答案对我很有用。但是,当列类型为NVARCAHR2 时,在取data_length 时需要考虑一个重要的区别。为 NVARCHA2 列返回的 data_length 加倍。

        这是由于使用了字符编码。 Oracle documentation 说:

        对于 AL16UTF16,字节数最多可以是两倍大小 UTF8 编码的编码和三倍大小。

        因此,理想的查询如下:

        select table_name, column_name, 
        data_type, NVL(char_col_decl_length, data_length) 
        from user_tab_columns where table_name='T51_NOCOMP';
        

        【讨论】:

          【解决方案5】:

          我从 sqlplus 为 oracle 执行以下操作:

          SELECT COLUMN_NAME,DATA_TYPE,DATA_LENGTH 
          FROM ALL_TAB_COLUMNS
          WHERE TABLE_NAME = 'YOUR_TABLE_NAME'
          AND COLUMN_NAME = 'YOUR';`
          

          希望它也对你有用!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多