Probably not in the way you intend.
When you compile a SQL stored procedure, you can opt not to store the source code - but people can still access the DDL.
Other than that...
You can theoretically limit access to the "normal" DBC metadata views (revoke from PUBLIC and grant to certain users / databases / roles) and force everyone (else) to configure the "X views" driver option. That way they can only access the definition if they hold some access right on the object. But be aware that this requires client side configuration changes, adds overhead, and some third-party tools may query DBC views directly (which would fail) rather than using the metadata API calls (which the driver would map to X views). It's not too bad if you impose this restriction from "day 1", but tends to be a major effort to change after the fact.
When an SP is created with NO SPL a SHOW results in 5535 No SPL source text available. And dbc.tvm.RequestText never stores info for SPs.
Thanks for the correction. I was thinking "parameter metadata" (e.g. HELP PROCEDURE); should not have said "DDL". The actual CREATE statement is not stored except as part of the SPL text.
Depends on how you are compiling the Stored Procedure.
In BTEQ, add WITH NOSPL to the end of the .COMPILE statement.
For ODBC: set ODBC configuration dialog Advanced Option ProcedureWithSPLSource (Windows), or ini file (non-WIndows) / connection string keyword SplOption=N
For JDBC: use connection string keyword SP_SPL=NOSPL