版本:11.2.0.2.0
我想验证我在手册中再次阅读的以下断言:
与NUMBER数据类型和NUMBER子类型相比,PLS_INTEGER数据类型具有以下优势:
Run Code Online (Sandbox Code Playgroud)PLS_INTEGER values require less storage.
我正在寻找有效使用的字节.
我知道Oracle内置数据类型和PL/SQL数据类型.我再次阅读文档中的特定部分:
我已经回顾了一些有用的功能: visze,dump(等等:length,lengthb).我在这里以及其他论坛/博客中搜索过,即使过去看起来很明显,我也有点陷入困境.
我的虚拟程序(visize函数不会显示pls_integer的任何有效值,因为Tony Andrews在下面的答案中说明的原因(注释13/07/11)
create or replace procedure TestSize
(
testPlsInteger in pls_integer
,testNumber in number
) is
sizePlsInteger pls_integer;
sizeNumber pls_integer;
FORMAT_DIM constant pls_integer := 15;
begin
select vsize(testPlsInteger), vsize(testNumber)
into sizePlsInteger, sizeNumber
from dual;
dbms_output.put_line('number:' || rpad(testPlsInteger, FORMAT_DIM)
||' PLS_INTEGER SIZE:' || rpad(sizePlsInteger, FORMAT_DIM)
|| ' NUMBER SIZE:' || sizeNumber);
end;
Run Code Online (Sandbox Code Playgroud)
测试
begin
TestSize(2147483647, 2147483647);
TestSize(1, …
Run Code Online (Sandbox Code Playgroud) 我有一个查询,它使用两个子查询的输出(R1,R2)来划分它们:
select a.R1/b.R2*100.0 as Result
from
(query1) a,
(query2) b
Run Code Online (Sandbox Code Playgroud)
除法输出是(十进制)数字以及R1,R2输出.
我想在结果中添加'%'符号(即10,75%),但使用类似下面的解决方案,会返回错误01722 =无效的数字
select cast(cast(a.R1/b.R2*100.0 as decimal(10,2)) as varchar(10)) + '%' as Result
from
(query1) a,
(query2) b
Run Code Online (Sandbox Code Playgroud)