internal OciRowIdDescriptor GetAttributeRowIdDescriptor(OciErrorHandle errorHandle, OciHandle env)
        {
            OciRowIdDescriptor descriptor = null;
            IntPtr             outputPtr  = IntPtr.Zero;
            int outSize = 16;
            int status  = 0;
            OciAttributeType attrType = OciAttributeType.RowId;

            outputPtr = OciCalls.AllocateClear(outSize);

            uint siz = (uint)outSize;

            status = OciCalls.OCIAttrGetRowIdDesc(Handle,
                                                  HandleType,
                                                  outputPtr,
                                                  ref siz,
                                                  attrType,
                                                  errorHandle);

            if (status != 0)
            {
                OciErrorInfo info = errorHandle.HandleError();
                throw new OracleException(info.ErrorCode, info.ErrorMessage);
            }

            if (outputPtr != IntPtr.Zero && siz > 0)
            {
                descriptor = (OciRowIdDescriptor)env.Allocate(OciHandleType.RowId);
                descriptor.SetHandle(outputPtr);
            }

            return(descriptor);
        }