Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Problema con create type en Oracle 9i

Estas en el tema de Problema con create type en Oracle 9i en el foro de Oracle en Foros del Web. hola como estan, tengo un problema al crear un tipo de dato en Oracle 9i, ocupo Aqua studio para conectarme: ej: CREATE OR REPLACE TYPE ...
  #1 (permalink)  
Antiguo 23/05/2006, 17:48
 
Fecha de Ingreso: abril-2006
Mensajes: 36
Antigüedad: 18 años, 7 meses
Puntos: 0
Problema con create type en Oracle 9i

hola como estan, tengo un problema al crear un tipo de dato en Oracle 9i, ocupo Aqua studio para conectarme:

ej:

CREATE OR REPLACE TYPE hola AS NUMBER

me sale el siguiente error:

"Database object (FUNCTION) in SQL command required".

ademas no se como ocuparlo por ejemplo en un procedimiento almacenado...

de antemano gracias
  #2 (permalink)  
Antiguo 24/05/2006, 08:20
Avatar de PequeñoMauro  
Fecha de Ingreso: abril-2006
Ubicación: Lima - Perú
Mensajes: 600
Antigüedad: 18 años, 7 meses
Puntos: 3
Hola lesancor, los TYPE vienen a ser como arrays en un lenguaje de programación, y debe declararse como tal en el procedimiento.
Más o menos un ejemplo:



CREATE OR REPLACE PROCEDURE nombre_proc

TYPE tu_variable IS TABLE OF number(5)
INDEX BY BINARY INTEGER;
.....

En este caso TYPE viene a ser como un tipo de dato, y bueno también te puedo decir que hay 3 tipos de TYPE, pero creo que este te ayudara a lo que deseas.
Saludos, cualquier consulta puedes mandar un mensaje....
__________________
"Nada en mis manos traigo tan solo a tu cruz me aferro....."
  #3 (permalink)  
Antiguo 24/05/2006, 09:12
 
Fecha de Ingreso: abril-2006
Mensajes: 36
Antigüedad: 18 años, 7 meses
Puntos: 0
ok

entendido pero tengo otro problema, ejemplo:


CREATE OR REPLACE FUNCTION F_INSERTAR_GENERAL
(p_DESCRIPCION IN JSP_PRUEBA.DESCRIPCION%TYPE)
RETURN VARCHAR2
IS
v_mensaje varchar2;
BEGIN
v_mensaje := 'mensaje';
RETURN v_mensaje;
END;


me tira el siguiente error:

PLS-00215: Las restricciones de longitud de cadena deben estar en el rango (1 .. 32767)

se lo que significa pero, quiero definir un tipo propio para la variable "v_mensaje" de tipo varchar2 para dar mas significado (pe:un tipo "mensaje"), ¿donde lo hago? ¿como?, despues de crearlo ¿como lo utilizo? ya que no he podido hacerlo funcionar...

gracias de antemano...
  #4 (permalink)  
Antiguo 24/05/2006, 09:37
Avatar de PequeñoMauro  
Fecha de Ingreso: abril-2006
Ubicación: Lima - Perú
Mensajes: 600
Antigüedad: 18 años, 7 meses
Puntos: 3
La función esta bien, lo que te pide es que le pongas un rango. Cuando es un parámetro no es necesario especificarlo, pero cuando declaras la variable si.

Al declarar tu variable: v_mensaje varchar2;
Debes ponerle un rango

v_mensaje varchar2(50);

Espero que te ayude.
Saludos
__________________
"Nada en mis manos traigo tan solo a tu cruz me aferro....."
  #5 (permalink)  
Antiguo 24/05/2006, 09:57
 
Fecha de Ingreso: abril-2006
Mensajes: 36
Antigüedad: 18 años, 7 meses
Puntos: 0
ok, entendido...

pero...

como le hago para definir un tipo, osea, en vez de declarar en mi funcion:

v_mensaje varchar(50);

