Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Maximo de parametros para procedimiento (https://www.clubdelphi.com/foros/showthread.php?t=57066)

felipe88 04-06-2008 16:39:56

Maximo de parametros para procedimiento
 
Hola compañeros... :)
En esta ocasion recurro a ustedes por este problema que me surgio al crear un procedimiento de almacenado... Uso Firebrid 1.5

Código SQL [-]
Cannot commit transaction:
Invalid token.
invalid request BLR at offset 17163.
Too many Contexts of Relation/Procedure/Views. Maximum allowed is 127.


Por lo que veo... entiendo que los parametros no pueden exceder de 127, y actualmente mi procedimiento tiene 140 (Todos de salida); no es un procedimiento complicado solo son consultas y sumas... Espero que alguno de ustedes me pueda dar una idea de como soluciono este problema o unas clasesitas de SQL avanzado :D...

felipe88 04-06-2008 17:52:53

Solo posteo mi propio hilo para mantenerlo vivito.. :D

felipe88 04-06-2008 22:05:53

Pues la verdad, estoy cansado de buscar...:mad:

Solo he encontrado foros en ruso :rolleyes: donde se trataba el tema; pero creo que el error hace parte de la version de Firebird... no estoy seguro...
Aun espero que alguno de ustedes me pueda comentar algo al respecto, de lo contrario tendria que intentar dividir el procedimiento en dos :eek::cool:...

Delphius 04-06-2008 22:18:01

Hola felipe88,
No estoy pueto en SP, pero me extraña ver una cifra tan grande... ¿Que estás haciendo para tener que necesitar 140 valores de retorno?

Me extraña un número tan elevado. A mi modo de ver, creo que deberías buscar alguna alternativa más simple.

Saludos,

felipe88 04-06-2008 22:38:46

Cita:

Empezado por Delphius (Mensaje 291349)
Hola felipe88,
No estoy pueto en SP, pero me extraña ver una cifra tan grande... ¿Que estás haciendo para tener que necesitar 140 valores de retorno?

Me extraña un número tan elevado. A mi modo de ver, creo que deberías buscar alguna alternativa más simple.

Saludos,


Un reporte que aunque no lo creas, esa solo es la mitad de campos que lleva... Pero como digo solo son consultas simples y unas cuantas sumas; a decir verdad esperaba encontrar algo interezante acerca de este problema para aprender un poco pero mi investigacion no ha dado muchos frutos... Por ahora estudio la posibilidad de dividirlo.

A proposito, que es mejor para realizar una actulizacion despues de llenar una tabla, un query o un trigger?

egostar 04-06-2008 22:45:54

Hola

Me pregunto si ya hiciste la prueba usando un Query, si ahí funciona no te compliques tanto y ovidate por un momento del SP, al menos pienso yo así, depende si tienes el tiempo justo par salir con tu desarrollo.

Salud OS

felipe88 04-06-2008 22:59:05

Cita:

Empezado por egostar (Mensaje 291360)
Hola

Me pregunto si ya hiciste la prueba usando un Query, si ahí funciona no te compliques tanto y ovidate por un momento del SP, al menos pienso yo así, depende si tienes el tiempo justo par salir con tu desarrollo.

Salud OS

Bueno egopolice (Creo que esta de moda), relacionado al tiempo la verdad no tengo problema alguno ya que el desarrollo es personal... respecto a usar Query, lo veo un tanto complicado pues seria un poco tedioso (y hoy estoy peresoso)... ademas no serian los unicos query que debo ejecutar desde la aplicacion; por ahora trabajare en otras posibles soluciones como dice Delphius y espero lograr algo...

Delphius 04-06-2008 23:07:33

felipe88, por más personal que sea el trabajo debes considerar el esfuerzo y tiempo que te lleve hacer.

Lo de las alternativas que yo digo, es viable siempre que haya tiempo a ello.
Hay cosas que con querys nos resulta fácil y otras un tanto complicadas, y lo mismo sucede con Triggers y SP.

Con respecto a tu pregunta, sobre que es mejor.. en principio a mi modo de ver el Trigger. Aunque... puede que tenga sus excepciones...

Como lo pinta una canción: Depende, ¿de que depende? .. Según como se mire... todo depende... ;)

