viernes, 29 de julio de 2016

Activar Adobe Master Collection CS5

Bueno quiero compartirles a mis amigos que les gusta el diseño gráfico o a cualquier profesional que hace uso de este producto -  Adobe, les dejaré los pasos realizado en windows.

El asunto es que de manera esporádica hago uso del Dreamweaver, los siguientes pasos a realizar son:


1. Realizar la instalación del producto como una versión de prueba.
2. Después de haber realizado la instalación del producto, no debe abrir o ejecutar ninguno de los producto del suite - Adobe.
3. Ahora vaya a Inicio y buscar el Bloc de notas y ejecutarlo como administrador.

4. Ahora a través de su bloc de notas, ubicar la ruta C:\Windows\System32\drivers\etc y abrir el archivo hosts y añadir 127.0.0.1 activate.adobe.com - ver imagen de abajo y guardar con los cambios realizado.

5. Inicial cualquiera de los productos y nos solicitara ingresar la serial (se recomienda no estar conectado a internet).


También puedes consultar Serial Adobe Master Collection CS5

sábado, 11 de junio de 2016

Desarrollador Front-End, Back-End o Full Stack

Un desarrollador web no solo implica en una sola cosa, sino que abarca múltiples responsabilidades y más de un conjunto de habilidades que se determina a ciertos grupos de especialistas que la poseen. 

Obviamente que la responsabilidad sera otorgada a la persona adecuada según sus habilidades o simplemente su especialidad, hoy en día se habla muchísimo en el mundo del desarrollo web sobre los términos de front-end y back-end o simplemente de los full stack. En este articulo lo que pretendo es explicar las responsabilidad y ciertos conceptos a tomar en cuenta sobre cada uno de ellos.

El desarrollador Front-end:
Es el encargado de trabajar del lado del Cliente, es decir para la visualización en el navegador web. 
Y su principal ocupación es considerar todos los componentes externos del sitio web o de la aplicación web. Considerando como consecuencia y responsabilidad que la persona debe dominar obligatoriamente tecnologías tales como:

HTML, CSS, JavaScript y ciertos framework que hacen que la parte del lado del cliente se vea optimo y amigable para su uso, con un performance de diseño único y de gran calidad.

El desarrollador Back-end:
El back-end es el encargado de trabajar del lado Servidor, es decir de detrás del escenario del cliente. Es el encargado de construir y crear reglas de la aplicación, todo esto hace que su trabajo se vea reflejado del lado del cliente, con el previo desarrollo del front-end.  

Para ser un back-end del lado Servidor, basta con conocer y ser especialista en un solo lenguaje y tecnología o frameworks para poder realizar todo este trabajo, sin embargo no es suficiente con solo dominar el lenguaje y tecnología o frameworks, el desarrollador back-end debe estar capacitado y familiarizado con las bases de datos (Sql, ORACLE,MySql, etc) y no necesariamente ser un especialista en base de datos.

El desarrollador Full Stack:
Es el desarrollador multiusos, responsable del desarrollo del proyecto, desde el montaje de los servidores, hasta el diseño con CSS. Lo que se comenta actualmente es prácticamente imposible ser un buen desarrollador full stack. Tal y como evoluciona hoy en día la tecnología, es casi inviable estar de cada lado (Cliente/Servidor/Arquitectura) y dominar todos ellos. 

Bueno otra cosa que se menciona en general, los programadores que se hacen llamar full stack están más centrados en una de las dos partes, es decir, son especialista y dominan una de las partes y de la otra tienen nociones más que necesarias para dar soluciones, y muchos expertos dicen que estos perfiles suelen trabajar en pequeñas empresas donde ellos solos son los encargados de todo el desarrollo web (son opiniones y comentarios que se encuentra por la red, pero puede ser todo lo contrario).

En resumen:

Como se detalla en todo desarrollo web se presentan múltiples tareas y faces las cuales van evolucionan en nuestro día a día por la aparición de diferentes tecnologías. Lo mejor que se podría hacer es comenzar por especializarnos en uno de ellos, Front-end o Back-end sin dejar de lado el alma de tener en algo de Full Stack, desde luego que lo necesitaremos. 

viernes, 10 de junio de 2016

Construye una aplicación web desde cero con ASP.Net MVC

En el siguiente articulo se especifica todos los pasos necesarios para iniciarse e ir conociendo acerca de ASP.Net MVC, antes de iniciar con las fases de la construcción de la aplicación, te recomiendo leer el articulo Iniciando ASP.Net MVC encontrarás la información necesaria y resumida, además debe considerar otros puntos muy importantes antes de iniciarse, como por ejemplo las plantillas, motor de vista, pruebas unitarias y los directorio App_start ASP.Net MVC 

