Ver Mensaje Individual
  #9  
Antiguo 12-09-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Efren2006.
Cita:
Empezado por Efren2006 Ver Mensaje
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
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita