The next script causes
ORA-00900: invalid SQL statement
ORA-00600: internal error code, arguments: [qctVCO : bfc], [60], [0], [1], [873], [1], [2], [1279], [], [], [], []
The issue is reproducible on the FREE edition 23.5, 23.6 and Enterprise Edition 23.6.
-- show versions
set serveroutput on size unlimited
select * from v$version;
-- works
drop domain if exists dbl_semantic_version force;
-- works
create domain dbl_semantic_version as varchar2(60 byte)
constraint dbl_semantic_version_has_major_minor_patch_ck check (regexp_like(dbl_semantic_version, '^\d{1,6}\.\d{1,6}\.\d{1,6}$'))
display dbl_semantic_version;
-- works
with
strings (string_col) as (values
('1.9.0'),
('1.10.0'),
('1.11.0')
),
base as (
select string_col,
cast(string_col as dbl_semantic_version) as domain_col -- cause ORA-900/ORA-600 only in PL/SQL
from strings
)
select *
from base;
-- causes ORA-00900: invalid SQL statement
-- ORA-00600: internal error code, arguments: [qctVCO : bfc], [60], [0], [1], [873], [1], [2], [1279], [], [], [], []
-- reproducible in 23.5 and 23.6
declare
c_actual sys_refcursor;
begin
for r in (
with
strings (string_col) as (values
('1.9.0'),
('1.10.0'),
('1.11.0')
),
base as (
select string_col,
cast(string_col as dbl_semantic_version) as domain_col -- cause ORA-900/ORA-600 only in PL/SQL
from strings
)
select *
from base
) loop
dbms_output.put_line(r.string_col);
end loop;
end;
/
Here's the output produced in an OCI instance via Database Actions (same with any client on the FREE editions):
BANNER BANNER_FULL BANNER_LEGACY CON_ID
----------------------------------------------------------------------- -------------------------------------------------------------------------------------------- ----------------------------------------------------------------------- ------
Oracle Database 23ai Enterprise Edition Release 23.0.0.0.0 - Production Oracle Database 23ai Enterprise Edition Release 23.0.0.0.0 - Production
Version 23.6.0.24.11 Oracle Database 23ai Enterprise Edition Release 23.0.0.0.0 - Production 0
Elapsed: 00:00:00.005
1 rows selected.
Domain DBL_SEMANTIC_VERSION dropped.
Elapsed: 00:00:00.007
Domain DBL_SEMANTIC_VERSION created.
Elapsed: 00:00:00.007
STRING_COL DOMAIN_COL
---------- ----------
1.9.0 1.9.0
1.10.0 1.10.0
1.11.0 1.11.0
Elapsed: 00:00:00.007
3 rows selected.
ORA-00900: invalid SQL statement
ORA-00600: internal error code, arguments: [qctVCO : bfc], [60], [0], [1], [873], [1], [2], [1279], [], [], [], []
https://docs.oracle.com/error-help/db/ora-00900/
Error at Line: 37 Column: 0
This is a simplified version of a real case where I want to test a domain with utPLSQL. The workaround is to use dynamic SQL, since the SQL used in the for loop works outside of PL/SQL.