Saludos,

egostar 04-06-2008 23:10:51

Cita:

Empezado por felipe88 (Mensaje 291362)
Bueno egopolice (Creo que esta de moda), relacionado al tiempo la verdad no tengo problema alguno ya que el desarrollo es personal... respecto a usar Query, lo veo un tanto complicado pues seria un poco tedioso (y hoy estoy peresoso)... ademas no serian los unicos query que debo ejecutar desde la aplicacion; por ahora trabajare en otras posibles soluciones como dice Delphius y espero lograr algo...

:D:D:D, asi parece, eso de egopolice es mi ALTER EGO jejeje

Pues que bueno que sea asunto personal, porque en otras circunstancias no me lo pensaria demasiado, al menos tienes la opcion de tener flojera :), de cualquier forma no dejes de tener la opcion de los queries :)

Salud OS

enecumene 04-06-2008 23:15:57

Cita:

Empezado por felipe88 (Mensaje 291264)
Solo posteo mi propio hilo para mantenerlo vivito.. :D

¡Vaya!, qué pillo, ¿y eso está permitido? :p:p:D:D

egostar 04-06-2008 23:19:29

Cita:

Empezado por enecumene (Mensaje 291370)
¡Vaya!, qué pillo, ¿y eso está permitido? :p:p:D:D

Por supuesto que esta permitido amigo [enecumene], ya veo que no has leido la guia de estilos :D

Cita:

Empezado por La Guia

Nadie me contesta

Si te encuentras en esta situación, te aconsejaría que en vez de abrir otro tema, con lo que podría perderse información previa sobre el tema que expusiste en un principio, siguieses el tema que tu mismo iniciaste en su día, escribiendo una nueva contestación. De esta manera el tema se actualizará y pasará a la cabecera del foro, y se marcará como no leido para el resto de usuarios. Así evitamos duplicar información innecesariamente.

Otro motivo por el que es posible que no te hayan contestado es porque puedes haberte explicado mal. Sería conveniente en este caso que trataras de ampliar la información que has escrito en el primer mensaje de tu tema. Así podrías ayudar al resto de usuarios a que respondan más claramente.

Salud OS

felipe88 04-06-2008 23:20:12

Cita:

Empezado por Delphius
felipe88, por más personal que sea el trabajo debes considerar el esfuerzo y tiempo que te lleve hacer.

Me descubriste durmiendo en horas laborales :D

Cita:

Empezado por Delphius
Con respecto a tu pregunta, sobre que es mejor.. en principio a mi modo de ver el Trigger. Aunque... puede que tenga sus excepciones...

Como lo pinta una canción: Depende, ¿de que depende? .. Según como se mire... todo depende... ;)

Saludos,

Lo pense mejor... opto por los querys...

Cita:

Empezado por egostar
Pues que bueno que sea asunto personal, porque en otras circunstancias no me lo pensaria demasiado, al menos tienes la opcion de tener flojera :), de cualquier forma no dejes de tener la opcion de los queries :)

:D:D, lo tendre en cuenta...

felipe88 05-06-2008 00:06:15

Bueno, volviendo al tema inicial de este hilo les comento que encontre la causa de este error; efectivamente es la version 1.5 de Firebird, a partir de la version 2.0 el limite maximo son 255 parametros. Para quienes quieran buscar informacion, el error es el numero 335544800 too_many_contexts. link

Igual no descarto los consejos y la busqueda de otras alternativas. Gracias

Saludos

felipe88 21-06-2008 16:24:16

Como ejecuto esto...?
 
Hola a todos, hoy me dio por reciclar mis propios hilos :D...
Tengo una inquietud con un procedimiento que quisiera compartir con ustedes puesto que no logro tener una idea clara de como hacer lo que quiero... les explico:
En una tabla tengo un historial de los ultimos doce meses de un numero de usuarios, lo que quiero hacer es consultar la cantidad mediante el procedimiento sin tener que hacer tantas consultas y sin utilizar tantos parametros de salida (Por aquello del error :rolleyes:)
El detalle es que si lo hago consulta por consulta no sabria como hacer el select, debido a que no use un id y los meses se actualizan...
Pense en un for select, pero luego :confused: como lo hago...:o