Requisitos para la implementación:
- Microsoft SQL Server Management Studio 2012.
- Microsoft Visual Studio Ultimate 2015 (Puede usar otras ediciones incluyendo la express).
- Framework 4  o 4.5 (Puede ser cualquiera de las 2, solo que la recomendación es iniciar y terminas con la que iniciaste).
- Dapper.Net (ORM para la  manipulación de datos desde la app, puedes agregarlo a tu proyecto desde nuget).
- Framework Bootstrap (para mejorar el diseño de nuestra aplicación)
- Y algo de Transact-SQL (para manipulación de datos desde base de datos).

Aquí dejo todos los pasos a seguir:
Crear Proyecto ASP.NET MVC - Fase I
Agregar modelo ASP.NET MVC - Fase II
Agregar controlador ASP.NET MVC - Fase III
Agregar vistas ASP.NET MVC - Fase IV
Bootstrap y ASP.NET MVC - Fase V
Pantalla de lo que se logrará al finalizar


Pueden descargar la fuente desde:
 Project - GitHub
Sugerencias y opiniones son bienvenidos o escríbanos a hadson1@gmail.com

Conozca acerca de WCF y Construya una Aplicación

En siguiente articulo quiero compartirles los conceptos necesarios para implementar servicios WCF (Windows Communication Foundation). Además, conoceremos acerca de como crear y cuales con los proyectos de tipo WCF, publicación en el IIS (Internet Information Server) y como consumir dicho servicio ya publicado.

Requisitos para la implementación:
- Microsoft SQL Server Management Studio 2008.
- Microsoft Visual Studio Ultimate 2010 o 2012.
- Framework 4 y MCV 4.
- Enterprise Library 5.
- AngularJS v1.2.24.
- Y algo de sentencia SQL (para manipulación de datos desde base de datos).

Aquí dejo todos los pasos a seguir:
Introducción a WCF - Fase I
Conexión a datos WCF - Fase II
Publicar Servicios WCF - Fase III
Consumir servicio WCF - Fase IV

Pantalla de lo que se logrará al finalizar



Sugerencias y opiniones son bienvenidos o escríbanos a hadson1@gmail.com

sábado, 4 de junio de 2016

Construyendo Objetos de Base de Datos - Módulo de Seguridad

Ahora implementaremos los procedimientos almacenados a nivel de base de datos que serán invocados desde nuestra aplicación webToda nuestra lógica de negocio será controlado desde la base de datos, nuestra aplicación web se encargará de alimentar de la lógica implementado en la base de datos.

PROCEDIMIENTOS ALMACENADOS PARA EL ACCESO Y VALIDACIÓN A LA APLICACIÓN WEB:

SP_GET_SEG_USUARIO_DASH:
Encarga de capturar todos los campos de la tabla SEG_USUARIO_DASH. Los campos USUARIO y PASSWORD, es para capturar los datos del usuario y pasar al controlador en primera instancia, a través de la acción se valida dichos datos para lograr el acceso a la aplicación (esto lo veremos al implementar la aplicación).

Script:
-- ====================================================
-- Author:  HADSON PAREDES CORDOVA
-- Create date: 2016/060/04
-- Description: Captura el ID_USUARIO, USUARIO,
--     PASSWORD, STS_REGISTRO, STS_RECORDAR
-- ====================================================
CREATE PROCEDURE SP_GET_SEG_USUARIO_DASH
AS
BEGIN
    SELECT ID_USUARIO, USUARIO,
           PASSWORD, STS_REGISTRO, STS_RECORDAR
    FROM   SEG_USUARIO_DASH
END

SP_GET_SEG_USUARIO_ROL_DASH:
Encarga de capturar todo los campos de la tabla USUARIO_ROL_DASHLos campos ID_USUARIO_ROL y ID_USUARIO, es útil para capturar y pasar los datos del rol al que pertenece dicho usuario ingresados en la primera instancia.

Script:
-- ====================================================
-- Author:  HADSON PAREDES CORDOVA
-- Create date: 2016/060/04
-- Description: Captura el ID_USUARIO_ROL, ID_USUARIO,
--              ID_MENU, STS_REGISTRO
-- ====================================================
CREATE PROCEDURE SP_GET_SEG_USUARIO_ROL_DASH
AS
BEGIN
    SELECT ID_USUARIO_ROL, ID_USUARIO,
      ID_MENU, STS_REGISTRO
    FROM SEG_USUARIO_ROL_DASH
