如何在oracle数据库中获取varchar2的声明大小

时间:2015-06-04 00:33:19

标签: oracle plsql oracle11g size sqldatatypes

尝试在Oracle中获取已定义变量的大小。我可能需要在声明varchar2的大小时使用数字,但不必跟踪额外的变量或数字。

示例伪代码:

declare 
  myvar varchar(42) := 'a';
begin

  /* I know the length is length(myvar) = 1. */
  /* but how do I get 42? */
  /* What is the max defined size of this variable */
  declared_size_of(myvar);  
end

我需要这个的原因是将字符串的长度lpad到声明的大小,因此它不会产生异常。

3 个答案:

答案 0 :(得分:1)

正如@Justin在评论中所说,如果使用 CHAR 数据类型,则不必明确空白填充字符串。 Oracle会将值空白填充到它的最大大小。

来自documentation

  

如果接收器的数据类型是CHAR,则PL / SQL将填充该值   达到最大尺寸。有关原始版本中尾随空白的信息   价值丢失了。

例如,

SQL> SET serveroutput ON
SQL> DECLARE
  2    myvar CHAR(42);
  3  BEGIN
  4    myvar:='a';
  5    dbms_output.put_line(LENGTH(myvar));
  6  END;
  7  /
42

PL/SQL procedure successfully completed.

SQL>

答案 1 :(得分:0)

使用异常处理的暴力技术可能非常低效:

 DECLARE
   myvar varchar2(42) := 'a'; /* using varchar */
   v_size number := null;
   x varchar(4000) := '';
   v_length number := 0;
   BEGIN
     begin
        v_length := length(myvar);
        x := myvar;
        FOR i in v_length..8001 LOOP
           myvar := myvar || ' '; /* add one space at a time until it causes an exception */
        End Loop;   
        EXCEPTION
           -- WHEN NO_DATA_FOUND THEN
              WHEN OTHERS THEN
                v_length := length(myvar);
     end;
     dbms_output.put_line('Declared size is varchar('||v_length
                          ||') and length(myvar) is '||length(trim(myvar)));
   END;

答案 2 :(得分:0)

获取最大值列输入,您只需:

SELECT MAX(LENGTH(Column)) 
FROM TableA;