martes, 18 de marzo de 2014

Sentencias DML

Las sentencias DML (Data manipulation language) sirven para consultar y manipular datos de los objetos existentes de la base de datos. Estas sentencias no comprometen de forma implícita la transacción actual. 
Las siguientes son las instrucciones DML disponibles en Oracle. 

INSERT: Usar para agregar filas a una tabla existente. 
UPDATE: Se usa para modificar filas existentes en las tablas. 
DELETE: Se utiliza para eliminar filas de las tablas. 
MERGE: Se utiliza para actualizar o insertar filas dependiendo de la condición.


Ejemplos


Comando INSERT

Insert into emp
values
  (101, ’Sami’, ’G.Manager’, ’8 - aug - 1998’, 2000);

Si desea agregar filas con  valores para algunas columnas y  no a todas las columnas, usted tiene que mencionar el nombre de las columnas en las declaraciones de inserción. Por ejemplo:

Insert into emp (empno,ename,sal) values (102,’Ashi’,5000);

Comando UPDATE

update emp set name=’Mohd Sami’,
  sal=sal+(sal*10/100) where empno=102;

Comando DELETE

 delete from emp where empno=102;

Comando MERGE

merge into sales_history sh
   using sales s
   on (s.prod=sh.prod and s.month=sh.month)
when matched then update set sh.amount=s.amount
when not matched then insert values (prod,month,amount);


lunes, 17 de marzo de 2014

Informe XML Publisher con plantilla de datos

No hay necesidad de utilizar la herramienta Oracel Reports  o un procedimiento almacenado por pl/sql  para crear un informe XML en este caso. Aquí vamos a crear una plantilla de datos e incluye nuestra consulta SQL en él. Nosotros vamos a usar el ejecutable (XDODTEXE) para satisfacer nuestras necesidades.

Paso a paso la instrucción para crear un informe utilizando XML plantilla de datos.

1.       Preparar la consulta, en base a sus necesidades de negocio.

En este caso haremos un reporte donde obtendremos las facturas dentro de un rango de fechas

SELECT POV.VENDOR_NAME,
       AIA.INVOICE_ID,
       AIA.INVOICE_NUM,
       AIA.INVOICE_AMOUNT,
       AIA.INVOICE_DATE,
       AIA.PAY_GROUP_LOOKUP_CODE
  FROM AP_INVOICES_ALL AIA, PO_VENDORS POV
 WHERE AIA.VENDOR_ID = POV.VENDOR_ID
   AND AIA.INVOICE_DATE BETWEEN &P_START_DATE AND &P_END_DATE

2.       Definir un archivo XML de plantilla de datos. (Por favor, consulte la plantilla de datos de ejemplo se adjunta a continuación)

Es muy importante para crear la plantilla de datos en el formato correcto. Vamos a ir a través de las diferentes secciones de la misma.

<dataTemplate name>
Nombre de su plantilla de datos, Ejemplo: NOBANK_DD
<parameters>
Agregar parámetros independientes para cada entrada (variable de condiciones) utilizado en la consulta.
<dataQuery>
Su consulta creada anteriormente con variables de enlace adecuados.
<dataTrigger>
(opcional)El trigger que se dispara en un evento (beforereport o afterreport )
<dataStructure>:
Es la estructura de datos de salida XML.

  
Recreado el query debe tener el siguiente esquema

<?xml version="1.0" encoding="WINDOWS-1252" ?>
<!-- $Header: XXTESTGHH.xml 115.0 2013/12/12 GHH $ -->
<!-- dbdrv: none -->

<dataTemplate name="XXTESTGHH" description="Reporte de Facturas" Version="1.0" >
  <parameters>
    <parameter name="P_START_DATE"         dataType="date" />
    <parameter name="P_END_DATE"           dataType="date"/>
  </parameters>
  <dataQuery>
   <sqlStatement name="Q1">
     <![CDATA[
   SELECT POV.VENDOR_NAME,
       AIA.INVOICE_ID,
       AIA.INVOICE_NUM,
       AIA.INVOICE_AMOUNT,
       AIA.INVOICE_DATE,
       AIA.PAY_GROUP_LOOKUP_CODE
  FROM AP_INVOICES_ALL AIA, PO_VENDORS POV
 WHERE AIA.VENDOR_ID = POV.VENDOR_ID
   AND AIA.INVOICE_DATE BETWEEN :P_START_DATE AND :P_END_DATE
     ]]>
   </sqlStatement>  
  </dataQuery>
  <dataTrigger name="beforeReport" source="XXPACKAGE.PROCEDURE" />
  <dataStructure>
  <group name="HEADER" source="Q1">
     <element name="PROVEEDOR"          value="VENDOR_NAME"/>
         <group name="DETAIL" source="Q1">
     <element name="ID_FACTURA"       value="INVOICE_ID"/>
     <element name="NUM_FACTURA"       value="INVOICE_NUM"/>
     <element name="MONTO_FACTURA"     value="INVOICE_AMOUNT"/>
     <element name="GRUPO_SEDE"          value="PAY_GROUP_LOOKUP_CODE"/>  
     </group>  
  </group>
  </dataStructure>
  <dataTrigger name="afterReport" source="XXPACKAGE.PROCEDURE" />
