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

igualar el contenido de una columna, en otra columna, pero de otra tabla

Estas en el tema de igualar el contenido de una columna, en otra columna, pero de otra tabla en el foro de Oracle en Foros del Web. Hola, podrán ayudarme con esto por favor? Necesito igualar el contenido de una columna, en otra columna, pero de otra tabla. la tabla "desde_ap" que ...
  #1 (permalink)  
Antiguo 18/04/2013, 15:37
 
Fecha de Ingreso: octubre-2011
Ubicación: Merlo
Mensajes: 18
Antigüedad: 13 años, 1 mes
Puntos: 1
igualar el contenido de una columna, en otra columna, pero de otra tabla

Hola, podrán ayudarme con esto por favor?


Necesito igualar el contenido de una columna, en otra columna, pero de otra tabla.


la tabla "desde_ap" que tiene una columna "pointname" con este texto:
SUR_3L_GOD____V Tensión Linea 132kV- ----> tiene mas de 15 caracteres


la tabla "desde_collect" tiene una columna "tag" con este texto:
SUR_3L_GOD____V ---> tiene 15 caracteres, ESTO ES LO QUE ME SIRVE


hasta ahí no hay problemas, lo hago con substr('pointame',1,15) y me devuelve los primeros 15 caracteres, perfecto.


pero hay otros registros de la tabla "desde_ap" que no tiene el mismo formato, por ej:
ALB_24_AL_COR LIBRE


cuando hago el substr('pointname', 1,15) me queda:
ALB_24_AL_COR L


y necesito que quede esto:
ALB_24_AL_COR

tendrán alguna idea de como emparejarlo!, seguro con un procedure o función.


Este es el query:

Código sql:
Ver original
  1. SELECT
  2. DISTINCT a.pointnumber,
  3. a.tag,
  4. b.pointname,
  5. a.TYPE,
  6. b.pointnumber
  7. FROM desde_collect a, desde_ap b
  8. WHERE substr(a.tag, 1,15) = substr(b.pointname,1,15)
  9. GROUP BY a.pointnumber, a.tag, b.pointname, a.TYPE, b.pointnumber
  10. ORDER BY a.tag, b.pointname
  11. ASC;

Muchas gracias!

Última edición por gnzsoloyo; 18/04/2013 a las 20:35
  #2 (permalink)  
Antiguo 19/04/2013, 00:00
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 17 años, 6 meses
Puntos: 43
Respuesta: igualar el contenido de una columna, en otra columna, pero de otra tabla

No entiendo muy bien, pero si lo que quieres es sacar todo lo que está antes del espacio en blanco, lo tienes facil, combian la funcion SUBSTR con la funcion INSTR

Código SQL:
Ver original
  1. SQL> SELECT substr ('ESTO_ES_UNA_PRUEBA DE_FUNCIONES',1,
  2.   2  INSTR( 'ESTO_ES_UNA_PRUEBA DE_FUNCIONES',' ')-1) AS PRUEBA
  3.   3  FROM DUAL;
  4.  
  5. PRUEBA
  6. ------------------
  7. ESTO_ES_UNA_PRUEBA
  8.  
  9. SQL>
  #3 (permalink)  
Antiguo 19/04/2013, 05:51
 
Fecha de Ingreso: octubre-2011
Ubicación: Merlo
Mensajes: 18
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: igualar el contenido de una columna, en otra columna, pero de otra tabla

Gracias por la respuesta.

Lo pruebo y te comento luego,

Saludos
  #4 (permalink)  
Antiguo 19/04/2013, 10:10
 
Fecha de Ingreso: octubre-2011
Ubicación: Merlo
Mensajes: 18
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: igualar el contenido de una columna, en otra columna, pero de otra tabla

gracias, funcionó perfecto.

Ahora, como hago para barrer todos los campos 'pointnumber' de una tabla, aplicando a esa columna la combinacion SUBSTR INSTR ?

Estoy probando esto pero no funciona:
Código SQL:
Ver original
  1. DECLARE
  2. cursor c_cur
  3. IS
  4. SELECT pointname FROM desde_ap;
  5.  
  6. v_cur c_cur%ROWTYPE;
  7. --v_convert INTEGER;
  8.  
  9. BEGIN
  10. v_sql:= ''
  11.     OPEN C_CUR;
  12.        
  13.         loop
  14.         FETCH C_CUR INTO V_CUR;
  15.         EXIT WHEN c_cur%NOTFOUND;
  16.             SELECT (substr ('|| v_cur ||',1,
  17.             INSTR( '|| v_cur ||',' ')-1)) FROM dual;
  18.         END loop;
  19.         DBMS_OUTPUT.PUT_LINE(v_cur.pointname);
  20.        
  21.     close c_cur;
  22. END;

Última edición por gnzsoloyo; 19/04/2013 a las 10:45 Razón: usar HIGHLIGHT "SQL"

Etiquetas: funcion, oracle11g, pl-sql, procedure, sql
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 00:55.