We have an oracle stored procedure that originally returned 13 ref cursors. It was modifed and 3 more were added. We have another site that has 18 with total parameters passed is 22
on this one total in and out is 21. When the call is done only the original 13 ref cursors are being seen. Order of cursors is verified.
Error returned:
"ERROR","ajp-nio-127.0.0.1-8009-exec-9","05/07/2026","07:48:54","https://xyz.com","StoredProc","ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'QRY_Error'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
java.sql.SQLException: ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'QRY_Error'
This is on lucee 7.0.1.100
try {
cfstoredproc(
datasource = dsn,
procedure = PKG.QRY_Error"
) {
// IN params
cfprocparam(type="in", cfsqltype="cf_sql_numeric", value=keyValueFromSession);
cfprocparam(type="in", cfsqltype="cf_sql_numeric",value=keyValueForRecord);
cfprocparam(type="in", cfsqltype="CF_SQL_VARCHAR",value='Y');
cfprocresult(name="get_1", resultset=1);
cfprocresult(name="get_2", resultset=2);
cfprocresult(name="pc_3", resultset=3);
cfprocresult(name="pc_4", resultset=4);
cfprocresult(name="pc_5", resultset=5);
cfprocresult(name="pc_6", resultset=6);
cfprocresult(name="pc_7", resultset=7);
cfprocresult(name="pc_8", resultset=8);
cfprocresult(name="pc_9", resultset=9);
cfprocresult(name="pc_10", resultset=10);
cfprocresult(name="pc_11", resultset=11);
cfprocresult(name="pc_12", resultset=12);
cfprocresult(name="pc_13", resultset=13); --new
cfprocresult(name="pc_14", resultset=14); --new
cfprocresult(name="pc_15", resultset=15); --new
cfprocresult(name="pc_16", resultset=16);
// OUT params
cfprocparam(type="out", cfsqltype="CF_SQL_VARCHAR", variable="returnCode");
cfprocparam(type="out", cfsqltype="CF_SQL_VARCHAR", variable="returnText");
}
}
catch (any e) {
// Log the exception
writeLog(
file="lucee-storedproc-error",
type="error",
text = serializeJSON({
message = e.message,
detail = e.detail,
sqlState= e.sqlState ?: "",
dbError = e.nativeErrorCode ?: "",
where = "QRY_ERROR call"
})
);
// Determine which cursors did NOT arrive
missing = [];
for (c in expectedCursors) {
if (!structKeyExists(variables, c)) {
arrayAppend(missing, c);
}
}
// Log missing cursor names
writeLog(
file="lucee-storedproc-error",
type="error",
text="Missing REF CURSORs: " & serializeJSON(missing)
);
// Re-throw (optional but recommended)
throw;
}