</dataTemplate>

Como no ejecutaremos algún proceso durante el reporte sacaremos los datatriggers quedando el xml de la siguiente forma. Se recomienda usar NOTEPAD++

NOTA: Los DataTriggers son muy importantes por si necesitamos ejecutar un proceso en especial como crear o limpiar una tabla entre otras cosas.



3.        Crear una definición de datos (Ex. código corto: XXTESTGHH) en la aplicación de prueba.

  Ir al  Navegador: Administrador de XML Publisher à Página Inicial à Definiciones de los datos à Crear definición de datos



Una vez creado. Adjunte el archivo XML  a plantilla de datos anteriormente creada a ella como una planilla de datos.


Grabar y volver al Administrador de sistemaàProgramaàDefinir

4.       Registrar el procedimiento concurrente en el EBS (programa concurrente código corto: XXTESTGHH) de la siguiente manera


Igualmente para cada parámetro



Tener en cuenta El token(Señal) de parámetros del programa concurrente debe coincidir con el nombre del parámetro de la plantilla de datos.

5.       Agregar programa concurrente para el grupo de solicitud.


6.       Ejecute el informe y guardar la salida como sample.xml




7.       Crear una plantilla rtf (XXTESTGHH.rtf) en MS Word basado en sample.xml (usando BI Publisher Escritorio)


8.       Definir una plantilla en la aplicación de prueba.

Ir al  Navegador: Administrador de XML Publisher à Página Inicial à Plantillas à Crear Plantilla

·         Consulte la misma definición de datos creado anteriormente (código corto: XXTESTGHH).
·         Coloque la plantilla rtf anteriormente creada (XXTESTGHH.rtf) para esta plantilla.
·         Seleccione "Tipo de salida predeterminado" según necesidad.


9.       Ejecute el programa Concurrente de nuevo para obtener el resultado deseado.









Como Encontrar el archivo log de OPP - XML Publisher

Cuando La Solicitud Concurrente termina con la fase 'Completado' y estado 'Advertencia', indica que el procesador Mensaje de salidas o Output Post Processor  (OPP) no logró generar el archivo de salida.


En tales casos, el archivo log muestra un mensaje de error genérico que indica la acción que ha fallado.
...

+------------- 1) PUBLISH -------------+

Beginning post-processing of request 3181343 on node FINAPPS at 25-OCT-2011 11:41:30.
Post-processing of request 3181343 failed at 25-OCT-2011 11:41:31 with the error message:
One or more post-processing actions failed. Consult the OPP service log for details.
+--------------------------------------+
... 

El error real es devuelto por el XML Publisher Core  en el archivo de registro de OPP.  Una de las manera más fácil de obtener el archivo de registro de OPP es ejecutar el siguiente comando en la base de datos el cual debemos introducir como parámetro el request_id.
SELECT fcpp.concurrent_request_id req_id, fcp.node_name, fcp.logfile_name                                           FROM fnd_conc_pp_actions fcpp, fnd_concurrent_processes fcp                                                                WHERE fcpp.processor_id = fcp.concurrent_process_id                                                                           AND fcpp.action_type = 6                                                                                                                       AND fcpp.concurrent_request_id = &request_id;
Como resultado se obtendrá la ubicación del archivo  a continuación:
/u01/app/inst/apps/NZAPPS/logs/appl/conc/log/FNDOPP10981694.txt
Luego uno debe ir a la ruta del servidor de Base de datos y tener el archivo de registro de OPP 
Método alternativo: 
Obtención del Log del OPP desde el EBS . 
a. Ir Administrador del sistema> Concurrente> Gerente> Administrar 
b. Buscar 'Procesador Posterior de Output' 
c. Haga clic en el botón 'Procesos' 
d. Haga clic en el botón Registro de Administrador. Esto abrirá el "OPP" 
e. Verificar el archivo log de OPP.