Today I found a sketch of an ERD from last year when I looked at the new features of PL/Scope in version 12.2. It looked a bit complicated and also wrong. So, I decided to refactor it using SQL Developer Data Modeler and share the result.

You find the model in the plscope-utils Github project here.
The implementation provides the following views:
DBA/ALL/USER_IDENTIFIERSfor the entities “Identifier Declaration” and “DB Object Usage”DBA/ALL/USER_STATEMENTSfor the entities “Identifier Declaration”, “SQL Stmt Usage” and “SQL Statement”
For me the most interesting entity was the “Identifier Declaration”, because it helped me to understand the signature attribute/column. PL/Scope creates a signature for every database object and all its components when a database object is compiled with PL/Scope or when a referenced object cannot be compiled with PL/Scope. I call those objects “Secondary Objects”. Such objects are tables, views, materialized views, operators or sequences. Hence you find PL/Scope metadata for every table which is referenced in the PL/SQL code after compiling it with PL/Scope. Here’s an example:
SELECT usage, type, name, line, col, usage_id, usage_context_id
FROM user_identifiers
WHERE object_type = 'TABLE'
AND object_name = 'EMP'
ORDER BY line, col;
USAGE TYPE NAME LINE COL USAGE_ID USAGE_CONTEXT_ID
----------- ------ -------- ---- ---- -------- ----------------
DECLARATION TABLE EMP 1 15 1 0
DECLARATION COLUMN EMPNO 1 22 2 1
DECLARATION COLUMN ENAME 1 51 3 1
DECLARATION COLUMN JOB 1 77 4 1
DECLARATION COLUMN MGR 1 100 5 1
DECLARATION COLUMN HIREDATE 1 118 6 1
DECLARATION COLUMN SAL 1 134 7 1
DECLARATION COLUMN COMM 1 152 8 1
DECLARATION COLUMN DEPTNO 1 171 9 1The PL/Scope metadata for the table emp will be removed automatically when they are not used by “Primary Objects” (objects which can be compiled with PL/Scope) anymore. Quite nice.

1 Comment
[…] Entity Relationship Model for PL/Scope […]