下面的PL/SQL塊中的第一個和第二個「put_line」語句會成功,但最後一個失敗。爲什麼?它可能是一個錯誤?爲什麼最後的PL/SQL語句使用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;
/
的錯誤是:
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:
任何想法?
因爲它似乎與變量中的第一個字符有關。如果第一個字符是'',則拋出它。 – SomeJavaGuy
查看dbms_assert的源代碼。 –
感覺像馬車行爲。 – sstan