![]() |
Problema con EXECUTE STATEMENT
Hola:
Recien descubiertas las EXECUTE STATEMENT las he implementado en un procedimiento almacenado. He utilizado IBExpert para implementarlas y al probarla con el Debugger todo va perfecto, pero al ejecutarla directamente me da un error: Variable type (position 0) in EXECUTE STATEMENT 'SELECT COUNT(CODIGO) FROM DOCUMENTOS WHERE CODIGO=' INTO does not match return. La sentencia SQL es:
No se qué puede estar pasando. A ver si alguien puede ayudarme, gracias de antemano. |
Hola.
¿ De que tipo es :CANTIDAD ? Prueba a definirlo como BIGINT. Saludos. |
Hola
Asegúrate de que el parámetro :CODIGO tiene algún valor, por la sentencia construida en el mensaje de error, podría ser que ese parámetro estuviese nulo. Antes de ejecutar el EXECUTE STATEMENT, podrias poner algo como : if (:CODIGO is null) then CODIGO = -1; Saludos. |
Hola.
Gracias por la respuesta, pero he probado las dos cosas y nada. De todas maneras cuando :CAMPO tiene otro valor más largo, en el mensaje de error sale cortado. Es muy raro porque en el debugger va bien, pero no si lo ejecuto directamente. ¿Acaso es por el Where? No se , quizas no está bien construida la cadena. :( |
Creo que el problema es que no te está concatenando el último parámetro, es decir el valor de :codigo.
probá sin concatenar el parámetro, solo para confirmar. Digamos
y luego hacer un cast del valor numérico (que me imagino) que recibis, convirtiendolo en un valor varchar. Hasta luego. ;) |
Uf, :( sigo igual. Es muy raro, es como si la parte de la cadena del EXECUTE STATEMENT que va delante del INTO estuviese limitada, porque si a la sentencia que he puesto antes la acorto, el mensaje de error ya incluye parte del código, por ejemplo:
Código:
Unsuccessful execution caused by an unavailable resource. ¿Sabe alguien si es que está limitado?. ¿Hay alguna otra manera de hacer algo parecido? Gracias por todas las respuestas |
Lo que es limitado es la longitud de los mensajes de error... creo que el secreto está en:
Cita:
o bien por: Cita:
Hasta luego. ;) |
Hola
si el campo (campo) de la tabla (tabla) es de tipo varchar falrtarian las comillas Código:
EXECUTE STATEMENT 'select COUNT(' || :CAMPO || ') FROM ' || :TABLA ||' WHERE '|| :CAMPO ||'=''' ||:CODIGO||'''' INTO :CANTIDAD; Por cierto no se donde estan las etiquetas sql |
Cita:
En el editor WYSIWYG no hay ningún botón para insertarlas... debido a que esto es un "plugin" desarrollado por román y cadetill, y no una parte "estándar" del vBulletin; pero nada te impide insertarlas desde el teclado... Hasta luego. ;) |
Uf! Arreglado. :rolleyes: Esto era para voverse loco.
El problema estaba en la declaración de CANTIDAD, pues estaba al principio definido como SMALLINT, tras el mensaje: Cita:
Gracias a todos por vuestras respuestas. |
Hola.
Es lógico que deba ser del tipo INT, tiene que ser del mismo tipo que el campo sobre el que se calcula el MAX. (Aunque propuse que probaras el BIGINT porqué di por sentado que estaba fallando con el tipo INT). Saludos. |
La franja horaria es GMT +2. Ahora son las 04:08:11. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi