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

creacion de procedure

Estas en el tema de creacion de procedure en el foro de Oracle en Foros del Web. Hola, tengo que hacer algunas cosas con oracle pero no tengo mucha experiencia., Tengo que hacer un proceso que recibe una cadena con el delimitador ...
  #1 (permalink)  
Antiguo 18/10/2009, 07:26
Avatar de magam  
Fecha de Ingreso: julio-2006
Ubicación: Florencio Varela, Buenos Aires, Argentina
Mensajes: 97
Antigüedad: 17 años, 9 meses
Puntos: 1
creacion de procedure

Hola, tengo que hacer algunas cosas con oracle pero no tengo mucha experiencia.,
Tengo que hacer un proceso que recibe una cadena con el delimitador ; por ejemplo

1111111;22222222;Y

lo que tengo que hacer es sacar este string en tres variables distintas. (la dimension del 1111, 2222 es variable)
luego con estas tres variables almacenadas.
tengo que buscar 1111 y 222222 en una tabla. si estan tengo que actualziar la tabla con el valor Y en un campo.
sino tengo que insertar este string en un archivo de tipo .ls
me podria ayudar por favor con esta situacion?
tengo que hacer algo asi..
procedure xxxx (1111111;222222;Y)

begin

sacar en una variabla 1111111;
sacar en una vcariable 222222;
sacar en una variable Y;

---buscar los datos
select count(1)
into v_exsite
from tableName
where variableDeunos = nombre campo
and variableDeDos = nombre campo

if v_existe then
update tableName
set campoTable = varibaleY
where variableDeunos = nombre campo
and variableDeDos = nombre campo

else
insertar estos valores en el archivo .ls (noi se como hacerlo.)


muchas gracias a quien pueda ayudarme...
  #2 (permalink)  
Antiguo 19/10/2009, 01:29
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Respuesta: creacion de procedure

Te contesto a la primera parte, la segunda no la entiendo.
Asumiendo que la dimension del 1111, 2222 es variable pero siempre vas a tener 3 cadenas separadas por comas ( XXXX,YYYY,Z ó A,BBBBBBBB,CCCCCCCCC etc etc etc ) lo tienes facil.

Haces un substr desde la posición 1 hasta donde se encuentre la primera coma ( funcion instr ), despues haces lo mismo, pero en lugar de empezar desde la posicion 1, empiezas desde la posicion en la que has capturado la primera coma hasta donde está la segunda y para terminar desde la posicion de la segunda coma hasta el final de la cadena.
Tienes que jugar con las funciones SUBSTR e INSTR, no se si te ha quedado claro.
  #3 (permalink)  
Antiguo 21/10/2009, 08:31
Avatar de 8vio  
Fecha de Ingreso: marzo-2008
Ubicación: Detras del monitor
Mensajes: 168
Antigüedad: 16 años
Puntos: 6
Respuesta: creacion de procedure

jejeje estas de suerte:


Esta funcion hace lo mismo pero para separacione por , en el if (IF (SUBSTR(iCltinstanceIds,intCont,1)) = ',' THEN) cambia la coma por un ;. Lo unico es que el ultimo valor debe llevar un ; al final.


En esta variable se guardara cada string intCltinstanceId.

Estudialo y veras que es muy sencillo


Código:
DECLARE

intCont             INTEGER DEFAULT 1; -- Contador de caracteres de iCltinstanceIds
intPosIni           INTEGER DEFAULT 1; -- Posición inicial de cada string (contrato) por iteración
intPosFin           INTEGER DEFAULT 0; -- Posición final de cada string (contrato) por iteración
intExist            INTEGER DEFAULT 0; -- Validador de contratos 
iCltinstanceIds     VARCHAR2(64);
intCltinstanceId    VARCHAR2(64);  
BEGIN
   
   iCltinstanceIds := 'prueba1,prueba2,prueba3,';
   -- Verificamos cada caracter del string
   WHILE intCont <= LENGTH(iCltinstanceIds) LOOP
    
      -- si el caracter es una coma (,)
      IF (SUBSTR(iCltinstanceIds,intCont,1)) = ',' THEN

         -- Cada identificador contenido en iCltinstanceIds
         intCltinstanceId := trim(substr(iCltinstanceIds,intPosIni,intPosFin));
         DBMS_OUTPUT.PUT_LINE(intCltinstanceId);
         intPosIni := intCont + 1;          
         intPosFin := 0;
      
      -- Si el caracter actual no es coma (,) 
      ELSE  
            
         intPosFin := intPosFin + 1;
      
      END IF;
     
      intCont:= intCont+1;

   END LOOP;
   
END;

Saludos y suerte
  #4 (permalink)  
Antiguo 21/10/2009, 13:45
Avatar de magam  
Fecha de Ingreso: julio-2006
Ubicación: Florencio Varela, Buenos Aires, Argentina
Mensajes: 97
Antigüedad: 17 años, 9 meses
Puntos: 1
Respuesta: creacion de procedure

Muchas gracias por la ayuda.
ya lo he hecho aca paso lo que hice por si a alguien le sirve.

Cita:
--toma la primer variable
SELECT SUBSTR('adsasdasd;2342342;tgtgt', 1, (SELECT INSTR('adsasdasd;2342342;tgtgt', ';', 1, 1 )
FROM DUAL)-1)
INTO v_type
FROM DUAL;


--Toma la segunda variable
SELECT SUBSTR('adsasdasd;2342342;tgtgt', INSTR('adsasdasd;2342342;tgtgt',';', 1, 1)+1,
INSTR('adsasdasd;2342342;tgtgt',';',1,2)-INSTR('adsasdasd;2342342;tgtgt',';',1,1)-1)
INTO v_code
FROM dual;


---Toma el valor para TEST_LINE
SELECT SUBSTR('adsasdasd;2342342;tgtgt', INSTR('adsasdasd;2342342;tgtgt',';', 1, 2)+1)
INTO v_test_line
FROM dual;
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 03:32.