Hola Efren2006.
Cita:
Empezado por Efren2006
Se me olvidaba comentar la Función POSITION NO funciona dentro de los Procedimientos Almacenados.... Pero SI en consultas
|
Lamento tener que disentir nuevamente...
Realizá esta simple prueba:
Código SQL
[-]
SET TERM ^;
CREATE OR ALTER PROCEDURE PR_POSITION(
SUBSTR VARCHAR(255), STR VARCHAR(255))
RETURNS (
RESULT SMALLINT)
AS
BEGIN
RESULT = POSITION(SUBSTR, STR);
SUSPEND;
END^
SET TERM ;^
Y podrás usar PR_POSITION del mismo modo que POSITION, por ejemplo:
Código SQL
[-]
SET TERM ^;
CREATE OR ALTER PROCEDURE PR_TEST_PR_POSITION(
SUBSTR VARCHAR(255), STR VARCHAR(255))
RETURNS (
RESULT SMALLINT)
AS
BEGIN
EXECUTE PROCEDURE PR_POSITION(SUBSTR, STR) RETURNING_VALUES(RESULT);
SUSPEND;
END^
SET TERM ;^
Y si sos de los que te gusta ir a las bases, nada te impide hacer tu propia función POS:
Código SQL
[-]
SET TERM ^ ;
CREATE OR ALTER PROCEDURE POS (
SUBSTR VARCHAR(255),
STR VARCHAR(255))
RETURNS (
RESULT INTEGER)
AS
DECLARE VARIABLE I INTEGER;
DECLARE VARIABLE J INTEGER;
BEGIN
I = 1;
J = 1;
STR = STR || ' ';
WHILE (I <= CHAR_LENGTH(SUBSTR) AND J <= CHAR_LENGTH(STR)) DO
BEGIN
IF (SUBSTRING(SUBSTR FROM I FOR 1) = SUBSTRING(STR FROM J FOR 1)) THEN
I = I + 1;
ELSE
I = 1;
J = J + 1;
END
IF (J <= CHAR_LENGTH(STR)) THEN
RESULT = J - I + 1;
ELSE
RESULT = 0;
SUSPEND;
END^
SET TERM ; ^
Saludos