END
PROCEDIMIENTO ALMACENADO PARA CONSTRUIR EL MENU DE ACUERDO AL ACCESO Y VALIDACIÓN:

SP_GET_SEG_MENU_DASH:
Encargado de capturar el ID_MENU, DESCRIPCION (descripción completa), CONTROLADOR (controlador a la que pertenece desde nuestra aplicación web), ACCION (acción que se realiza desde nuestra aplicación web), IMAGEN (asociado al menu a la que pertenece) y STS_REGISTRO (solo se puede mostrara el registro que este activo), todos estos campos es necesario para construir el menu completo de la aplicación según el usuario ingresado y al rol a la que pertenece dicho usuario.

Script:
-- =========================================================================
-- Author:  HADSON PAREDES CORDOVA>
-- Create date: 2016/060/04>
-- Description: Relaciona el menu dashboar con el rol usuario considerando
--     el parámetro @PC_USUARIO y el estado del  usario rol
-- =========================================================================
CREATE PROCEDURE SP_GET_SEG_MENU_DASH
 @PC_USUARIO VARCHAR(20)
AS
BEGIN
    SELECT M.ID_MENU,
      M.DESCRIPCION,
      M.CONTROLADOR,
      M.ACCION,
      M.IMAGEN,
      M.STS_REGISTRO
    FROM SEG_MENU_DASH M
      JOIN SEG_USUARIO_ROL_DASH R
      ON M.ID_MENU = R.ID_MENU
      JOIN SEG_USUARIO_DASH U
      ON R.ID_USUARIO = U.ID_USUARIO
    WHERE U.USUARIO = @PC_USUARIO
    AND     R.STS_REGISTRO = 1
END

Por ahora sólo se crearan estos 3 procedimientos almacenados. El la siguiente fase se creara la solución y los proyectos necesarios para el desarrollo de aplicación web.

Construyendo Modelo de Base de Datos - Módulo de Seguridad

Bueno, así que e decido implementar un modelo de base de datos que soporte y administre de manera dinámica y desde la base de datos el menu y sub menús de una determinada la aplicación y los acceso según el rol de cada usuario. 

En determinado momento he compartido un modelo de base de datos que tuve la oportunidad de implementarlo, si desean pueden echarle un vistazo ya que esto nos dará un panorama de lo que esperamos lograr. 

Luego de tener el modelo construido, implementaremos los objetos de base de datos (procedimientos almacenados, funciones y vista) y desarrollaremos una aplicación web haciendo uso del patrón de MVC, así que sin más detalles iniciamos construyendo nuestra base de datos y las tablas necesarias.

SCRIPTS  - BASE DE DATOS:
----------------------------------
-- CREACIÓN DE LA BASE DE DATOS
----------------------------------
USE MASTER
GO
IF EXISTS(SELECT NAME FROM SYSDATABASES WHERE NAME = 'BD_SEGURIDAD')
 DROP DATABASE BD_SEGURIDAD
GO
CREATE DATABASE BD_SEGURIDAD
GO

DESCRIPCIÓN DE TABLAS:

SEG_ROL_DASH:
Encarga de registrar la descripción del rol que se asignará a cada usuario.

SEG_MENU_DASH:
Encargado de registrar la descripción del menu a mostrar en el dashboard, así mismo registra el controlador, la acción (se considera que MVC siempre esta conformado por controlador/accion) y el detalle de la imagen a mostrar en el menu.

SEG_USUARIO_DASH:
Encargado de registrar los datos de acceso (usuario y password). Esta tabla tiene una particularidad única, ya que además registra el id del empleado al cual se asigna una cuenta usuario de acceso a la aplicación, de esta particularidad detallaremos más adelante.

SEG_USUARIO_ROL_DASH:
Es el encargo de unir las tres tablas arriba mencionadas (SEG_ROL_DASH, SEG_MENU_DASH y SEG_MENU_DASH) es decir es la tabla que contempla el acceso y control de menu de nuestra aplicación.