pueda poner:

v_mensaje mensaje;

ahi es donde esta mi problema, se que deberia crear un tipo "mensaje":

CREATE OR REPLACE TYPE mensaje AS VARCHAR2(50)

eso esta bien??? donde lo ocupo..

disculpen tanta preguntadera pero soy nuevo en oracle...
  #6 (permalink)  
Antiguo 24/05/2006, 10:04
Avatar de PequeñoMauro  
Fecha de Ingreso: abril-2006
Ubicación: Lima - Perú
Mensajes: 600
Antigüedad: 18 años, 7 meses
Puntos: 3
No hay problema lesancor. Como te comentaba lineas arriba, TYPE no se declara de esa manera, si quieres usar un tipo de dato TYPE, debes declararlo dentro de la función:

CREATE OR REPLACE FUNCTION F_INSERTAR_GENERAL
(p_DESCRIPCION IN JSP_PRUEBA.DESCRIPCION%TYPE)
RETURN VARCHAR2
IS

TYPE mensaje IS TABLE OF varchar2(50)
INDEX BY INTEGER;
v_mensaje mensaje;

BEGIN
v_mensaje := 'mensaje';
RETURN v_mensaje;
END;

La forma que estas declarando el TYPE es para los PROCEDURES, PACKAGE y FUNCTIONS. Los TYPE tienen otra sintaxis.
Si gustas te puedo dar un manual de Oracle, pero esta en ingles, y puedes revisarlo, es bastante grande tiene más de 500 páginas.
Saludos, espero haberte ayudado
__________________
"Nada en mis manos traigo tan solo a tu cruz me aferro....."
  #7 (permalink)  
Antiguo 24/05/2006, 10:07
Avatar de PequeñoMauro  
Fecha de Ingreso: abril-2006
Ubicación: Lima - Perú
Mensajes: 600
Antigüedad: 18 años, 7 meses
Puntos: 3
Me falto especificar que en este caso, la variable v_mensaje actuaria como un array y debes guardar tus datos como array, usando un indice:

v_mensaje(1):='MENSAJE 1';
v_mensaje(2):='MENSAJE 2';
__________________
"Nada en mis manos traigo tan solo a tu cruz me aferro....."
  #8 (permalink)  
Antiguo 24/05/2006, 10:54
 
Fecha de Ingreso: abril-2006
Mensajes: 36
Antigüedad: 18 años, 7 meses
Puntos: 0
ok

seria de gran ayuda el manual...


como me lo haces llegar??

por siaca mi correo es [email protected].
  #9 (permalink)  
Antiguo 24/05/2006, 11:15
 
Fecha de Ingreso: abril-2006
Mensajes: 36
Antigüedad: 18 años, 7 meses
Puntos: 0
otra cosa, muyyy importante

como ejecuto un procedimiento o funicon??

SELECT * FROM nombre_de_procedimiento(parametros)
SELECT * FROM nombre_de_funcion(parametros)

estaria bien asi??
  #10 (permalink)  
Antiguo 24/05/2006, 11:32
Avatar de PequeñoMauro  
Fecha de Ingreso: abril-2006
Ubicación: Lima - Perú
Mensajes: 600
Antigüedad: 18 años, 7 meses
Puntos: 3
Listo compañero, ya te mande el manual.

La forma de ejecutar la función sería:
SELECT tu_funcion(parámetros) FROM tu_tabla;
Todo depende, te digo esto por que si, tus parámetros son campos de una tabla, entonces usas la tabla como en el caso de arriba, pero si vas a mandar valores estáticos, lo harias:

SELECT tu_funcion('01') FROM dual; --
Si la función recibe parámetros, debes especificarle que valores tendrá, ya sea el campo de una tabla y un valor en común, y en un SELECT vendría a ser como un campo más.
Saludos
__________________
"Nada en mis manos traigo tan solo a tu cruz me aferro....."
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:11.