GeezerVison is showing github.com — ORA-20204 "suite does not exist": non-owner schema suite discovery fails on Oracle 23ai (23.26.1); UT_TRIGGER_ANNOTATION_PARSING does not register (v3.2.2) · Issue #1360 · utPLSQL/utPLSQL
ORA-20204 "suite does not exist": non-owner schema suite discovery fails on Oracle 23ai (23.26.1); UT_TRIGGER_ANNOTATION_PARSING does not register (v3.2.2) #1360DescriptionSummary
On a clean utPLSQL v3.2.2 install against Oracle AI Database 23ai, build 23.26.1, a trivial
--%suite owned by a non-owner schema (the schema is not UT3) is not resolved by
UT_SUITE_MANAGER: running ut.run as that schema returns ORA-20204 "suite does not exist".
In the same environment the annotation DDL trigger UT_TRIGGER_ANNOTATION_PARSING does not appear
to register / fire, so the annotation cache is never populated for the non-owner schema's objects.
The same install pattern works on earlier 19c/21c environments in our experience; the symptom appears
specific to the 23.26.1 build (newer than the 23ai range utPLSQL appears to have been tested against).
Environment
| Item |
Value |
| Oracle Database |
Oracle AI Database 23ai, build 23.26.1 (single CDB + single PDB; self-managed, not Autonomous) |
| utPLSQL |
v3.2.2 (latest GA, 2026-05-24); clean install — 380 objects, 0 INVALID |
| Framework owner |
UT3 |
| Test/suite owner |
a separate application schema (non-owner) |
| FIPS |
DBFIPS_140 = FALSE (FIPS not enabled) |
| Crypto sanity |
DBMS_CRYPTO SHA-1 and SHA-256 both work; only MD5 fails (ORA-28827). utPLSQL's ut_utils.get_hash defaults to dbms_crypto.hash_sh256, which works here — so the hashing path is not failing. |
Steps to reproduce
- Install utPLSQL v3.2.2 headless as owner
UT3 (install.sql), then run the official
per-user grants for the non-owner application schema (create_grants.sql / create_synonyms.sql),
i.e. EXECUTE on the UT3 program units/types and the public synonyms.
- Connect as the non-owner application schema and create a trivial suite:
CREATE OR REPLACE PACKAGE demo_suite IS
--%suite(Demo)
--%test(trivial passes)
PROCEDURE trivial;
END;
/
CREATE OR REPLACE PACKAGE BODY demo_suite IS
PROCEDURE trivial IS BEGIN ut.expect(1).to_equal(1); END;
END;
/
- Still as the non-owner schema:
BEGIN ut.run('DEMO_SUITE'); END;
/
Expected
The Demo suite is discovered and the trivial test runs green.
Actual
ORA-20204: suite DEMO_SUITE does not exist
ORA-06512: at "UT3.UT_SUITE_MANAGER", line ...
Inspecting further: UT_TRIGGER_ANNOTATION_PARSING does not register for the non-owner schema, so the
annotation cache is never populated, and UT_SUITE_MANAGER finds no suite. A manual
ut_annotation_manager.rebuild_annotation_cache(...) for the schema does not repair discovery.
UT_RUNNER, UT_SUITE_MANAGER, and UT_ANNOTATION_MANAGER are all AUTHID CURRENT_USER.
What we have already ruled out
Question / request
Is non-owner-schema suite discovery expected to work on the 23.26.1 build, and is there a known
fix or workaround? If this is an unaddressed regression on the newer 23ai build, we are happy to provide
any further diagnostics (DDL-trigger registration state, annotation-cache contents, UT_SUITE_CACHE
rows for the schema, full version banner) to help reproduce. Activityjgebal commented on Jun 4, 2026 Hello @DahouseAI
Thank you for reporting the issue and providing comprehensive context.
I see one obvious mistake in the provided example. The package is not a suite package as there is no empty lines between suite and test annotations.
Your example says:
CREATE OR REPLACE PACKAGE demo_suite IS
--%suite(Demo)
--%test(trivial passes)
PROCEDURE trivial;
END;
/
CREATE OR REPLACE PACKAGE BODY demo_suite IS
PROCEDURE trivial IS BEGIN ut.expect(1).to_equal(1); END;
END;
/
But correct suite would be:
CREATE OR REPLACE PACKAGE demo_suite IS
--%suite(Demo)
--%test(trivial passes)
PROCEDURE trivial;
END;
/
CREATE OR REPLACE PACKAGE BODY demo_suite IS
PROCEDURE trivial IS BEGIN ut.expect(1).to_equal(1); END;
END;
/
Please let me know if it is only a typo in the issue example or if it's actually solving your problems.
Can you please provide information about exact DB version and patch level?
If I were to reproduce the issue, would it be sufficient to use the 23 FREE version provided by @gvenzl ?
It is possible that it is an issue with Oracle database itself, but I can't tell without further investigation. jgebal commented on Jun 4, 2026 You mention in your example connecting as non-owner schema.
What do you mean exactly by non-owner
Do you refer to a user who:
- owns the unit test package but doesn't own the framework?
- doesn't own the unit test package and doesn't own the framework?
From framework perspective. Owner is the owner of unit test package (not the framework).
It would be best if you would provide example with the test-owner schema name provided.
When running the tests, I assume the it.run command is invoked from the owner of the unit-tests schema. Correct? DahouseAI commented on Jun 4, 2026 Thank you — you were exactly right. Adding the blank line between --%suite and --%test fixed it: the suite is discovered and runs green as our non-owner application schema on Oracle AI Database 23ai build 23.26.1 (utPLSQL v3.2.2.4414). Our original report's package was missing that separator, so it was never registered as a suite. To your follow-up: the test-package owner is a dedicated application schema (not UT3), and ut.run is invoked as that same schema via the standard per-user grants/synonyms — that path works correctly on 23.26.1. Apologies for the noise from a malformed reproduction; no framework or database issue here. Happy for this to be closed, and thanks for the quick, precise help.
MetadataMetadataDevelopmentNo branches or pull requestsIssue actions
|