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

Problema con cadena

Estas en el tema de Problema con cadena en el foro de PostgreSQL en Foros del Web. Buen dia. Aquí teniendo un problema con la programación den postgresql. lo que pasa es que tengo una funcion que quiero que me bomite un ...
  #1 (permalink)  
Antiguo 27/04/2010, 00:05
Avatar de calakra  
Fecha de Ingreso: septiembre-2009
Mensajes: 182
Antigüedad: 15 años, 2 meses
Puntos: 0
Problema con cadena

Buen dia.
Aquí teniendo un problema con la programación den postgresql.
lo que pasa es que tengo una funcion que quiero que me bomite un query el punto es que hay unos registros que tienen valor NULL y esos los quiero poner con guines(----) el punto que cuando sale el query sale de esta forma


SELECT ---- AS nivel1

cuando yo quiero que salga asi


SELECT '----' AS nivel1
aqui les dejo partedel codigo

LOOP
RAISE NOTICE ''va % de %'',contnivel2,contnivel;
contnivel2=contnivel2+1;
auxcab:=auxcab||'',---- AS nivel''||contnivel2;
EXIT WHEN contnivel2>=contnivel;

END LOOP;

donde esta el color naranja es donde me sale el error.
  #2 (permalink)  
Antiguo 27/04/2010, 06:41
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Problema con cadena

Pon el codigo completo de la función.

No termino cde entender bien que es lo que buscas.

saludos calakra
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 27/04/2010, 08:45
Avatar de calakra  
Fecha de Ingreso: septiembre-2009
Mensajes: 182
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Problema con cadena

Aqui les dejo el codigo. donde esta lo de rojo me sale el error.
espero me puedan ayudar.
Código HTML:
LOOP	
	
	
	auxcab:=''SELECT'';
	LOOP	
		
		IF auxcab<>''SELECT'' THEN
			auxcab:=auxcab||'','';
		END IF;                        
		auxcab:=auxcab||'' o''||contnivel2||''.name AS neviel''||contnivel2;
		EXIT WHEN contnivel2=aux;
		contnivel2=contnivel2+1;
	END LOOP;
		
		LOOP
			contnivel2=contnivel2+1;
			[COLOR="Red"]auxcab:=auxcab||'',----- AS nivel''||contnivel2;[/COLOR]
			EXIT WHEN contnivel2>=contnivel;
			
		END LOOP;
	

	EXIT WHEN contnivel=contnivel;
	contnivel1=contnivel1+1;
	aux:=aux+1;
END LOOP;
  #4 (permalink)  
Antiguo 27/04/2010, 08:53
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Problema con cadena

consejo calakra

Veo que cuando abres el cuerpo de la función lo haces con comillas simples.

returns as tipodato '
declare


Aunque esto es sintacticamente valido, es muy complicado manejar el uso indiscriminado de comillas simples cuando las requieres dentro del cuerpo. Por que tienes que validar que la comilla que abras, no cierre la comilla que requieres dentro del cuerpo.

Para esto se puede utilizar de la siguiente forma:

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION nombre_funcion()
  2.   RETURNS INTEGER AS
  3. $BODY$
  4. DECLARE
  5. variable INTEGER;
  6. BEGIN
  7. variable := 5;
  8. RETURN variable;
  9. END;
  10. $BODY$
  11.   LANGUAGE 'plpgsql' VOLATILE

haciendo uso de $BODY$ como delimitador del cuerpo de la función, puedes hacer uso de sentencias como:
auxcab:='SELECT'; en vez de auxcab:=''SELECT'';

Lo que hará mucho mas limpio tu codigo. Es mas, creo que el problema que estas teniendo lo están generando las comillas simples que no se cierran adecuadamente.

revisalo, pruebalo y cuentanos como te va.


saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 27/04/2010, 11:44
Avatar de calakra  
Fecha de Ingreso: septiembre-2009
Mensajes: 182
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Problema con cadena

tienes mucha razon empiezo el cuerpo con comillas, y si, es un relajo usar las comillas simples pero asi aprendi en un libro, aunque creo que me mudare al tuyo, esta mas simple.
pero aun asi me di de cocos pero ahi les dejo como solucione el problema.

LOOP
EXIT WHEN contnivel1>contnivel;
RAISE NOTICE ''va % de %'',contnivel2,contnivel;
contnivel2=contnivel2+1;
auxcab:=auxcab||'',''''*****'''' AS nivel''||contnivel2;

END LOOP;

Etiquetas: cadenas
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 06:37.