martes, 31 de diciembre de 2013

Firmar un .jar para Oracle Developer 10g (WebUtil)

Oracle Forms y Start OC4J Instance deben de estar cerrados.


1.      Copiar en el directorio C:\DevSuiteHome_1\forms\webutil el archivo

§  jacob.dll



2.    Se debe de digitar path para que encuentre el jarsigner en la ruta C:\DevSuiteHome_1\jdk\bin


3. 

3. Se debe de copiar el jacob.jar en C:\DevSuiteHome_1\forms\java y escribir el path de la ruta, y todos los demás jar que se quieran firmar.



4.      Abrir una ventana de comandos del DOS (cmd) en el directorio indicado en el punto anterior y ejecutar los siguiente comandos:

§  sign_webutil.bat C:\DevSuiteHome_1\forms\java\jacob.jar
§  sign_webutil.bat C:\DevSuiteHome_1\forms\java\frmwebutil.jar
§  sign_webutil.bat C:\DevSuiteHome_1\forms\java\*.jar

* Jar que necesite firmar



Descargar de jacob:




Consulta para la creación de sinónimos de un esquema a otro

SELECT  'CREATE SYNONYM  OE.'||OBJECT_NAME||'  FOR HL.'||OBJECT_NAME||';'
FROM ALL_OBJECTS
WHERE OWNER= USER
AND OBJECT_TYPE IN ('TABLE','VIEWS','PROCEDURE','PACKAGE');

miércoles, 20 de noviembre de 2013

Ejemplo de PRE-INSERT en Oracle Forms

declare

begin


insert into SAPRISSA.CRM_SOLICITUD(
  NUM_SOLICITUD,
  FEC_SOLICITUD,
  DESCRIPCION,
  COMENTARIO,
  IND_ESTADO,
  LLAVE_EXTERNA,
  ID_ENTIDAD,
  SOLICITANTE,
  DEPTO_SOLICITANTE,
  FEC_INICIO
)
values
(
  :BL_REGISTRO_GARANTIA.NUM_HILO,
  :BL_REGISTRO_GARANTIA.FECHA_REGISTRO,
  :BL_REGISTRO_GARANTIA.DESCRIPCION ,
   :BL_REGISTRO_GARANTIA.DESCRIPCION ,
  'A',
   :BL_REGISTRO_GARANTIA.CODIGO_CLIENTE,
  14,
  USER ,
  NULL,
  :BL_REGISTRO_GARANTIA.FECHA_REGISTRO
);

end;

jueves, 24 de octubre de 2013

10 principales consultas que debe de aprender un DBA:

1--Versión de Oracle:
select value
from v$system_parameter
where name = 'compatible'

select * from V$VERSION

select version from v$instance

2--Diccionario de datos
select * from dictionary

select table_name from dictionary


3--Roles y privilegios por roles:
select * from role_sys_privs

4--Obtener los roles existentes en Oracle Database:
select * from DBA_ROLES

5--Reglas de integridad y columna a la que afectan:
select constraint_name, column_name
from sys.all_cons_columns

6--Usuarios de Oracle y todos sus datos (fecha de creación, estado, id, nombre, tablespace temporal,...):
Select  * FROM dba_users

7--Tablas del usuario actual:
select * from user_tables

8--Tablas de las que es propietario un usuario, en este caso "HR":
SELECT table_owner, table_name
from sys.all_synonyms
where table_owner like 'HR'

9--Vista que muestra todos los objetos de la base de datos
select * from all_objects

10----Ver los comentatios del esquema actual
select * from all_tab_comments

jueves, 17 de octubre de 2013

Script de la vista EMP_DETAILS_VIEW para el esquema HR de Oracle

-- EMP_DETAILS_VIEW  (View)
--

CREATE OR REPLACE FORCE VIEW EMP_DETAILS_VIEW
(
   EMPLOYEE_ID,
   JOB_ID,
   MANAGER_ID,
   DEPARTMENT_ID,
   LOCATION_ID,
   COUNTRY_ID,
   FIRST_NAME,
   LAST_NAME,
   SALARY,
   COMMISSION_PCT,
   DEPARTMENT_NAME,
   JOB_TITLE,
   CITY,
   STATE_PROVINCE,
   COUNTRY_NAME,
   REGION_NAME
)
AS
   SELECT e.employee_id,
          e.job_id,
          e.manager_id,
          e.department_id,
          d.location_id,
          l.country_id,
          e.first_name,
          e.last_name,
          e.salary,
          e.commission_pct,
          d.department_name,
          j.job_title,
          l.city,
          l.state_province,
          c.country_name,
          r.region_name
     FROM employees e,
          departments d,
          jobs j,
          locations l,
          countries c,
          regions r
    WHERE     e.department_id = d.department_id
          AND d.location_id = l.location_id
          AND l.country_id = c.country_id
          AND c.region_id = r.region_id
          AND j.job_id = e.job_id
   WITH READ ONLY;

