# SQLCODE -444: User program could not be found

Source: https://wndsoftware.com/mainframe-errors/sqlcode-444

### SQLCODE -444: User program could not be found

SQLCODE -444 (SQLSTATE 42724) means Db2 found the stored procedure or function in SYSIBM.SYSROUTINES, but the load module named in its EXTERNAL_NAME could not be found. The module isn't in a library the routine's WLM address space loads from, or the name is wrong.


#### Other names for this code

Also written as `SQL -444`, `SQLCODE=-444`, `SQLCODE = -444`, `db2 -444`, `sqlstate 42724`, `SQL0444N`, `db2 user program could not be found`, `SQL0444`, `stored procedure 444`.


### What it means

An external stored procedure or user-defined function is a load module, written in COBOL, PL/I, C or assembler, that Db2 runs in a WLM-established address space. The routine's catalog row in SYSIBM.SYSROUTINES records the module name (EXTERNAL_NAME) and the WLM application environment (WLM_ENVIRONMENT). When a CALL or function reference arrives, Db2 sends the work to an address space for that environment, which tries to load the module from its STEPLIB.

If the module isn't there, Db2 returns -444 with the module name. The definition is fine as far as the catalog goes. The problem is between the name in the catalog and the libraries on disk.

Native SQL procedures have no load module, so they never get -444.


### Common causes

- The module was never link-edited into a library in the STEPLIB of the WLM address space's JCL, or it went into the test library and not the production one.
- EXTERNAL NAME in the CREATE or ALTER PROCEDURE doesn't match the load module name, through a typo or a rename.
- The routine was moved to a different WLM ENVIRONMENT whose JCL has a different STEPLIB.
- A vendor or IBM tool procedure needs its own load library added to the WLM STEPLIB, and the install step was missed.
- A CALL with a three-part name reaches a remote Db2 for LUW server where the procedure's library can't be found. IBM notes that -440 or -444 can result.


### How to find the problem

- Get the routine's details with `SELECT SCHEMA, NAME, EXTERNAL_NAME, WLM_ENVIRONMENT FROM SYSIBM.SYSROUTINES WHERE NAME = 'PAYCALC'`.
- Display the application environment with `D WLM,APPLENV=DB2PWLM1` to find the procedure name of the address space it starts.
- Look at that started task's JCL in SDSF or the PROCLIB and list the STEPLIB data sets.
- Check that a member with the EXTERNAL_NAME exists in one of those libraries.
- `-DISPLAY PROCEDURE(PAYSCHM.PAYCALC)` shows the routine's status and WLM environment.


### How to fix it

- Link-edit the module into a library in the STEPLIB of the right WLM address space.
- If the name is wrong, correct it with `ALTER PROCEDURE ... EXTERNAL NAME` or `ALTER FUNCTION ... EXTERNAL NAME`.
- If the library is missing from STEPLIB, add it and refresh the environment with `V WLM,APPLENV=DB2PWLM1,REFRESH` so new address spaces use the new JCL.
- For a routine that is not APF-authorized, IBM notes the Db2 load libraries may need to be in the STEPLIB too, not only in LINKLIST.


### What it looks like


```text
DSNT408I SQLCODE = -444, ERROR:  USER PROGRAM PAYCALC COULD NOT BE FOUND
DSNT418I SQLSTATE   = 42724 SQLSTATE RETURN CODE
```


### IBM documentation

[IBM documentation: -444](https://www.ibm.com/docs/en/db2-for-zos/13.0.0?topic=codes-444). Use the documentation for your installed release.

[Report a correction to WND Software](https://wndsoftware.com/contact#message).

Technical reviewer: [Albert Joseph](https://wndsoftware.com/authors/albert-joseph), WND Software.

Last reviewed 2026-10-18 by the WND Software team. Written in our own words. For the full reference, check IBM’s Db2 for z/OS documentation for your release.


### Related codes

[SQLCODE -471 Routine invocation failed Read →](https://wndsoftware.com/mainframe-errors/sqlcode-471)
[SQLCODE -440 No routine with compatible arguments Read →](https://wndsoftware.com/mainframe-errors/sqlcode-440)
[S806 Program not found Read →](https://wndsoftware.com/mainframe-errors/s806)
[CSV003I Requested module not found Read →](https://wndsoftware.com/mainframe-errors/csv003i)
[SQLCODE -805 Package not found in plan Read →](https://wndsoftware.com/mainframe-errors/sqlcode-805)

### Questions


#### I relinked the module but the procedure still runs the old code. Why?

That isn't -444, but it's a common next step. A running WLM address space can keep the old copy loaded. Refresh the application environment with V WLM,APPLENV=name,REFRESH.


#### Can a native SQL procedure get -444?

No. Native SQL procedures run inside Db2 and have no load module. -444 is for external procedures and functions.


#### What does SQL0444N mean on Db2 for LUW?

It has the same SQLSTATE, 42724, but on LUW the routine's library or path can't be accessed, and the message adds a reason code that says why.

[Db2 SQLCODEs](https://wndsoftware.com/mainframe-errors/db2-sqlcodes) · [SQLCODE -440](https://wndsoftware.com/mainframe-errors/sqlcode-440) · [SQLCODE -471](https://wndsoftware.com/mainframe-errors/sqlcode-471)

[← All error codes](https://wndsoftware.com/mainframe-errors/)
