有没有办法声明具有所需大小的 varchar2 常量?
例如我希望有以下定义,而不必在括号中显式声明大小:
c_my_string constant varchar2(3) := 'abc';
有没有办法做这样的事情:
c_my_string constant varchar2(sizeof('abc')) := 'abc';
除此之外,我当然可以将常量定义为原始常量,然后使用
UTL_RAW.CAST_TO_VARCHAR2(my_raw);
将其即时转换为 varchar2
我想你可以使用本地函数,然后像变量一样引用它:
declare
function f_my_string return varchar2 is
begin
return 'abc';
end;
begin
dbms_output.put_line(f_my_string);
end;
/
不知道为什么你想让它变得那么复杂。
您可以使用
%type
作为变量(现在我检查了一下,在 11g 中不是常量,但这在以后的版本中已修复)。
declare
l_my_string varchar2(3) := 'abc';
c_clone constant c_my_string%type := 'def';
begin
dbms_output.put_line(c_clone);
end;
/
从 12c 开始,您可以使用常量作为长度:
declare
c_length constant number := 3;
c_my_string constant varchar2(c_length) := 'abc';
c_clone constant c_my_string%type := 'abc';
begin
dbms_output.put_line(c_clone);
end;
/