Pierwsza i druga instrukcja "put_line" w poniższym bloku PL/SQL zakończy się pomyślnie, ale ostatnia zakończy się niepowodzeniem. Czemu? Czy to może być błąd?Dlaczego ostatnie polecenie PL/SQL nie działa przy użyciu komendy dbms_assert.enquote_literal?
declare
x varchar2(100);
begin
x := 'Test''';
dbms_output.put_line('x is: ' || x || ', enquoted x is: ' || dbms_assert.enquote_literal(replace(x, '''', '''''')));
x := 'Te''st';
dbms_output.put_line('x is: ' || x || ', enquoted x is: ' || dbms_assert.enquote_literal(replace(x, '''', '''''')));
x := '''Test';
dbms_output.put_line('x is: ' || x || ', enquoted x is: ' || dbms_assert.enquote_literal(replace(x, '''', '''''')));
end;
/
Błąd jest:
Error report:
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "SYS.DBMS_ASSERT", line 317
ORA-06512: at "SYS.DBMS_ASSERT", line 381
ORA-06512: at line 11
06502. 00000 - "PL/SQL: numeric or value error%s"
*Cause:
*Action:
Każdy pomysł?
Jak się wydaje, ma to coś wspólnego z pierwszym znakiem w zmiennej. Rzuca, jeśli pierwszy znak to '' ' – SomeJavaGuy
Zobacz źródło katalogu dbms_assert. –
Czuje się jak błędne zachowanie. – sstan