docs: public static String printUserProcedureDetail(Procedure proc) {
          PureJavaCrc32C crc = new PureJavaCrc32C();
          StringBuilder sb = new StringBuilder();
          sb.append("Procedure:" + proc.getTypeName()).append("\n");
          for (Statement stmt : proc.getStatements()) {
              // compute hash for determinism check
              String sqlText = stmt.getSqltext();
              crc.reset();
              crc.update(sqlText.getBytes(Constants.UTF8ENCODING));
              int hash = (int) crc.getValue();
              sb.append("Statement Hash: ").append(hash);
              sb.append(", Statement SQL: ").append(sqlText);
              for (PlanFragment frag : stmt.getFragments()) {
                  byte[] planHash = Encoder.hexDecode(frag.getPlanhash());
                  long planId = ActivePlanRepository.getFragmentIdForPlanHash(planHash);
                  String stmtText = ActivePlanRepository.getStmtTextForPlanHash(planHash);
                  byte[] jsonPlan = ActivePlanRepository.planForFragmentId(planId);
                  sb.append("Plan Stmt Text:").append(stmtText);
                  sb.append(", Plan Fragment Id:").append(planId);
                  sb.append(", Json Plan:").append(new String(jsonPlan));
              }
              sb.append("\n");
          }
          return sb.toString();
      }