sql - 获取列中允许的最大长度 |甲骨文

标签 sql oracle maxlength

如何获取 varchar2 列中允许的最大和最小长度。 我必须测试来自某个远程数据库的临时表的传入数据。并且要针对特定​​列测试每一行值是否具有可以设置到该列中的最大值或最小值。

所以我要使用其架构详细信息来获取列规范。我确实为此创建了一个proc:

PROCEDURE CHK_COL_LEN(VAL IN VARCHAR2,             
                       MAX_LEN IN NUMBER :=4000,
                       MIN_LEN IN NUMBER :=0,
                       LEN_OUT OUT VARCHAR2)
        IS
            BEGIN
               IF LENGTH(VAL)<MIN_LEN THEN
                    LEN_OUT := 'ERROR';
                    RETURN;
               ELSIF LENGTH(VAL)>MAX_LEN THEN
                    LEN_OUT := 'ERROR';
                    RETURN;
               ELSE
                    LEN_OUT := 'SUCCESS';
                    RETURN;
               END IF;
            END;
END CHK_COL_LEN;

但问题是,它不可重用,而且有点硬编码。我必须显式发送每个值的 MAXMIN 值以及要检查的数据。

因此,在 proc 调用中,类似于:

CHK_COL_LEN(EMP_CURSOR.EMP_ID, 5, 1, LEN_ERROR_MSG);

我想要类似的东西:(如果存在这样的东西!)

CHK_COL_LEN(EMP_CURSOR.EMP_ID, 
               EMP.COLUMN_NAME%MAX_LENGTH, 
               EMP.COLUMN_NAME%MIN_LENGTH, 
               LEN_ERROR_MSG)

提前致谢。

编辑

select max(length(col)) from table;

这是一个解决方案,但我再次必须每次运行此查询来设置 MAX 和 MIN 值的两个变量。当有大约 32 个表,每个表有 5-8 个 varchar2 列,每个表中平均行数约为 40k-50k 时,为每个值运行额外的两个查询,然后设置 2 个变量将导致性能显着损失

最佳答案

您可以查询表“user_tab_columns table”来检索特定表的元数据信息:

SELECT 
   COLUMN_NAME, DATA_LENGTH, DATA_PRECISION 
FROM 
   user_tab_columns 
WHERE 
   t.table_name IN ('<YOURTABLE>');

使用此信息,您可以直接在存储过程中查询元数据:

...
SELECT 
   CHAR_LENGTH INTO max_length 
FROM 
   user_tab_columns 
WHERE 
   table_name = '<YOURTABLE>' AND COLUMN_NAME = '<YOURCOLUMN>';

...

获取表/列的最大长度的示例过程:

create or replace PROCEDURE GET_MAX_LENGTH_OF_COLUMN(    
                       tableName IN VARCHAR2,
                       columnName IN VARCHAR2,
                       MAX_LENGTH OUT VARCHAR2)
        IS
            BEGIN

            SELECT CHAR_LENGTH INTO MAX_LENGTH 
            FROM user_tab_columns 
            WHERE table_name = tableName AND COLUMN_NAME = columnName;            

END GET_MAX_LENGTH_OF_COLUMN;

关于sql - 获取列中允许的最大长度 |甲骨文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27483766/

相关文章:

mysql - 根据 Group By 中的最大列选择行

mysql查找具有相同时间戳的值和类型并插入到新表中

mysql - SQL 返回第 1 列包含 X 和 Y 的行

oracle - Hibernate自定义类型映射设置字符长度

JavaScript len 函数

mysql - 对表结构感到困惑

php - 启用 PDO OCI

sql - 如何在 VIEW 输出子句中保留 "*"以便列跟踪表更改?

android - Jelly Bean WebView 不能很好地使用文本框的 HTML maxlength 属性

r - 限制数据帧中的小数位数 (R)