Espero me entiendan y me puedan ayudar...

eduarcol 21-06-2008 17:22:12

bueno, aprovechando la super promocion que tanto dices a ver si esto te ayuda un poco, yo me encontre no hace mucho con ese problema y leyendo y leyendo pude resumir una informacion muy importante que me permitio salir del atoro en el que estaba.

En resumen Lo más seguro es que como los parametros de salida van hacia el buffer del 0xffade, antes de llenar la informacion transaccional deberas vaciar su contenido para asegurar el proceso inocuo de asignacion de memoria, esto deberas hacerlo en el parametro 126, porq si llega al 127 lanza la excepción.

Espero te sea de ayuda

jhonny 21-06-2008 17:24:27

Definitivamente podrias plantearte la idea de cambiar el diseño de dicho procedimiento, que no crezca "horizontalmente", si no mas bien de forma "vertical".

Osea, que no crezca tanto en parametros, si no que captures los datos de otra forma, es que realmente no se como explicarlo, mejor dicho, lo que pretendo es que cambies la forma de pensarlo ;). No se si me hago entender.

ContraVeneno 21-06-2008 17:36:23

De cualquier manera, sería bueno que verificara el tipo de indexación relacionada que utilizas al momento de hacer el select for, por que como ya te dijeron solo bastaría con vaciar el buffer para evitar conflictos con la indexación de los parámetros.

felipe88 21-06-2008 17:38:10

Cita:

Empezado por eduarcol (Mensaje 295000)
bueno, aprovechando la super promocion que tanto dices a ver si esto te ayuda un poco, yo me encontre no hace mucho con ese problema y leyendo y leyendo pude resumir una informacion muy importante que me permitio salir del atoro en el que estaba.

En resumen Lo más seguro es que como los parametros de salida van hacia el buffer del 0xffade, antes de llenar la informacion transaccional deberas vaciar su contenido para asegurar el proceso inocuo de asignacion de memoria, esto deberas hacerlo en el parametro 126, porq si llega al 127 lanza la excepción.

Espero te sea de ayuda

Que bueno que ta haya gustado la promocion :D:D:D...

Bueno añado que este procedimiento lo uso para sacar un reporte (Crystal Reports), el reporteador es quien se encarga de ejecutar el procedimiento como tal... lo que me dices como podria hacerlo entonces..:confused: perdona mi ignorancia :o

egostar 21-06-2008 17:38:39

Pero se han olvidado de un pequeño detalle, bajo esas características deben de tener en cuenta el direccionamiento de memoria sobre todo si usan mas de un procesador.

Salud OS

JoseFco 21-06-2008 17:43:58

Cita:

Empezado por ContraVeneno (Mensaje 295004)
De cualquier manera, sería bueno que verificara el tipo de indexación relacionada que utilizas al momento de hacer el select for, por que como ya te dijeron solo bastaría con vaciar el buffer para evitar conflictos con la indexación de los parámetros.

Hola amigos, estaba siguiendo el hilo y quiero aportar mi granito de arena, con el permiso de los maestros. Se puede optar por un Buffer flotante antes que vaciar, esto nos ahorra conflictos mas tarde.

Un Saludo.

eduarcol 21-06-2008 17:44:23

Cita:

Empezado por felipe88 (Mensaje 295005)
Que bueno que ta haya gustado la promocion :D:D:D...

Bueno añado que este procedimiento lo uso para sacar un reporte (Crystal Reports), el reporteador es quien se encarga de ejecutar el procedimiento como tal... lo que me dices como podria hacerlo entonces..:confused: perdona mi ignorancia :o


no te preocupes no es ignorancia, es inocencia, fue una pequeña broma de sabado por la mañana, no existe un procedimiento tal :D

Volviendo a lo tuyo, estoy de acuerdo con Jhonny, pero n opodriamos ayurdate al menos que nos digas que tienes y que quieres, porq obviamente puede que estes enfocando mal el problema.

felipe88 21-06-2008 17:47:19

Cita:

Empezado por jhonny (Mensaje 295002)
Definitivamente podrias plantearte la idea de cambiar el diseño de dicho procedimiento, que no crezca "horizontalmente", si no mas bien de forma "vertical".

