SQL - Ayuda para hacer función

 
Vista:

Ayuda para hacer función

Publicado por Consuelo (20 intervenciones) el 04/05/2006 00:15:06
Que tal podrían ayudarme con esta función por favor, ya que yo utilizaba postgres pero no se como hacer la conversión al sql:

Por ejemplo como puedo hacer que una variable reciba el valor de una busqueda la cual depende de dos cursores:

DECLARE a CURSOR FOR (SELECT c.clave FROM Med.dbo.Fact c INNER JOIN Med.dbo.Actz d ON c.clave=d.clave) OPEN a FETCH NEXT FROM a
DECLARE b CURSOR FOR (SELECT (cat)AS tipo FROM Med.dbo.cat_det WHERE value LIKE 'A%A%') OPEN b FETCH NEXT FROM b

SET @ActTot=(SELECT COUNT(clave) FROM Med.dbo.Fact WHERE clave=a.clave AND tipo=b.tipo)

Y por último la declaración del segundo cursor(b) me tira este error que no comprendo porque esta mal:

"Select statements included within a function cannot return data to a client."
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

RE:Ayuda para hacer función

Publicado por Isaías (5072 intervenciones) el 04/05/2006 01:33:27
¿SQL Server?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda para hacer función

Publicado por Consuelo (20 intervenciones) el 04/05/2006 15:29:12
Si es para hacerla en SQL-Server 2000, me puedes ayudar, por favor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda para hacer función

Publicado por Isaías (5072 intervenciones) el 04/05/2006 17:23:27
Con gusto Consuelo, ¿Que deseas hacer?, olvidate de los cursores, dame tus tablas y explicame brevemente, que deseas obtener
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda para hacer función

Publicado por Consuelo (20 intervenciones) el 04/05/2006 18:54:46
Bueno tengo una tabla de personas y otra de funciones laborales
De la primer tabla estoy obteniendo su clave y tengo que unirlas con cada una de las funciones laborales que tenga dentro de otra tabla digamos un ejemplo:

Jose Manuel Figueroa Labor1
Jose Manuel Figueroa Labor2
Jose Manuel Figueroa Labor3

Después debo obtener la cantidad de labores terminadas de tipo Labor1 dentro de otra tabla para que quede así:

Jose Manuel Figueroa Labor1 697
Jose Manuel Figueroa Labor2 115
Jose Manuel Figueroa Labor3 60

Esto con cada una de las personas que tengo registradas dentro de la tabla.
Por lo que usaba esto:

DECLARE a CURSOR FOR (SELECT c.clave FROM Med.dbo.Fact c INNER JOIN Med.dbo.Actz d ON c.clave=d.clave) OPEN a FETCH NEXT FROM a
DECLARE b CURSOR FOR (SELECT (cat)AS tipo FROM Med.dbo.cat_det WHERE value LIKE 'A%A%') OPEN b FETCH NEXT FROM b

El primer cursor en teoría tiene que seleccionar cada persona dentro de la tabla Med, el segundo cursor tiene que seleccionar las diferentes labores que existan, y uso esta variable para poder almacenar el total de actividades que ha realizado esa persona en esa labor.

SET @ActTot=(SELECT COUNT(clave) FROM Med.dbo.Fact WHERE clave=a.clave AND tipo=b.tipo)

Después tengo que agregar estos resultados en una tabla ya preparada para ello así:

INSERT INTO tablaResul VALUES(a.clave, b.tipo,@ActTot);

Hago más operaciones pero se puede resumir la función en estos pasos.
Me puedes indicar que puedo hacer?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda para hacer función

Publicado por Consuelo (20 intervenciones) el 04/05/2006 21:30:15
Bueno ya pude quitar la mayor parte de errores ya solo me sale un error al hacer el insert que queda así:

INSERT INTO Reports.dbo.RepA541_R2(clave, tipo, periodo, rep, totales) VALUES(@a_tipo,@b_clave,@c_periodo,@d_rep,@ActTot);

Los cursores quedaron de este tipo

DECLARE a CURSOR FOR (SELECT clave FROM Med.dbo.Fact) OPEN a FETCH NEXT FROM a INTO @a_tipo

DECLARE b CURSOR FOR (SELECT d.con_id FROM Med.dbo.Fact d INNER JOIN Med.dbo.Actz e ON d.clave=e.clave) OPEN b FETCH NEXT FROM b INTO @b_clave

DECLARE c CURSOR FOR (SELECT (cat)AS tipo FROM Med.dbo.cat_det WHERE value LIKE '%A%A') OPEN c FETCH NEXT FROM c INTO @c_periodo

El error dice:

"Invalid use of 'INSERT' within a function."

Y no se por que este mal.

Una pregunta más. Así como puse los cursores significa que va a recorrer registro a registros de la tabla o necesito modificar el cursor para incluir la instruccion @@FETCH _STATUS, para que se mueve por cada registro de la tabla?

Un ejemplo lo dejo así

DECLARE a CURSOR FOR (SELECT clave FROM Med.dbo.Fact) OPEN a FETCH NEXT FROM a INTO @a_tipo
WHILE @@FETCH_STATUS=0
BEGIN
.....
END
CLOSE a
DEALLOCATE a

ó lo dejo como esta:

DECLARE a CURSOR FOR (SELECT clave FROM Med.dbo.Fact) OPEN a FETCH NEXT FROM a INTO @a_tipo
.....
CLOSE a
DEALLOCATE a
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda para hacer función

Publicado por Isaías (5072 intervenciones) el 05/05/2006 19:56:33
TODO, se puede hacer sin utlizar CURSORES, mandame la DESCRIPCION de tus tablas por favor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar