I have used stored procedures on MS SQL server and Oracle since Impromptu version 3.5. The original API call was used only in the macro language and was kind of klunky in that it often required the use of a null string (""

or a zero appended to the end of passed parameters to work. When Cognos stopped allowing the API use and went to using a direct query in Impromptu I played with it for a while before giving up due to inconsistent results and limitations created by the need to have a specific catalog open when calling the report.
What I have used on both platforms for over three years in a straight forward SQL ODC call in the macro language. The syntax for MS is:
connection = SQLOpen("DSN=ODBC_DSN; UID=Username; PWD=yourpwd", outputStr, prompt:=5)
Query1 = "EXECUTE proc_name '"+sFyCd+"', "+Cstr(iPdNo)+", '"+sModBy+"', '"+sLike+"', "+Cstr(sStatus)+", '"+sInUseBy+"'"
retcode = SQLExecQuery(connection,Query1+""

retcode = SQLRetrieve(connection,RetVal)
retcode = SQLClose(connection)
For Oracle the syntax is a little different:
connection = SQLOpen("DSN=ODBC_DSN; UID=Username; PWD=yourpwd", outputStr, prompt:=5)
Query1 = "BEGIN proc_name('"+FY+"',"+Cstr(Pd)+",'"+Org
Query1 = Query1+"','"+BudCode+"','"+FrcCode+"','"+ModBy$+"'); END;"
retcode = SQLExecQuery(connection,Query1+""

retcode = SQLClose(connection)
In each case I do not retrieve data directly into a report, but populate a reporting table that is then called via a report in a subsequent step in the macro. I use a control table to write procedure success/failure information as the SQL ODBC options in the macro language do not support OUTPUT parameters.
There is a requirement to reduce all of the passed parameters to strings, but this has never caused me problems.
These ALWAYS work and have never given any trouble, as seen immune to Cognos' monkeying around with their direct stored procedure support.