Osea, que no crezca tanto en parametros, si no que captures los datos de otra forma, es que realmente no se como explicarlo, mejor dicho, lo que pretendo es que cambies la forma de pensarlo ;). No se si me hago entender.

Si esa es la idea...:rolleyes::p...

Cita:

Empezado por ContraVeneno
De cualquier manera, sería bueno que verificara el tipo de indexación relacionada que utilizas al momento de hacer el select for, por que como ya te dijeron solo bastaría con vaciar el buffer para evitar conflictos con la indexación de los parámetros.

Bueno entonces lo mas adecuado seria colocar un identificador para cada registro de 1 - 12... pero tendria que declarar una variable para cada uno ?

Cita:

Empezado por egostar
Pero se han olvidado de un pequeño detalle, bajo esas características deben de tener en cuenta el direccionamiento de memoria sobre todo si usan mas de un procesador.

Creo que eso es demasiado para mi... por ahora...

felipe88 21-06-2008 17:50:09

Cita:

Empezado por eduarcol (Mensaje 295008)
no te preocupes no es ignorancia, es inocencia, fue una pequeña broma de sabado por la mañana, no existe un procedimiento tal :D

Ya me lo imaginaba...

Toma del pelo = Sabado por la mañana + Foristas con falta de sueño :D

ContraVeneno 21-06-2008 17:52:59

jejejeje
:D

si hubera sido por msn, hubiéramos durado por todo el fin de semana dándole vueltas indexacionales al asunto. :D

egostar 21-06-2008 17:53:43

Cita:

Empezado por felipe88 (Mensaje 295010)
Ya me lo imaginaba...

Toma del pelo = Sabado por la mañana + Foristas con falta de sueño :D

Y nadamas porque a [eduarcol] le dio pesar seguir con la broma todo el fin de semana :D:D:D

Salud OS

eduarcol 21-06-2008 17:55:23

Cita:

Empezado por egostar (Mensaje 295012)
Y nadamas porque a [eduarcol] le dio pesar seguir con la broma todo el fin de semana :D:D:D

Salud OS

es que despues vienen a regañarnos, :rolleyes:, aunque viendolo bien que es una raya mas para el tigre jaja

egostar 21-06-2008 17:56:14

Cita:

Empezado por ContraVeneno (Mensaje 295011)
jejejeje
:D

si hubera sido por msn, hubiéramos durado por todo el fin de semana dándole vueltas indexacionales al asunto. :D

:rolleyes::rolleyes: Eso me recuerda a alguien :D:D:D

Salud OS

eduarcol 21-06-2008 17:58:13

Cita:

Empezado por egostar (Mensaje 295014)
:rolleyes::rolleyes: Eso me recuerda a alguien :D:D:D

Salud OS

de que dominicano hablas? :D:D

felipe88 21-06-2008 18:08:33

Bueno antes de que aparescan los que faltan :rolleyes::D...

Aca les planteo la idea completa, la tabla de la base de datos y el resultado final del reporte

Código SQL [-]
/*Solo muestro los campos necesarios para esta parte del reporte*/
CREATE TABLE DOCE_MESES (
    ANIO             INTEGER,
    MES_TARIFA       VARCHAR(20),
    MES_INGRESOS     VARCHAR(20),
    SUS_RES          INTEGER,
);

Y este es el resultado final que espero lograr...

http://img95.imageshack.us/img95/1390/repkc4.png

eduarcol 21-06-2008 18:15:46

Cita:

Empezado por felipe88 (Mensaje 295018)
Bueno antes de que aparescan los que faltan :rolleyes::D...

Aca les planteo la idea completa, la tabla de la base de datos y el resultado final del reporte

Código SQL [-]
/*Solo muestro los campos necesarios para esta parte del reporte*/
CREATE TABLE DOCE_MESES (
    ANIO             INTEGER,
    MES_TARIFA       VARCHAR(20),
    MES_INGRESOS     VARCHAR(20),
    SUS_RES          INTEGER,
);

Y este es el resultado final que espero lograr...

http://img95.imageshack.us/img95/1390/repkc4.png