SCRIPTS - TABLAS:
----------------------------------
-- CREACIÓN DE TABLAS IDENTIFICAS
----------------------------------
USE [BD_SEGURIDAD]
GO
CREATE TABLE [SEG_ROL_DASH](
 [ID_ROL] [numeric](8, 0) NOT NULL,
 [DES_ROL] [varchar](50) NOT NULL,
 [STS_REGISTRO] [bit] NOT NULL,
 [USU_CREADOR] [varchar](20) NOT NULL,
 [FEC_CREACION] [datetime] NOT NULL,
 [USU_ACTUALIZA] [varchar](20) NULL,
 [FEC_ACTUALIZA] [datetime] NULL,
 CONSTRAINT [PK_SEG_ROL_DASH] PRIMARY KEY CLUSTERED
(
 [ID_ROL] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [SEG_MENU_DASH](
 [ID_MENU] [numeric](8, 0) NOT NULL,
 [DESCRIPCION] [varchar](50) NULL,
 [CONTROLADOR] [varchar](50) NOT NULL,
 [ACCION] [varchar](50) NOT NULL,
 [IMAGEN] [varchar](50) NULL,
 [STS_REGISTRO] [bit] NOT NULL,
 [USU_CREADOR] [varchar](20) NOT NULL,
 [FEC_CREACION] [datetime] NOT NULL,
 [USU_ACTUALIZA] [varchar](20) NULL,
 [FEC_ACTUALIZA] [datetime] NULL,
 CONSTRAINT [PK_SEG_MENU_DASH] PRIMARY KEY CLUSTERED
(
 [ID_MENU] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [SEG_USUARIO_DASH](
 [ID_USUARIO] [numeric](8, 0) NOT NULL,
 [COD_EMPLEADO] [numeric](10, 0) NOT NULL,
 [USUARIO] [varchar](20) NOT NULL,
 [PASSWORD] [varchar](20) NOT NULL,
 [STS_REGISTRO] [bit] NOT NULL,
 [STS_RECORDAR] [bit] NOT NULL,
 [USU_CREADOR] [varchar](20) NOT NULL,
 [FEC_CREACION] [datetime] NOT NULL,
 [USU_ACTUALIZA] [varchar](20) NULL,
 [FEC_ACTUALIZA] [datetime] NULL,
 CONSTRAINT [PK_SEG_USUARIO_DASH] PRIMARY KEY CLUSTERED
(
 [ID_USUARIO] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [SEG_USUARIO_ROL_DASH](
 [ID_USUARIO_ROL] [numeric](8, 0) NOT NULL,
 [ID_ROL] [numeric](8, 0) NOT NULL,
 [ID_USUARIO] [numeric](8, 0) NOT NULL,
 [ID_MENU] [numeric](8, 0) NOT NULL,
 [STS_REGISTRO] [bit] NOT NULL,
 [USU_CREADOR] [varchar](20) NOT NULL,
 [FEC_CREACION] [datetime] NOT NULL,
 [USU_ACTUALIZA] [varchar](20) NULL,
 [FEC_ACTUALIZA] [datetime] NULL,
 CONSTRAINT [PK_SEG_USUARIO_ROL_DASH] PRIMARY KEY CLUSTERED
(
 [ID_USUARIO_ROL] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
MODELO:

El la siguiente fase continuaremos creando los procedimientos almacenados a nivel de base datos, luego invocaremos todos los procedimientos almacenados creados desde la fuente de dominio de nuestra aplicación a construir.

La fase II ya se encuentran disponible.

miércoles, 11 de mayo de 2016

Parámetro de entrada y salida – PL/SQL

Parámetro de entrada y salida – PL/SQL:
Los parámetros de entrada y salida no son los parámetros de inicialización de la base de datos ORACLE. Los parámetros de entra y salida son utilizados mayormente en implementaciones de funciones, procedimientos almacenados o bloques de código bajo el lenguaje del PL/SQL, se considera que ambos parámetros (entra y salida) puedan realizar operaciones en el mismo bloque PL/SQL, es decir, si enviamos un parámetro de entrada hará que cumpla cierta operación y retornara los valores de salida de dicha operación procesada de acuerdo al parámetro de ingresado. Es de acuerdo al caso que nos presenta en la implementación.
Algo importante al definir los parámetros, es saber y considerar cuántos tipos de parámetro existe si solo hablamos de entrada y salida, en realidad mi determinación seria 3 tipos:

Parámetros:

IN – entrada
OUT – salida
IN OUT – entrada salida

Parámetro IN – entrada:
El comportamiento común de estés tipos de parámetros es estar siempre pendiente de recibir un dato para ser procesada según él dato. Acepta valores por defectos haciendo uso del operador de asignación (:=) o utilizando la palabra reservada DEFAULT.

Parámetro OUT – salida:
Los parámetros de salida inicialmente arrancan como NULL, es decir al iniciar el proceso el parámetro estará como nulo o en todo caso, puede tomar un valor inicial y ser cambio durante la ejecución del proceso; y al finalizar el proceso se encarga de tomar o asignar el último valor al parámetro de salida.

Parámetro IN OUT – entrada salida:
Los parámetros de entra salida comúnmente cumplen las 2 funcionalidades arriba mencionadas con la diferencia de que si no defines un valor de entra te retornará el valor nulo o según la condición del proceso que está realizando (Ver el ejemplo, líneas abajo) o caso contrario mostrará el valor de entrada según definido inicialmente.

Ejemplo:

Para el siguiente ejemplo planteare el siguiente caso:
Nos piden mostrar los registros EMPLOYEE_ID, MANAGER_ID, DEPARTMENT_ID de cualquiera de los empleados según el EMPLOYEEID, así mismo, debemos mostrar el campo DEPARTMENT_NAME sólo cuando el DEPARTMENT_ID sea igual a 50; además nos piden mostrar la fecha actual de ejecución del proceso y mostrar opcionalmente el mes actual en texto o en todo caso mostrara el mensaje definido - MES NO DEFINIDO (cuando el parámetro sea vacío u otro mes diferente al actual).
/*Se recomienda leer y considerar todos los comentarios detallados, 
  para su mayor entendimiento de la solución del caso propuesto */
CREATE OR REPLACE PROCEDURE Demo_DataInOutEmployees(
  --Parámetro de 
  p_EMPLOYEEID        IN NUMBER,--Entrada
  pou_EMPLOYEE_ID     OUT EMPLOYEES.EMPLOYEE_ID%TYPE,--Salida
  pou_MANAGER_ID      OUT EMPLOYEES.MANAGER_ID%TYPE,--Salida   
  pou_DEPARTMENT_ID   OUT EMPLOYEES.DEPARTMENT_ID%TYPE,--Salida  
  pou_DEPARTMENT_NAME OUT DEPARTMENTS.DEPARTMENT_NAME%TYPE,--Salida
  pou_DAY_CONSULT     OUT DATE,--Salida
  pou_MONTH_TEXT      IN OUT VARCHAR2--Entrada Salida
)
AS
BEGIN
      --@1 Inicio primer bloque - Recuperar datos de la tabla employees
      BEGIN
        pou_EMPLOYEE_ID :=100;--Por default, pero, puede ser cambando según el 
                              --proceso (según el select que nos retorna) 
        SELECT EMPLOYEE_ID, 
              MANAGER_ID,   
              DEPARTMENT_ID,
              SYSDATE(),
              CASE 
                  --WHEN TO_CHAR(TO_DATE('11/05/2016'),'MM') = '05' THEN 'MAYO'
                  --La condición del proceso a realizar es, que sí ingresamos 05 (referencia 
                  --al mes de MAYO) nos debería pintar como respuesta MAYO, caso contrario el
                  --mensaje NO ES EL MES ACTUAL
                  WHEN TO_CHAR(TO_DATE('11/05/2016'),'MM') = pou_MONTH_TEXT THEN 'MAYO'
                  ELSE 'MES NO DEFINIDO' END MES
        INTO  pou_EMPLOYEE_ID,
              pou_MANAGER_ID,
              pou_DEPARTMENT_ID,
              pou_DAY_CONSULT,
              pou_MONTH_TEXT
        FROM EMPLOYEES WHERE EMPLOYEE_ID = p_EMPLOYEEID;
      EXCEPTION
        WHEN no_data_found THEN
          pou_EMPLOYEE_ID:=NULL;
          pou_MANAGER_ID:=NULL;
          pou_DEPARTMENT_ID:=NULL;
      END;
      --@1 Final primer bloque - Recuperar datos de la tabla employees
      
      --@2 Inicio segundo bloque - Recuperar el DEPARTMENT_NAME. 
      --Solo sí el pou_DEPARTMENT_ID sea 50, caso contrario devolver CERO (0).
      --Considerando: Que sí el pou_DEPARTMENT_ID sea 50 y no se encuentra data
      --el parametro de salida devolvera null
      BEGIN
        if (pou_DEPARTMENT_ID = 50) THEN
            BEGIN
              SELECT  DEPARTMENT_NAME
              INTO    pou_DEPARTMENT_NAME
              FROM    DEPARTMENTS WHERE DEPARTMENT_ID=pou_DEPARTMENT_ID;
            EXCEPTION
              WHEN no_data_found THEN
                pou_DEPARTMENT_NAME:=NULL;--Null, no hay data a pesar de ser pou_DEPARTMENT_ID = 50
            END;
        ELSE
          begin
            pou_DEPARTMENT_NAME:=0;--0, diferente - pou_DEPARTMENT_ID != 50
          end;
        end if;
      end;      
      --@2 Inicio segundo bloque - Recuperar el DEPARTMENT_NAME- 
      
      --Pasar los datos recuperados a los parámetros de tipo OUT - Salida
      pou_EMPLOYEE_ID     :=pou_EMPLOYEE_ID;
      pou_MANAGER_ID      :=pou_MANAGER_ID;
      pou_DEPARTMENT_ID   :=pou_DEPARTMENT_ID;
      pou_DEPARTMENT_NAME :=pou_DEPARTMENT_NAME;
      pou_DAY_CONSULT     :=pou_DAY_CONSULT;
      pou_MONTH_TEXT      :=pou_MONTH_TEXT;
END Demo _DataInOutEmployees;

Consideración:
La palabra reservada para la implementación de parámetros de entrada es IN y se declara en la cabecera o al principio de una función, procedimiento almacenado o bloque acompañado de un tipo de dato, no se considera la longitud de data (ejemplo – varchar2(50), numeric(5)… no es considerado). Las mismas consideraciones se tienen con los parámetros OUT e IN OUT.

miércoles, 4 de mayo de 2016

Convertir expresión con TO_NUMBER - PL/SQL

Función TO_NUMBER():
Se encarga de convertir una expresión (expr) en un valor de tipo de dato NUMBER. Es decir el valor de la expresión (expr) puede ser un valor de tipo de dato  CHAR, VARCHAR2, NCHAR, NVARCHAR2 o BINARY_DOUBLE.

Sintaxis.

TO_NUMBER(expr [, fmt [,nlsparam ] ])

Ejemplo:

Convertir la expresión de tipo de dato VARCHAR2, haciendo uso de la función TO_NUMBER().
DECLARE
      pVARCHAR2 VARCHAR2(50) := '59300.65';--Considerar la cantidad de enteros y decimales en la entrada de datos, es decir si
                                                    --la entrada contiene 5 enteros y 2 decimales (ejemplo - 59300.65 cincuenta y nueve mil 
                                                    --trecientos con sesenta y cinco), nuestro dato de salida debe soporta la longitud de
                                                    --5 enteros y 2 decimas (ejemplo de retorno, '99999.99')
      pNUMBER NUMBER ;
      pNUMBER2 NUMBER; 
BEGIN           
      pNUMBER := TO_NUMBER(pVARCHAR2,'999999999999999999.99');--Incluye los decimales... ejmplo 59300,65
      pNUMBER2:= TO_NUMBER(pVARCHAR2,'999999999999999999D99');--Excluye los decimales...  ejemplo 5930065       
      
      DBMS_OUTPUT.PUT_LINE('Conversion usando punto : ' || pNUMBER);
      DBMS_OUTPUT.PUT_LINE('Conversion usando la letra D : ' || pNUMBER2);
END;
Para poder convertir una expresión en cualquier parte de nuestra implementación sería lo optimo crear una función que realice todo esta conversión, y hacer referencia a dicha función creada.
CREATE OR REPLACE FUNCTION FN_FORMATEO_EXPRESION(
       pVARCHAR2 IN VARCHAR2
) 
RETURN NUMBER IS
  pNUMBER NUMBER;
BEGIN
  pNUMBER := TO_NUMBER(pVARCHAR2 ,'99999999999.99');
  
  RETURN pNUMBER ;
END FN_FORMATEO_EXPRESION;

Validar la función creada:
SELECT MI_ESQUEMA.FN_FORMATEO_EXPRESION('59300.65') FROM DUAL;
Consideraciones:
- Puedes especificar una expresión de tipo BINARY_FLOAT. Sin embargo, no tiene relevancia en hacerlo porque un tipo float solo puede ser interpretado por su presentación interna.
- No es compatible con los datos CLOB directamente. Sin embargo, CLOB se pueden pasar como argumentos a través de la conversión de datos implícita.
- El argumento nlsparam, en esta función tiene el mismo propósito que en la función TO_CHAR(). Además puedes dar el formato (fmtde la mascará haciendo uso de la función TO_CHAR().
- La función NVL() se puede utilizar a partir de Oracle 10g y Oracle 11g.