尝试在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到声明的大小,因此它不会产生异常。
答案 0 :(得分:1)
正如@Justin在评论中所说,如果使用 CHAR 数据类型,则不必明确空白填充字符串。 Oracle会将值空白填充到它的最大大小。
如果接收器的数据类型是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;