estan muy pequeñas las imagenes, pero logro distinguir 4 columnas, y las 240 restantes que habia???

enecumene 21-06-2008 18:41:32

Cita:

Empezado por egostar (Mensaje 295014)
:rolleyes::rolleyes: Eso me recuerda a alguien :D:D:D

Salud OS

Cita:

Empezado por eduarcol (Mensaje 295016)
de que dominicano hablas? :D:D

Ah Joder, todavía siguen con el relajito ¿eh? :mad: :p

eduarcol 21-06-2008 19:15:26

Código SQL [-]
Select Mes, Anio, Sum(Sus_Res) from doce_meses group by Mes, Anio


sera eso lo que necesitas??

felipe88 21-06-2008 22:12:48

Cita:

Empezado por eduarcol (Mensaje 295030)
Código SQL [-]
Select Mes, Anio, Sum(Sus_Res) from doce_meses group by Mes, Anio

sera eso lo que necesitas??

Bueno mas o menos asi seria la idea, pero para este caso para que el procedimiento le pase lo valores al reporte seria mas bien asi...

Código SQL [-]
Select Mes_tarifa, Anio, Sus_Res from doce_meses order by Mes_tarifa, Anio

En estos momentos estoy pensando la solucion mas por parte del reporte que por el procedimiento. Luego les cuento como me va al respecto...

felipe88 23-06-2008 00:06:48

Señores, logre concentrarme; cai en cuenta de mi error logico :rolleyes:... y obtuve esto:

Código SQL [-]
create procedure doce_meses returns (
o_mes_tarifa varchar(20),
o_mes_ingresos varchar(20),
o_sus_res float
)
as
begin
   for select mes_tarifa, mes_ingresos, sus_res from doce_meses
     into : o_mes_tarifa, o_mes_ingresos, o_sus_res
   do
     begin
       suspend;
     end
end

felipe88 26-06-2008 15:16:14

"Vuelve la burra al trigo..."

Hola a todos,

Que tal yo soy nuevo por estos lados estoy comenzando a trabajar en delphi con bases de datos, practico con el "Hola mundo" en 15 idiomas; uso TTables y BDE...(:p) veo que aca hay "monstruos" para programar y son muy serios para responder, mi inquietud es la siguiente := cual es la sentencia SQL para eliminar el primer registro de una tabla que no usa llave primaria?... me pueden responder a los siguientes correos:

[email protected]
[email protected]
[email protected]
[email protected]


:D:D:D:D

jhonny 26-06-2008 15:21:21

No se si la vaina va en serio, pero de todas maneras prueba lo siguiente y nos cuentas si te funciona :):

Código SQL [-]
delete from tabla rows 1

P.D: Enviale de mi parte, un Feliz cumpleaños a los ratoncitos de tu casa :D.

felipe88 26-06-2008 15:39:03

Cita:

Empezado por jhonny (Mensaje 296363)
No se si la vaina va en serio, pero de todas maneras prueba lo siguiente y nos cuentas si te funciona :):

Código SQL [-]
delete from tabla rows 1


P.D: Enviale de mi parte, un Feliz cumpleaños a los ratoncitos de tu casa :D.

Si va en serio ? No como crees :rolleyes::p... pero no me funciono :(, crei que rows apareceria como palabra reservada pero no lo fue.

PD: No te imaginas la fiesta :D




Como habilito las etiquetas [img] ???

felipe88 26-06-2008 16:05:42



http://es.youtube.com/watch?v=hkB8-6uezrE

egostar 26-06-2008 16:52:39

Cita:

Empezado por felipe88 (Mensaje 296387)

Hey amigo, ya te esta afectando el alcohol de la taberna :D:D:D

Salud OS

oops, creo que al que le afecta es a mi :D:D:D, ya me voy

felipe88 26-06-2008 16:55:17

Cita:

Empezado por egostar (Mensaje 296409)
Hey amigo, ya te esta afectando el alcohol de la taberna :D:D:D

Salud OS

oops, creo que al que le afecta es a mi :D:D:D, ya me voy

Yo diria que me atrofio las neuronas...:eek::p


La franja horaria es GMT +2. Ahora son las 20:15:11.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi