Oracle

Buenas!
Tengo una aplicación con el interfaz visual en access y he migrado las tablas de este a oracle.
Las tengo ya definidas, creadas y cargadas con datos las tablas en el servidor de oracle, pero a la hora de comprobar que sigue haciendo lo mismo la aplicación, es decir, si debe buscar por un campo, por ejemplo, por apellido, he definido ese campo como un CHAR(20), si el apellido a buscar es "PEREZ", no me lo encuentra sino escribo PEREZ+15espacios en blanco, el total de 20 caracteres que he definido el campo o por ejemplo a la hora de mostrar el apellido, no muestra el "PEREZ" solamente, sino que muestra los 20 caracteres del campo, desplazando cualquier otro dato que deba mostrar los 15 caracteres que sobran del campo en blanco, en este caso.
Debe ser por alguna cosilla al definir los campos de las tablas o algo así.
Para que veas un ejemplo de como las he definido:
create table clientes
(Id NUMBER primary key,
NOMBRE CHAR(20),
APELLIDO1 CHAR(20),
APELLIDO2 CHAR(20),
EDAD NUMBER,
FECHA_NACIMIENTO DATE;
COMENTARIOS VARCHAR2(2000)
);
//TABLA CREADA
CREATE SEQUENCE SEC_CLIENTES
START WITH 1
INCREMENT BY 1;
CREATE OR REPLACE TRIGGER trigger_CLIENTES BEFORE INSERT
ON CLIENTES
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
SELECT SEC_CLIENTES.nextval INTO :NEW.Id FROM dual;
END;
/
//SECUENCIA Y TRIGGER PARA CAMPO AUTONUMERICO (Id) CREADOS
CREATE INDEX IN_CLIENTES ON CLIENTES(APELLIDO1);
//INDICE AL CAMPO APELLIDO1 CREADO
Por favor si me pudieras echar una mano ya que en esto de oracle soy bastante novato y no se que hacer, si debe ser alguna sentencia al crear la tabla, ¿los campos o el que?
Muchas gracias de ante mano.
Un saludo.

3 respuestas

Respuesta
1
Utilioza VARCHAR2 para todos los campos de longitud variable (nombre, apellidos, etc..). Si utilizas CHAR ORACLE pensasrá que son registros de longitud fija, y por eso te añade espacios al final.
Buenas!
Gracias por contestar, y tan pronto! Pero una cosilla, si cambio los campos por varchar2, aunque sean varchar2(20), ¿eso no crea campos memo? Lo digo porque si luego tengo que realizar comparaciones con otros datos etc eso no dará problemillas, por ejemplo si busco por apellido, "PEREZ" y quiero realizar una serie de procedimientos, añadirles "PEREZ lo que sea" en el campo o realizar cualquier cosa, ¿no da problemas? ¿No pasa nada por tener campos memo tan cortos (de 20 o de 50 por ejemplo)?
Un saludo.
Los campos memo son excusivos de access.
En principio siempre puedes actualizar un campo de oracle añadiendo a "PEREZ", por ejemplo, más caracteres del tipo "PEREZLoquesea" con el límite por supuesto del tamaño del campo.
Las consultas funcionan igual que con un campo CHAR.
Respuesta
1
Creo que el problema es el siguiente esta en la definición de los campos CHAR(20) .
Char es un tipo de campo de como máximo 30 caracter y es fijo en cambio VARCHAR es de longitud variable. Es decir al declarar CHAR si este no llega a 30 caracteres te convierte al insertar un dato por ejemplo de 10 el resto lo deja en blanco y al procesarlo el triger no te funciona.
Yo creo que es básicamente eso. Recrea de nuevo la tabla pero con VARCHAR2 que es variable y le puedes llegar a poner 200 como en comentarios pero no te dejara los espacios en blanco por eso te pide que le de el nombre más 15 espacios :).
Respuesta
1
En tu creación de tabla debes utilizar el tipo de dato varchar2 para las columnas nombre, apellido1 y apellido2.
El tema es que el tipo de dato char reserva los espacios hasta el tamaño de longitud.
Prueba crear de vuelta la tabla cambiano los tipo de dato char por varchar2 y te funcionara correctamente.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas