sintaxis

Procedures, Packages y Oracle PL/SQL

Saludos

Estoy comenzando en estos de las Base de Datos de Oracle mi problematica es la siguiente:

He creado el siguiente procedimiento a travez de Enterprise Manager (Consulta):

CREATE OR REPLACE PROCEDURE ver_orden(ordenv number) 
is  
 v_output_file1 utl_file.file_type;   
 orden  Varchar2 (10); 
 cliente       Varchar2 (10);    
 Referencia Varchar2 (10);    
begin   
v_output_file1 := utl_file.fopen('TEST_DIR', 'miguel.txt', 'W'); v_output_file1 := utl_file.fopen ('test_dir', 'miguel.txt', 'W');   
  select t$orno, t$cuno ,t$refe into orden, cliente, referencia from ttdsls928100 where orden=ordenv;  
 DBMS_OUTPUT.PUT_LINE('Orden:'||orden|| 'Cliente:' ||Cliente|| 'Referencia' ||referencia);  
 EXCEPTION  
    WHEN NO_DATA_FOUND THEN  
       DBMS_OUTPUT.PUT_LINE('No hemos encontrado ordenes');   
utl_file.fclose_all; utl_file.fclose_all;    
end;  

 

Cuando lo compilo me indica que no tiene errores.

Luego en el Oracle Scheduler > Trabajos

Creo un trabajo para ejecutar llamando este procedimiento:

begin;
  execute ver_orden('25030');
end;

Cuando ejecuto el trabajo me da un error:

Cómo hacer un DECODE en los mappings de OWB

Para los que estamos acostumbrados a utilizar el operador decode del SQL de Oracle sorprende bastante que no esté incluída en la sintaxis que se puede utilizar dentro del generador de expresiones de Oracle Warehouse Builder.

Pero todo tiene solución. Si para un campo se quiere seleccionar un valor en función del contenido de otro o más campos, se puede utilizar el objeto EXPRESSION, conectar en la entrada todos los campos implicados, y en la expresión del campo de salida olvidarnos del DECODE y utilizar en su lugar un CASE WHEN ..., que sí está soportado.

Por ejemplo:
CASE WHEN entrada1 = 0 THEN 'Falso'
        WHEN entrada2 = 1 THEN 'Cierto'
        ELSE 'Indefinido'
END

La sintaxis del operador IN en Cognos

Dentro de los informes de Cognos, cuando se definen filtros, aunque la mayoría de las condiciones se pueden expresar con SQL estandard, resulta que cuando quieres comparar un valor con una lista, es decir, cuando quieres utilizar el operador IN, la sintaxis no es la misma que la de SQL.

En lugar de la coma que separa los diferentes valores hay que poner un punto y coma.

Ejemplo:

  • La condición que en SQL sería:
      WHERE campo IN ('valor_1', 'valor_2', 'valor_n')
  • En un filtro de Cognos Report Studio se ha de poner como
      [campo] IN ('valor_1' ; 'valor_2' ; 'valor_n')
  • Y si estamos filtrando miembros de una dimensión o jerarquía tenemos que utilizar también una sintaxis diferente
      [nivel_jerarquia] IN ([miembro_1] , [miembro_2] , [miembro_n])

Es algo muy tonto, pero si no lo sabes puede llegar a desesperarte bastante..

Distribuir contenido

 

 

 

Gestion del Conocimiento    |    Business Intelligence y Analítica    |     Bases de Datos    |      ERP     |      CRM      |     Tendencias tecnológicas