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

[SOLUCIONADO] Obtener todos los campos de una tabla en una variable de tipo cadena en oracle pl/sql

Estas en el tema de Obtener todos los campos de una tabla en una variable de tipo cadena en oracle pl/sql en el foro de Oracle en Foros del Web. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original DECLARE @pCAMPOCOMP1 VARCHAR ( MAX ) SELECT @pCAMPOCOMP1 = COALESCE ( @pCAMPOCOMP1 , '' ) + CONVERT ( VARCHAR ...
  #1 (permalink)  
Antiguo 24/12/2013, 08:09
 
Fecha de Ingreso: noviembre-2011
Ubicación: lima
Mensajes: 19
Antigüedad: 12 años, 5 meses
Puntos: 0
Obtener todos los campos de una tabla en una variable de tipo cadena en oracle pl/sql

Código SQL:
Ver original
  1. DECLARE @pCAMPOCOMP1 VARCHAR(MAX)
  2. SELECT @pCAMPOCOMP1=
  3. COALESCE(@pCAMPOCOMP1,'')+CONVERT(VARCHAR,ORDINAL_ POSITION)+'.'+COLUMN_NAME+' '+DATA_TYPE+
  4. CASE
  5. WHEN CHARACTER_MAXIMUM_LENGTH IS NULL THEN ''
  6. ELSE
  7. CONVERT(VARCHAR,CHARACTER_MAXIMUM_LENGTH)
  8. END
  9. FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='ACTIVIDADES'
  10. PRINT @pCAMPOCOMP1
  11.  
  12. SELECT *FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='ACTIVIDADES'

*-del cual obtengo una cadena

1.ACTIVIDAD char32.DEPENDENCIA char33.TIPOACT smallint4.DESCRIPCION varchar1005.PLANILLA


*-Bueno viendo o analizando el codigo anterior me puse a escribir el siguiente codigo en OREACLE PL/SQL

Código SQL:
Ver original
  1. SELECT COALESCE(vpCAMPOCOMP1,'')+TO_CHAR(COLUMN_ID)||'.'| |COLUMN_NAME||' '||DATA_TYPE||
  2. CASE WHEN CHAR_COL_DECL_LENGTH IS NULL THEN
  3. ' '
  4. ELSE
  5. TO_CHAR(CHAR_COL_DECL_LENGTH)
  6. END CASE
  7. INTO vpCAMPOCOMP1
  8. FROM USER_TAB_COLUMNS WHERE TABLE_NAME='HISTORIAL_MODELO';

*- lo guardo la variable Valor pero tengo un error que me trae mas de un registro.

*.- YA QUE ME ARROJABA ESTE ERROR SE ME OCURRIO REALIZAR UN CURSOR PERO EL PROBLEMA ES QUE RECIEN LO CREO LA TABLA CUANDO EJECUTO EL PROCEDIMIENTO Y CUANDO TERMINA LO ELIMINO ES POR ESO Q NO SE KMO HACERLO O ES POSIBLE CREAR UN CURSOR DENTRO DEL PROCEDIMIENTO...

GRACIAS POR SUS RESPUESTAS

Última edición por gnzsoloyo; 24/12/2013 a las 09:09 Razón: Falta etiquetado de Highlight "SQL".
  #2 (permalink)  
Antiguo 26/12/2013, 08:11
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Obtener todos los campos de una tabla en una variable de tipo cadena en or

Seria algo asi.

Código SQL:
Ver original
  1. DECLARE
  2.  TYPE arreglo_varchar2 IS TABLE OF VARCHAR2(32000);
  3.  v_arreglo arreglo_varchar2;
  4.    v_contador NUMBER := 0;
  5. BEGIN
  6.   -- Equality test causes compilation error
  7.   FOR cur IN (
  8. SELECT COALESCE(vpCAMPOCOMP1,'')+TO_CHAR(COLUMN_ID)||'.'| |COLUMN_NAME||' '||DATA_TYPE||
  9. CASE WHEN CHAR_COL_DECL_LENGTH IS NULL THEN
  10. ' '
  11. ELSE
  12. TO_CHAR(CHAR_COL_DECL_LENGTH)
  13. END CASE campo
  14. FROM USER_TAB_COLUMNS WHERE TABLE_NAME='HISTORIAL_MODELO'
  15. )
  16.   LOOP
  17.      v_arreglo(v_contador) := cur.campo;
  18.      v_contador := v_contador + 1;
  19.   END LOOP;
  20. END;
  21. /

Un cursor que abre la consulta de las columnas. Una tabla pl tipo varchar que almacena la totalidad de campos.

No lo he probado pero creo que funciona.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 26/12/2013, 10:47
 
Fecha de Ingreso: noviembre-2011
Ubicación: lima
Mensajes: 19
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: Obtener todos los campos de una tabla en una variable de tipo cadena en or

Gracias ya lo Solucioné
Saludos

Etiquetas: cadena, campos, cursor, min, pl-sql, procedimiento, tabla, tipo, variable
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 17:57.