& como parámetro en Oracle

SELECT dname FROM dept
WHERE deptno = &deptno --& sirve como parametro


jueves, 3 de octubre de 2013

Lo que hay que saber sobre SQLX

Ejemplos de XML ORACLE:

--      SYS_XMLGEN:
SELECT SYS_XMLGEN(email)        
    FROM employees
    WHERE employee_id = 205;
--      SYS_XMLAGG:
SELECT SYS_XMLAGG(SYS_XMLGEN(last_name)) XMLAGG
   FROM employees
   WHERE last_name LIKE 'R%'
   ORDER BY xmlagg;
--      XMLELEMENT:
SELECT XMLELEMENT("Emp", XMLELEMENT("Name", 
   e.job_id||' '||e.last_name),
   XMLELEMENT("Hiredate", e.hire_date)) as "Result"
   FROM employees e WHERE employee_id > 200;
--      XMLATTRIBUTES:
SELECT XMLELEMENT("Emp", XMLATTRIBUTES(e.employee_id, e.last_name),
   XMLELEMENT("Dept", XMLATTRIBUTES(e.department_id,
   (SELECT d.department_name FROM departments d
   WHERE d.department_id = e.department_id) as "Dept_name")),
   XMLELEMENT("salary", e.salary),
   XMLELEMENT("Hiredate", e.hire_date)) AS "Emp Element"
   FROM employees e
   WHERE employee_id = 205;
--      XMLFOREST:
SELECT XMLELEMENT("Emp", 
   XMLFOREST(e.employee_id, e.last_name, e.salary))
   "Emp Element"
   FROM employees e WHERE employee_id = 204;
--      XMLCONCAT:
SELECT XMLCONCAT(XMLELEMENT("First", e.first_name),
   XMLELEMENT("Last", e.last_name)) AS "Result"
   FROM employees e
   WHERE e.employee_id > 202;
--      XMLAGG:
SELECT XMLELEMENT("Department",
   XMLAGG(XMLELEMENT("Employee", e.job_id||' '||e.last_name)
   ORDER BY last_name))
   as "Dept_list"     
   FROM employees e
   WHERE e.department_id = 30;
--      XMLPI:
SELECT XMLPI(NAME "Order analysisComp", 'imported, reconfigured, disassembled')
   AS "XMLPI" FROM DUAL;
--      XMLCOMMENT:
SELECT XMLCOMMENT('OrderAnalysisComp imported, reconfigured, disassembled')
   AS "XMLCOMMENT" FROM DUAL;
--   XMLROOT:
SELECT XMLROOT ( XMLType('143598'), VERSION '1.0', STANDALONE YES)
   AS "XMLROOT" FROM DUAL;
--   XMLSERIALIZE:
SELECT XMLSERIALIZE(CONTENT XMLTYPE('Grandco'))
   FROM DUAL;
--   XMLCDATA:
SELECT XMLELEMENT("PurchaseOrder",
   XMLAttributes(dummy as "pono"),
   XMLCdata('

   
   
   
   
   
   ]>')) "XMLCData" FROM DUAL; 

jueves, 26 de septiembre de 2013

Funciones Aritméticas en Oracle

CREATE OR REPLACE PROCEDURE aritmetica (num1 NUMBER, num2 NUMBER) IS

suma NUMBER(6);
resta NUMBER(6);
div NUMBER(6,2);
multi NUMBER(6,2);

BEGIN

suma := num1 + num2;
resta:= num1 - num2;
div:= num1 / num2;
multi:= num1 * num2;

DBMS_OUTPUT.PUT_LINE('La suma es: '|| suma);
DBMS_OUTPUT.PUT_LINE('La resta es: '|| resta);
DBMS_OUTPUT.PUT_LINE('La division es: '|| div);
DBMS_OUTPUT.PUT_LINE('La multiplicacion es: '|| multi);

END aritmetica;

viernes, 6 de septiembre de 2013

Profiles, Roles y Permisos en Oracle

Perfiles: Son políticas que se le otorgan a un usuario, se limitan por ejemplo las sesiones, el uso de password y tiempo de conexiones.
Ejemplo de Profile:
CREATE PROFILE usuario_oracle LIMIT
 SESSIONS_PER_USER  2   -- especifica el número de sesiones simultáneas a las que desea limitar el usuario.
  CPU_PER_SESSION          20000   -- decimas de segundo
  CPU_PER_CALL                      1   -- decimas de segundo
  CONNECT_TIME              UNLIMITED   -- minutos
  IDLE_TIME                        30   -- minutos
  LOGICAL_READS_PER_SESSION   DEFAULT   -- DB BLOCKS
  LOGICAL_READS_PER_CALL      DEFAULT   -- DB BLOCKS
  -- COMPOSITE_LIMIT          DEFAULT   --
  PRIVATE_SGA                    100M   -- Especifica la cantidad de espacio privado, una sesión puede asignar en la piscina comunitaria del área global del sistema (SGA).
  FAILED_LOGIN_ATTEMPTS             3   -- Especifica el número de intentos fallidos para iniciar sesión en la cuenta de usuario antes de que la cuenta quede bloqueada.
  PASSWORD_LIFE_TIME               30   -- dias
  PASSWORD_REUSE_TIME              12   --
  PASSWORD_REUSE_MAX        UNLIMITED   --
  PASSWORD_LOCK_TIME          DEFAULT   -- dias
  PASSWORD_GRACE_TIME               3   -- dias
  PASSWORD_VERIFY_FUNCTION       NULL;

Roles: Los roles son un conjunto de permisos o privilegios para asignar a usuarios.
Ejemplo de role:
CREATE ROLE MI_PROPIO_ROLE

Select para ver los roles de un usuario:
select grantee, granted_role from dba_role_privs
  where grantee = upper ('&grantee')
  order by grantee;



Privilegios o permisos: Los permisos se asignan a un usuario o a un role.

jueves, 5 de septiembre de 2013

Usuario e Información de Perfil del Diccionario de Vistas de Datos Oracle

DBA_USERS
Todos los usuarios de la base de datos.
ALL_USERS
Usuarios visibles para el usuario actual, pero las listas no los describen.
USER_USERS
Describe el usuario actual.
DBA_TS_QUOTAS
USER_TS_QUOTAS
Describe las cuotas de tablas para los usuarios.
USER_PASSWORD_LIMITS
Describe los parámetros del perfil de contraseñas que se han asignado al usuario.
USER_RESOURCE_LIMITS
Muestra los límites de recursos para el usuario actual.
DBA_PROFILES
Muestra todos los perfiles y sus límites.
RESOURCE_COST
Muestra el costo para cada recurso.
V$SESSION
Presenta la información de sesión de cada período de sesiones, incluye el nombre de usuario.

Lista de estadísticas de la sesión de usuario.
V$SESSTAT
Listas de las estadísticas de sesión de usuario
V$STATNAME
Muestra decodificados nombres de estadísticas para las estadísticas mostradas en la vista V $ SESSTAT
PROXY_USERS
Describe los usuarios que pueden asumir la identidad de otros usuarios.

miércoles, 28 de agosto de 2013

Como hacer una contraseña segura?

Como hacer una contraseña segura es algo que todos queremos, guardar nuestros datos importantes o información privada de nuestra vida son temas que queremos salvaguardar con bastante seguridad y para ello el uso de contraseñas variadas puede ser una solución, aunque si somos de memoria corta es un gran problema ya que si pensamos en apuntarla en un papel no sería tampoco nada seguro.

Cambiar la contraseña cada cierto tiempo es una posible solución, pero que le puedo poner a esa contraseña para evitar "hackeos"?
R/ Números, letras, guiones...podemos pensar en un sin fin de opciones pero los "hacker" con el tiempo logran descifrar cualquier caracter que poseamos en nuestra contraseña.

Una forma simple para evitar cualquier "hackeo" u otros problemas es agregar a su contraseña la letra: Ñ, si lo ve muy bien, la letra Ñ es el único caracter que los "hackers" no pueden descifrar.

Por ejemplo:
Usuario: Pig06
Password: Ñoñopig06

Así que ya lo saben, si quieren una contraseña libre de "hackeos" la letra Ñ es la solución.


miércoles, 24 de julio de 2013

lunes, 1 de julio de 2013

Como generar un reporte en GeneXus?

Los reportes son muy útiles actualmente para la vida de las aplicaciones web que tanto están surgiendo acorde a las nuevas tecnologías y necesidades del usuario.

Para esto la empresa uruguaya GeneXus es muy competente y va a la vanguardia de estos nuevos métodos de generación de reportes para la cuál con pequeños pero importantes pasos se crean reportes de gran funcionalidad y enfocado a las tareas necesarias de cada empresa, trabajador independiente y/o usuarios.

Pasos para elaborar un reporte en genexus:

1- Crear un objeto nuevo, elegir reporte y asignarle un nombre.
2- Seleccionar Insert from Trn si deseamos hacer un reporte de una o varias tablas completas
2.1 - Seleccionar Insert Attribute si solo se desea escoger ciertos campos de una tabla
3- Dar siguiente hasta llegar al "Font", allí modificamos y ponemos el tamaño de la fuente que querramos
4- Nos vamos a las propiedades del reporte y le damos los siguientes cambios:
4.1- Main program: TRUE
4.2- Call Protocol = HTTP
4.3- Report OutPut = “Only to File”
5- Al finalizar se genera código automáticamente
6- En reglas debemos de digitar le siguiente código: Output_file("Nombre_Reporte.pdf", "PDF"); --Tenemos que poner la extensión del reporte ya que genexus no lo genera automaticamente
7- Se "clickea" specify selected y luego Generate
8- Se "clickea" buil all y luego Generate
9- Se  "clickea" Execute -> Select All -> Compile -> Developer Menu -> Compile & Execute


Nota:
1- Antes debemos de iniciar nuestro Tomcat.
2- Se debe de tener bien configurado Genexus con Java.
3- Preferiblemente trabajar en Prototype y no en Design.

Si no lo querememos como Main program si no en un boton del wep form llamado reporte por ejemplo, a eso botón se le agrega el siguiente código:

Event 'Reporte'
&factura=InvoiceID
RReporteInvoice.Call(&Factura)
EndEvent  // 'Reporte'

Donde el evento se llama reporte
el parametro factura ess igual a invoiceid que es la llave primaria de la tabla base
R->Reporte'Nombre_reporte.Call(&parametro) si no hay parametros los paréntesis quedan vacíos'
Fin del evento



lunes, 24 de junio de 2013

XMLAGG con DBMS_XMLDOM


CREATE OR REPLACE PROCEDURE P_XMLDOMAGG IS                                  
CURSOR xmlcur IS                              --se crea el cursor                                                      
SELECT XMLELEMENT (                                                  --se inicia el elemento padre
                        "Divisoft", xmlagg(                                 --se inicia la agrupacion de dep
(SELECT XMLAGG (XMLELEMENT (                                  --se inicia la agrupacion
          "Department",
          XMLAttributes (d.department_name AS "name"),        --se crea el atributo
          (SELECT XMLAGG (                                              --se inicia la agrupacion
                     XMLELEMENT (                                         --se crea un elemento
                        "emp",                                                  
                        XMLAttributes (e.last_name AS name),                --se crea un atributo
                        (SELECT XMLAGG (                                            --se inicia la agrupacion
                                   XMLELEMENT (                           --se crea un elemento
                                      "dependent",   
                                      XMLAttributes (de.name AS "name")))   --se crea un elemento
                           FROM dependents de                           --tabla
                          WHERE de.employee_id = e.employee_id                      --clausula
                          )))
             FROM employees e                               --tabla
            WHERE e.department_id = d.department_id        --clausula
            and  exists(select 1 from dependents z WHERE z.employee_id = e.employee_id)
            )))        --subconsulta
          AS "dept_list"                                                       --alias de la subconsulta
  FROM departments d                                                    --tabla principal
   ))) Planilla                                                                  --alias del query
   from dual;                                                                  --tabla dual
  
XMLDATA XMLTYPE;                                                      --variable xmltype
doc  dbms_xmldom.domdocument;                                        --variable dom
                                 
                                                                                                                   
   BEGIN                                                                       --inicio del bloque
     OPEN xmlcur;                                                                          --se abre el cursor    
     FETCH XMLCUR INTO XMLDATA;                  --se lee el cursor y se mete en la variable xmltype
     CLOSE xmlcur;                                              --cerrar el cursor
     doc  := dbms_xmldom.newdomdocument(XMLDATA); --nuevo documento
     dbms_xmldom.writetofile(doc, 'XMLEXPORT/EMPRESA.xml');     --escribe en el archvo                                                                        
   END;                                                  --fin del bloque
END;                                                     --fin del procedimiento

viernes, 14 de junio de 2013

Importar un XML a una tabla Oracle

CREATE OR REPLACE procedure p_importafromxml(              --se crea el procedimiento
                    pv_tabla  varchar2,                    --se crean los parametros                                          
                    pv_esquema varchar2) is

l_bfile   BFILE;                                                                    --se crea el archivo bfile                                                                               
vv_esquema_tabla varchar2(2000);                                       --se crea la variable esquema tabla
vc_xml clob;                                                                         --se crea la variable clob
vn_registros number;                                                      --se crea la variable de los registros
ctx dbms_xmlsave.ctxtype;                                         --se crea la variable xmlsave

begin                                                                             --inicio del bloque

dbms_lob.createtemporary(vc_xml, cache=>FALSE);   
--se crea un lob.temporary que aproveche todo el clob

  l_bfile := BFileName('XMLEXPORT','datos.xml');                                                 
--a la variable clob se le asigna bfilename (directorio,archivo)
 
  dbms_lob.open(l_bfile, dbms_lob.lob_readonly);                                         
--se hace un lob.open(variable bfile, lob.readonly)

  dbms_lob.loadFromFile(dest_lob => vc_xml,                                                    
--lob.loadfromfile con los parametros correspondientes
                        src_lob  => l_bfile,
                        amount   => dbms_lob.getLength(l_bfile));                             
--lob.getlength (bfile)
  dbms_lob.close(l_bfile);                                 --lob.close(bfile)
   
vv_esquema_tabla:=pv_esquema||'.'||pv_tabla;                                                 
--esquema + tabla

ctx:=dbms_xmlsave.newcontext(vv_esquema_tabla);                                      
--a la variable contexto se le asigna uno nuevo contexto(esquema.tabla)

dbms_xmlsave.setrowtag(ctx,'DATA_RECORD');                                              
--se setea fila y etiqueta(contexto, primera etiqueta del xml)

vn_registros:=dbms_xmlsave.insertxml(ctx,vc_xml);                                         
--a la variable registros se le asigna el xmlsave.insert(contexto,variable clob)
dbms_xmlsave.closecontext(ctx);                       --se cierra el contexto
end;                                                                      --fin del bloque


end p_importafromxml;                                           --fin del procedimiento

jueves, 13 de junio de 2013

Ejemplo de XMLQUERY con subprogramas

CREATE OR REPLACE procedure p_xmlfromquery (     --se crea el procedimiento
                        lv_query varchar,                                            --se crean los parametros
                        LV_DATAFORMA VARCHAR2,                                                              
                        tag_padre varchar2,
                        tag_linea varchar2,
                        resultado out varchar2,
                        gn_registros out number,
                        pn_cod_error out number,
                        pv_error out varchar2) IS
                       
ctx  dbms_xmlquery.ctxHandle;                   --se crea la variable de contexto ctxHandle

BEGIN                                                                      --se inicia el bloque

  --instanciar o iniciar una clase
  ctx := dbms_xmlquery.newContext(lv_query);                                              
--a la variable contexto se le asigna el nuevo contexto(variable de la query)
 if LV_DATAFORMA is not null then                                                                      
--se inicia un ciclo if donde la variable forma no es nula entonces
 DBMS_XMLQUERY.SETDATEFORMAT(CTX,LV_DATAFORMA);                            
--se setea el formato de fecha(contexto, variable data forma)
 end if;                                                     --fin del if
  --setearle valores para definir su comportamiento
 if tag_padre is not null then                      
--se inicia un ciclo if donde la variable de etiqueta padre no es nula entonces
 DBMS_XMLquery.SETROWSETTAG(ctx,tag_padre);                                          
-- se setea la fila y se setea la etiqueta(contexto, tag_padre)
  end if;                                           --fin del if

  if tag_linea is not null then              
--se inicia un ciclo if donde la variable de etiqueta hija no es nula entonces                                     

DBMS_XMLQUERY.SETROWTAG  (ctx,tag_linea);                                             
-- se setea la fila y se setea la etiqueta(contexto, tag_hija)
  end if;                                                    --fin del if

  resultado:=DBMS_XMLQUERY.GETXML(ctx);                                                    
--la variable resultado es el obtiene el xml
 gn_registros:=DBMS_XMLQUERY.GETNUMROWSPROCESSED(ctx);                    
--la variable registros cuenta el numero de celdas procesadas
 -- cerrar o destruir la clase 
  DBMS_XMLQUERY.CLOSECONTEXT(ctx);                                                         
--se cierra o destruye el contexto
exception when  others then                                                                               
--manejo de excepciones
 pn_cod_error:=SQLERRM;                                       --ver el codigo de error
end;                                                                       --fin del bloque
end;                                                                       --fin del procediemiento