declare
numberVar number := 2/3;
numberVar2 number(20,10) := 4/3;
procedure Test(Label varchar2, Value int)
is
LocalVar int := Value;
begin
dbms_output.put_line(Label || ' : ' || Value);
dbms_output.put_line(Label || ' assigned: ' || LocalVar);
end Test;
begin
Test('| const', 1/3);
Test('| number var', numberVar);
Test('|constrained number var', numberVar2);
end;
/
7.3.4, 9.2.0.8 |
| const : .3333333333333333333333333333333333333333
| const assigned: 0
| number var : .6666666666666666666666666666666666666667
| number var assigned: 1
|constrained number var : 1.3333333333
|constrained number var assigned: 1 |
10.2.0.4, 10.2.0.3 |
alter session set plsql_optimize_level=0;
| const : .3333333333333333333333333333333333333333
| const assigned: .3333333333333333333333333333333333333333
| number var : .6666666666666666666666666666666666666667
| number var assigned: .6666666666666666666666666666666666666667
|constrained number var : 1.3333333333
|constrained number var assigned: 1.3333333333 |
Подтипы одного и того же типа => передача фактического параметра по ссылке = преобразование округлением не выполняется. А теперь и присвоение оптимизировано.
Рушатся все мои устои ...