Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Script común para BD Oracle y SQL Server -- ¿sensible a mayúsculas?


Buenas tardes,

Tengo un documento que mediante un ODBC se conecta a una base de datos. Esta base de datos puede ser Oracle o Sql Server. Las dos con igual estructura de base de datos, logicamente.

En Oracle el nombre de las tablas están en mayúsculas y en Sql Server en minúsculas.

Cuando recargo el script me da error en Sql Server, no me reconoce el nombre de los campos ni tablas. Si los cambio a minúsculas ya me funciona correctamente.

¿Qué puedo hacer para que el documento sea común para las dos bases de datos?

Muchas gracias y saludos.

1 Solution

Accepted Solutions
maxgro
MVP
MVP

remove double quotes "

modify

SQL SELECT *

FROM INTEGRA."iest_periodoproceso_pepr"


to

SQL SELECT *

FROM INTEGRA.iest_periodoproceso_pepr


View solution in original post

8 Replies
maxgro
MVP
MVP

1)

perhaps you can try with lowercase in Oracle and lower case in Sql Server

In my Oracle this works

select ename from emp

and this works too

select ENAME from EMP

Not applicable
Author

Es en el LOAD donde me falla.


Si recargo esto contra ORACLE me da error:

LOAD "pepr_id",
    "pepr_anio",
    "pepr_mes",
    "pepr_autp_id";
SQL SELECT *
FROM INTEGRA."iest_periodoproceso_pepr";

El error es el siguiente:

SQL##f - SqlState: S0002, ErrorCode: 942, ErrorMsg: [Oracle][ODBC][Ora]ORA-00942: la tabla o vista no existe

SQL SELECT *
FROM INTEGRA."iest_periodoproceso_pepr"

Si cambio el nombre de la tabla y de los campos del LOAD a mayúsculas me recarga correctamente.

En cambio contra SQL Server recarga correctamente tal cual el ejemplo.

En ORACLE las tablas y nombres de campos en bbdd están en mayúsculas.

En SQL Server las tablas y nombres de campos en bbdd están en minúsculas.

¿No puede haber alguna solución para que los scripts sean comunes para ambas bases de datos?

Muchas gracias y saludos.

maxgro
MVP
MVP

remove double quotes "

modify

SQL SELECT *

FROM INTEGRA."iest_periodoproceso_pepr"


to

SQL SELECT *

FROM INTEGRA.iest_periodoproceso_pepr


Not applicable
Author

Muchas gracias. El nombre de la tabla ya lo reconoce, pero el LOAD sigue fallando. He probado también a quitar los "", pero sigue fallando:

LOAD pepr_id,
   
pepr_anio,
   
pepr_mes,
   
pepr_autp_id;
SQL SELECT *
FROM INTEGRA.iest_periodoproceso_pepr;

Campo no encontrado - <pepr_id>

SQL SELECT *

FROM INTEGRA.iest_periodoproceso_pepr

Gracias de nuevo

maxgro
MVP
MVP

I think because it read from the db (SQL select .....) without error but the field name are uppercase and in the LOAD part field names are lowercase  

perhaps this can help you

Force Case lower;

LOAD pepr_id,
   
pepr_anio,
   
pepr_mes,
   
pepr_autp_id;
SQL SELECT *
FROM INTEGRA.iest_periodoproceso_pepr;



from online help

The force statement forces QlikView to interpret field values of subsequent Load and Select (SQL) statements as written with only upper case letters, with only lower case letters, as always capitalized or as they appear (mixed). This statement makes it possible to associate field values from tables made according to different conventions.

The syntax is:

force ( capitalization | case upper | case lower | case mixed )


Not applicable
Author

No funciona...

He hablado con el soporte de QlikView y creen que no puede funcionar teniendo en una base de datos las tablas en mayúsculas y la otra en minúsculas.

Not applicable
Author

Al final lo he conseguido de la siguiente manera.

Quitando el SELECT * por el nombre de los campos que necesito:

Me daba error al hacer la recarga:

LOAD "PEPR_ID" as IdPeriodo,
   
"PEPR_ANIO" as Anyo,
   
"PEPR_MES" as Mes,
   
"PEPR_AUTP_ID" as CodAP;
SQL SELECT *
FROM INTEGRA."IEST_PERIODOPROCESO_PEPR";

Me funciona correctamente tanto para SQL Server como para Oracle:

LOAD "PEPR_ID" as IdPeriodo,
   
"PEPR_ANIO" as Anyo,
   
"PEPR_MES" as Mes,
   
"PEPR_AUTP_ID" as CodAP;
SQL SELECT PEPR_ID, PEPR_ANIO, PEPR_MES, PEPR_AUTP_ID
FROM INTEGRA."IEST_PERIODOPROCESO_PEPR";

Gracias.

maxgro
MVP
MVP

I finally had some time and I tried with 2 true database (Oracle at the top and Sql Server at the bottom in my script)

- and with FORCE case

- and without double quote in the sql part

it worked

FORCE case lower;

OLEDB CONNECT32 TO [Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=xxxx;Data Source=XXXXX;Extended Properties=""] (XPassword is UAZXDaVMTDdGP);

table:

load

  empno, ename, job, 'Oracle' as db

  ;

SQL

  select empno, ename, job from emp

  ;

OLEDB CONNECT TO [Provider=SQLOLEDB.1;Persist Security Info=True;User ID=xx;Initial Catalog=xxxxx_xxxx;Data Source=xx.x.x.xxx;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Use Encryption for Data=False;Tag with column collation when possible=False] (XPassword is COJaXVVMZLLB);

Concatenate (table)

load

  empno, ename, job, 'Sql Server' as db

  ;

SQL

  select empno, ename, job from emp

  ;

oracle and sqlserver case.jpg