The Danger of Hardcoded SQL Hints in PeopleSoft & Ellucian Banner Codebases

Technical guide on why hardcoded optimizer hints in SQR, COBOL, and PL/SQL degrade application performance during upgrades, and how to manage plans via SQL Baselines.

⚡ BLUF (Bottom Line Up Front) Summary

Embedding hardcoded SQL optimizer hints (e.g. /*+ FULL(t) */ or /*+ INDEX(t idx) */) inside PeopleSoft SQR/COBOL processes or Banner PL/SQL code is a long-term anti-pattern. Hints freeze execution behavior, preventing the database cost-based optimizer from adapting when data scales or when upgrading to Oracle 19c/23c. Manage execution plans at the database layer using SQL Plan Baselines (DBMS_SPM).

Environment & Prerequisites

ComponentVersion / Specification
ERP FrameworksPeopleSoft Financials/HCM, Ellucian Banner 9.x
Database EngineOracle Database (11g – 23c)
Diagnostic ViewsV$SQL, DBA_HIST_SQLTEXT, DBMS_SPM

Introduction: Why Developers Add Hardcoded SQL Hints

When an ERP batch process (such as PeopleSoft Payroll calculation or Ellucian Banner Student Registration) experiences a sudden slowdown, developers often patch the query by embedding a hardcoded optimizer hint:

-- Legacy Developer Patch
SELECT /*+ INDEX(A PS_JOB_RUN_CNTL) FULL(B) */ 
    A.EMPLID, B.DEPTID 
FROM PS_JOB A, PS_DEPT_TBL B 
WHERE A.JOB_REQ_ID = B.JOB_REQ_ID;

While hints provide a quick quick-fix in the moment, they create permanent technical debt.


3 Reasons Hardcoded Hints Break ERP Applications

1. Plan Freezing Across Database Version Upgrades

  • The Problem: A hint designed for Oracle 11g forces Oracle 19c or 23c to use obsolete join methods (e.g., forcing a Nested Loop join when a Hash Join is 100x faster).

2. Inability to Adapt to Data Scale Growth

  • The Problem: A /*+ INDEX */ hint forced when a table has 10,000 rows becomes a disaster when the table grows to 10,000,000 rows.

3. Application Code Pollution & Loss of Maintainability

  • The Problem: Modifying vendor SQR, COBOL, or PL/SQL packages requires re-applying custom patches during every PeopleTools or Banner application release upgrade.

🔍 Check Your Environment Now (Diagnostic CTA)

Run the following SQL query against your database cursor cache to identify all active application queries that contain hardcoded optimizer hints:

-- Diagnostic: Search Cursor Cache for Hardcoded Application SQL Hints
SELECT 
    sql_id,
    parsing_schema_name,
    executions,
    elapsed_time / 1000000 AS total_elapsed_sec,
    sql_text
FROM v$sql
WHERE (sql_text LIKE '%/*+%' OR sql_text LIKE '%--+%' )
  AND parsing_schema_name NOT IN ('SYS', 'SYSTEM', 'AUDSYS')
ORDER BY elapsed_time DESC;

What to Look For:

  • Review queries returning from application schemas (SYSADM, SATURN, BANINST1).
  • Look for hardcoded /*+ FULL(...) */, /*+ INDEX(...) */, or /*+ FIRST_ROWS */ hints.

The Correct Modern Fix: SQL Plan Baselines (DBMS_SPM)

Instead of modifying ERP application source code, pin the optimal execution plan at the database layer using Oracle SQL Plan Management:

-- Create SQL Plan Baseline without modifying application code
DECLARE
  l_plans_loaded PLS_INTEGER;
BEGIN
  l_plans_loaded := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(
    sql_id          => '7f3k8m9pq2z1a',
    plan_hash_value => 3819204912,
    fixed           => 'YES'
  );
END;
/

Need assistance auditing custom SQL hints across PeopleSoft or Banner? Schedule an Async ERP Database Health Audit.