public static StoredProcedure CreateStoredProcedure(PLSQLProcedure plsqlProcedure)
        {
            StoredProcedure storedProc = null;

            if (plsqlProcedure != null &&
                plsqlProcedure.Status == ProcedureStatus.Valid)
            {
                // Add procedures found in package specification that was parsed
                storedProc = new StoredProcedure();

                // Set the name of the procedure
                storedProc.ProcedureName = plsqlProcedure.Name;

                // If returning a ref cursor
                storedProc.IsReturningRefCursor   = false;
                storedProc.RefCursorParameterName = string.Empty;

                // Counter to set sequence for parameters
                // First parameter has sequence = 1
                int paramSequenceCounter = 1;

                foreach (PLSQLProcedureParameter param in plsqlProcedure.Parameters)
                {
                    ProcedureProperty storedProcParam = ProcedurePropertyHelper.CreateProcedureProperty(param);

                    // Sequence of the parameters
                    storedProcParam.Sequence = paramSequenceCounter;

                    // Set the parent stored procedure for the parameter
                    storedProcParam.StoredProcedure = storedProc;

                    // Add the property to the stored procedure
                    storedProc.Properties.Add(storedProcParam);

                    // Add one to sequence counter
                    paramSequenceCounter++;
                }

                // Check if function.
                if (plsqlProcedure.IsFunction)
                {
                    // Add the return type as a property to the stored procedure.
                    ProcedureProperty storedProcParam = new ProcedureProperty();

                    // Add a name for the parameter
                    storedProcParam.Name = "Result";

                    // Length, precision is set to null since it can't be fetched here.
                    storedProcParam.Length    = null;
                    storedProcParam.Precision = null;
                    storedProcParam.Scale     = null;

                    // Set parameter of type function result
                    storedProcParam.PropertyType = DbPropertyType.Result;

                    // Sequence of the parameters
                    storedProcParam.Sequence = paramSequenceCounter;

                    // Set the parent stored procedure for the parameter
                    storedProcParam.StoredProcedure = storedProc;

                    // Not supported.
                    storedProcParam.Text = string.Empty;

                    storedProcParam.DbDatatype     = string.Empty;
                    storedProcParam.OriginalTable  = string.Empty;
                    storedProcParam.OriginalColumn = string.Empty;

                    if (plsqlProcedure.FunctionReturnType == FunctionReturnType.DataType)
                    {
                        storedProcParam.DbDatatype = PLSQLProcedure.GetFunctionReturnDBTypeAsString(plsqlProcedure.FunctionReturnTypeDataType_DataType);
                    }
                    else if (plsqlProcedure.FunctionReturnType == FunctionReturnType.TableColumn)
                    {
                        storedProcParam.OriginalTable  = plsqlProcedure.FunctionReturnTypeTableColumn_Table;
                        storedProcParam.OriginalColumn = plsqlProcedure.FunctionReturnTypeTableColumn_Column;
                    }

                    // Not supported with defaultvalues
                    storedProcParam.DefaultValue = string.Empty;

                    // Set mandatory flag
                    storedProcParam.IsMandatory = false;

                    // Add the property to the stored procedure
                    storedProc.Properties.Add(storedProcParam);
                }
            }
            return(storedProc);
        }
        public static StoredProcedure CreateStoredProcedure(PLSQLProcedure plsqlProcedure, RefCurStoredProcedure refCurStoredProcedure)
        {
            StoredProcedure storedProc = null;

            if (plsqlProcedure != null &&
                plsqlProcedure.Status == ProcedureStatus.Valid &&
                plsqlProcedure.Parameters.Count > 0 &&
                refCurStoredProcedure != null &&
                refCurStoredProcedure.Status == RefCurStoredProcedureStatus.Valid &&
                refCurStoredProcedure.ParameterList.Count > 0)
            {
                // Add procedures found in package specification that was parsed
                storedProc = new StoredProcedure();

                // Set the name of the procedure
                storedProc.ProcedureName = refCurStoredProcedure.Name;

                // If returning a ref cursor
                storedProc.IsReturningRefCursor = true;

                // Get the name of the column that is the Ref Cursor parameter
                storedProc.RefCursorParameterName = refCurStoredProcedure.InitialParameterList.Where(p => p.ProviderType == Oracle.DataAccess.Client.OracleDbType.RefCursor).ToList()[0].ColumnName;

                // Counter to set sequence for parameters
                // First parameter has sequence = 1
                int paramSequenceCounter = 1;

                foreach (PLSQLProcedureParameter param in plsqlProcedure.Parameters)
                {
                    ProcedureProperty storedProcParam = null;

                    if (param.ParameterType == ParameterType.DataType &&
                        param.ParameterTypeDataType_DataType == ParameterDBDataType.Ref_Cur)
                    {
                        foreach (OracleDataTypeInfo refCurParam in refCurStoredProcedure.ParameterList)
                        {
                            ProcedureProperty newProcParam = new ProcedureProperty();

                            // Set parameter name
                            newProcParam.Name = refCurParam.ColumnName;

                            newProcParam.Length    = refCurParam.ColumnSize;
                            newProcParam.Precision = refCurParam.Precision;
                            newProcParam.Scale     = refCurParam.Scale;

                            // Set direction of parameter
                            switch (refCurParam.Direction)
                            {
                            case System.Data.ParameterDirection.Input:
                                newProcParam.PropertyType = DbPropertyType.In;
                                break;

                            case System.Data.ParameterDirection.InputOutput:
                                newProcParam.PropertyType = DbPropertyType.InOut;
                                break;

                            case System.Data.ParameterDirection.Output:
                                newProcParam.PropertyType = DbPropertyType.Out;
                                break;

                            default:
                                newProcParam.PropertyType = DbPropertyType.In;
                                break;
                            }

                            // Sequence of the parameters
                            newProcParam.Sequence = paramSequenceCounter;

                            // Set the parent stored procedure for the parameter
                            newProcParam.StoredProcedure = storedProc;

                            // Not supported.
                            newProcParam.Text = string.Empty;

                            newProcParam.OriginalTable  = string.Empty;
                            newProcParam.OriginalColumn = string.Empty;
                            newProcParam.DbDatatype     = refCurParam.DataType;

                            // Not supported with defaultvalues
                            newProcParam.DefaultValue = string.Empty;

                            // Set mandatory flag
                            newProcParam.IsMandatory = false;

                            // Add the property to the stored procedure
                            storedProc.Properties.Add(newProcParam);

                            // Add one to sequence counter
                            paramSequenceCounter++;
                        }
                    }
                    else
                    {
                        storedProcParam = ProcedurePropertyHelper.CreateProcedureProperty(param);

                        // Sequence of the parameters
                        storedProcParam.Sequence = paramSequenceCounter;

                        // Set the parent stored procedure for the parameter
                        storedProcParam.StoredProcedure = storedProc;

                        // Add the property to the stored procedure
                        storedProc.Properties.Add(storedProcParam);

                        // Add one to sequence counter
                        paramSequenceCounter++;
                    }
                }
            }

            return(storedProc);
        }