Oracle - Elimnar la coma sobrante de String

 
Vista:
sin imagen de perfil
Val: 17
Ha aumentado 1 puesto en Oracle (en relación al último mes)
Gráfica de Oracle

Elimnar la coma sobrante de String

Publicado por Alejandro (10 intervenciones) el 12/09/2018 14:34:27
Hola Amigos del Foro

Les cuento tengo un plsql donde tengo una variable que guarda un string, la varible esta en negrita y el la coma que debo eliminar también.

El problema es en la salida ya que me deja una coma inicial justo despues del select:
select ,columna1,columna2,columna3,columna4 from tabla

Favor me pueden ayudar a resolver esto para ejecutar un sql dinámico.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
BEGIN
    FOR r_cur_obt_tab IN c_obt_tab
    LOOP
        lv_select_col := NULL;                              -- limpio variable
        FOR r_cur_obt_col IN c_obt_col (r_cur_obt_tab.bafuin_nmb_tab)
        LOOP
            lv_select_col := lv_select_col || ',' || r_cur_obt_col.badida_nmb_tec_col;
        END LOOP;
 
        DBMS_OUTPUT.PUT_LINE (
               'SELECT '
            || lv_select_col
            || ' FROM '
            || r_cur_obt_tab.bafuin_nmb_tab);
    END LOOP;
END;

Muchas Gracias por su colaboración
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 499
Oro
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

Elimnar la coma sobrante de String

Publicado por Rafael (328 intervenciones) el 13/09/2018 08:56:22
Vamos a ver el problema es que el primer campo que ligas ... en automatico pega la coma...

Luego entonces lo que deberia ocurrir es que la primer vez no ligue nada...

Partiendo de este concepto puedes dejar tu codigo similar a esto:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
BEGIN
    FOR r_cur_obt_tab IN c_obt_tab
    LOOP
        lv_select_col := NULL;                              -- limpio variable
        lv_separador := '';                                       -- necesitas esta otra variable, declarala...
        FOR r_cur_obt_col IN c_obt_col (r_cur_obt_tab.bafuin_nmb_tab)
        LOOP
            lv_select_col := lv_select_col ||  lv_separador || r_cur_obt_col.badida_nmb_tec_col;
            lv_separador := ',';
        END LOOP;
 
        DBMS_OUTPUT.PUT_LINE (
               'SELECT '
            || lv_select_col
            || ' FROM '
            || r_cur_obt_tab.bafuin_nmb_tab);
    END LOOP;
END;

De este modo el primer campo el valor del separador es nada '' .... con lo cual NO liga la coma.
Al siguiente paso (campo 2 y subsecuentes) el valor del separador ya es la coma... pues entonces si la liga...

OJO esta variable NO esta declarada, donde declaraste lv_select_col declara lv_separador....


Nos cuentas como te fue???


Pd. Si te ha servido esta info a mi me sirve un +1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de gilman
Val: 117
Bronce
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

Elimnar la coma sobrante de String

Publicado por gilman (52 intervenciones) el 13/09/2018 08:59:45
Prueba:
1
lv_select_col := substr(lv_select_col ,2);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Antonio
Val: 42
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

Elimnar la coma sobrante de String

Publicado por Antonio (13 intervenciones) el 29/10/2018 13:52:59
Hola:
Sabes, este problema también lo he enfrentado, pero mi problema era un poquitico más complejo, mi cadena, que separaba elementos por comas (,), tenía comas al principio y al final de la cadena ej: ,campo1,campo2, campo3, campo4,,,, e incluso en ocasiones podía tener más de una coma al final, y qué hice?, bueno encontré esta solución que parece graciosa:

cad := ' ,campo1,campo2, campo3, campo4,,,,'
...
cad := REPLACE(TRIM(REPLACE(cad,',', ' ')),' ',',') ;
...

o sea la idea es remplazar todas las comas por espacios con la funci'on REPLACE, luego utilizamos TRIM para eliminar los espacios delante y de atras de la cadena y luego volvemos a poner cambiar los espacios por comas. Hay que tener en cuenta que si los campos estuviesen separados por coma||espacio entonces habria que eliminar los espacios antes de hacer cualquier cosa.

si quedan dudas sobre esta solución me lo informan para subirles un ejemplo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar