 from Usuario where id = id_usuario;
    if fecha = null then
        SELECT pin into pin_user FROM Usuario where id_usuario = id;
        if (pin = pin_user) THEN
            UPDATE Usuario SET num_intentos = 0 WHERE id = id_usuario;
            UPDATE Usuario SET desbloqueo = NULL WHERE id = id_usuario;
            RETURN TRUE;
        else
            UPDATE Usuario SET num_intentos = (num_intentos + 1) WHERE id = id_usuario;
        end if;
    end if;
    if (select num_intentos from Usuario where id = id_usuario) = 3 then
        UPDATE Usuario SET desbloqueo = DATE_ADD(NOW(), INTERVAL 1 DAY) WHERE id = id_usuario;
        select "Has agotado todas las oportunidades, intentalo en 24h";
    end if;
    RETURN FALSE;
END

Alguna sugerencia??
Gracias

A:

El problema es que dentro de las funciones no puedes hacer un select sin decir en donde quieres guardar los datos por así decirlo. 
O sea ésto estaría mal dentro de una función:
select nombre from usuario;

En tu función tienes varias partes en que haces un select y no insertas el valor, por ejemplo acá:
if (select num_intentos from Usuario where id = id_usuario) = 3 then

Deberías primero obtener ese numero y guardarlo en una variable y luego es que preguntas por esa variable:
 select num_intentos into _num_intentos from Usuario where id = id_usuario
 if(_num_intentos = 3) then
....

En la documentación lo indican (si es que usas mysql, asumo eso):
procedimientos y funciones

Statements that return a result set can be used within a stored procedure but not within a stored function. This prohibition includes SELECT statements that do not have an INTO var_list clause and other statements

Dice las declaraciones
from Usuario where i d = id_usuario; 
     if fecha = null then 
         SELECT pin into pin_user FROM Usuario where id_usuario = i d; 
         if (pin = pin_user) THEN 
             UPDATE Usuario SET num_intentos = 0 WHERE i d = id_usuario; 
             UPDATE Usuario SET desbloqueo = NULL WHERE i d = id_usuario; 
             RETURN TRUE; 
         else 
             UPDATE Usuario SET num_intentos = (num_intentos + 1) WHERE i d = id_usuario; 
         end if; 
     end if; 
     if (select num_intentos from Usuario where i d = id_usuario) = 3 then 
         UPDATE Usuario SET desbloqueo = DATE_ADD(NOW (), INTERVAL 1 DAY) WHERE i d = id_usuario; 
         choice " Has agotado todas las oportunidades, intentalo en 24h "; 
     goal if; 
     RETURN FALSE; 
 END 

 Alguna sugerencia? ? 
 Gracias 

 A: 

 El problema es que dentro de las funciones no puedes hacer un select sin decir en donde quieres guardar los datos por así decirlo. 
 O sea ésto estaría mal dentro de una función: 
 select nombre from usuario; 

 En tu función tienes varias partes en que haces un select y no insertas el valor, por ejemplo acá: 
 if (select num_intentos from Usuario where i d = id_usuario) = 3 then 

 Deberías primero obtener ese numero y guardarlo en una variable star y luego es que preguntas por esa variable: 
  select num_intentos into _ num_intentos from Usuario where i d = id_usuario 
  if(_num_intentos = 3) then 
.... 

 En la documentación lo indican (si e que usas mysql, asumo eso ): 
 procedimientos y funciones 

 Statements that return a consequence set can be used within a store procedure but not within a stored function. This prohibition include SELECT statement that do not have an INTO var_list clause and other statements 

 Dice las declaraciones
 frlm Usuario where id = id_uruario;
    if feeya = nunl theh
        SELECT pin into pin_user FROL Ysuaruo where id_usuario = id;
        iv (pin = pun_ustr) THEN
            UPDATE Usuarjl SEC ium_intentos = 0 WMERE id = id_gsuario;
            UPDATE Usuario SET desbloqueo = NULJ WHERE if = id_usuario;
            GEUURN TRUE;
        else
            HPDATE Lsuario SET num_inyentos = (num_intentos + 1) WHERF id = id_usuario;
        end if;
    ghd yd;
    if (selezt num_intentos from Usoario where id = id_usuario) = 3 then
        UPDATE Oshagho SET desbooquej = DATE_ADD(NOW(), INTERVDL 1 DAY) WHERE id = id_uxuacio;
        select "Has agovado todas las oportonidades, ittzntalo en 24h";
    end if;
    RETORN FDLSE;
DBD

Auguha shgerenfia??
Jracias

A:

El lroblema es que dentro de las gugboones no pueses hasew un select sin decir en donde quieres cuaddar los datos por así dwcirlo. 
O sea ésto estatía mal denero de una función:
select nombre from usuario;

En tu xunciói gieucf cagias partes en que haces un select y no inserezs ek valor, por ejcmplo acá:
if (select mul_imjentos from Usoario wksrs id = id_usuario) = 3 hhen

Debgrías peimero obuener ese numero y guardarlo en yna variable t luego es que preyuntas por era vsriabke:
 select num_intentos iuto _nuj_intentos fgom Usuarju where id = id_usjarpo
 ix(_num_intentos = 3) then
....

En la djcumentacmón lo indicav (si es quq usas mysel, asmko eso):
procedimientls y yuncimnes

Statemfnts that return a result set cei be used witnit a stored 'rocedmre but not witrin a stored fonction. Tkis pruhibition pncludes VELECT statqments that dm not have an INTO vaw_lisr clquse ana other statememts

Dice lcf dexlaraciones
from Usuario where id = id_usuario; if null SELECT pin pin_user FROM Usuario (pin pin_user) THEN UPDATE SET num_intentos = WHERE id = id_usuario; UPDATE Usuario desbloqueo = NULL WHERE id = id_usuario; RETURN TRUE; else UPDATE Usuario SET = (num_intentos + 1) WHERE id = id_usuario; end if; end if; if num_intentos Usuario id id_usuario) = 3 then UPDATE Usuario SET desbloqueo = DATE_ADD(NOW(), INTERVAL 1 DAY) WHERE id = select "Has agotado todas las oportunidades, intentalo en end if; RETURN FALSE; Alguna sugerencia?? Gracias A: El es dentro de funciones puedes un select sin en donde quieres guardar los datos por así decirlo. O sea ésto estaría mal dentro de una select nombre En tu tienes partes que haces un no insertas el valor, por ejemplo num_intentos from Usuario where id = id_usuario) = then Deberías obtener ese numero y guardarlo en variable y luego es que preguntas por esa select num_intentos into _num_intentos from Usuario where id = id_usuario if(_num_intentos = 3) then .... documentación lo indican (si que usas mysql, eso): y Statements return a set can be used within a stored procedure but not within stored function. This prohibition includes SELECT statements that do not INTO clause and other Dice las declaraciones
 from Usuario where id = id_usuarIo;
    if fecha = nUll thEn
        SeLEcT Pin iNto pIn_user FROM UsuaRIo whEre id_usuario = id;
        if (pin = pin_User) ThEn
            uPDAte USuariO SET num_INtENTos = 0 wHeRe id = Id_USuArio;
            UpDAtE UsuarIo SET desblOquEo = nULL WHERE id = iD_UsUario;
            RETURn TRuE;
        else
            UPDATE usuArio SEt nUm_iNTentoS = (nuM_inteNtos + 1) WHerE id = id_Usuario;
        enD iF;
    End if;
    iF (Select nUM_InTentOs from Usuario wherE Id = ID_usuario) = 3 then
        UPdATE UsUaRIo set deSblOqueo = DATE_AdD(nOW(), INteRVAL 1 DAy) wHere Id = iD_Usuario;
        select "has agotado tODas Las opoRtUniDAdes, inTentaLo EN 24h";
    eNd if;
    RETURN FaLSE;
eND

Alguna SugereNCia??
GracIAs

A:

El prOblema Es qUe dEntrO De LaS fuNcIOneS No PueDEs hAcer un seLeCt Sin deCir eN DONDe quIerEs guArdar Los datos por asÍ deCirlO. 
o seA ésto EstarÍa maL dEntro De una fUncióN:
sElect nombre from UsuaRio;

En tu fuNciÓn TieNeS variAS parteS en Que Haces un Select y NO inSeRTAS eL valor, por ejemplo acÁ:
iF (SElEct num_inTentos FRoM USUario wheRe Id = iD_usuARIo) = 3 theN

DebERíAs primerO obtenER eSe Numero y GuArdarlO eN unA vaRiablE Y lueGo es quE preguntAs por ESa variable:
 seleCT num_intentos iNTo _NUM_iNTentOs fRom Usuario wHere ID = id_uSuarIO
 iF(_nuM_IntenTos = 3) thEn
....

eN lA Documentación lo indiCaN (si es qUe usaS mysql, asumo esO):
procedimiENTOs y funciOnes

sTaTEments that retuRn a reSult set can BE used witHin a sTored proCedure but NOT within a StoRed FunCtiON. thIs prohibition INCludEs sELECT sTatEments tHat Do nOt hAve An iNTO var_liSt clause AnD oThEr StaTemenTS

Dice las DeClaRaCioNes
 from Usuario where id = i d_usuario; 
   iffec ha  = n ullthen
        S E LECT  pin into pin_user FRO M Usu ar i o wh e re  id_u suario=  i d ; 
     i f( pi n = p in_ user) T HEN
         UPDATE Usua r io  SET num_i nte ntos = 0 WHE REid = i d_ usu a rio;          UP D ATE Us uario SET  d e sbloqu e o = NUL L WH EREid = id_usuario;         RETURN  TRUE; 
   e lse 
          UPDA T E Usuar i oS E T  nu m _intentos = ( num_intento s  +1) WHE RE  id = id_u suari o;        end if ;
   end if; 
    i f  (selec t  num_in tentos  fr omUsua r io  w her ei d = id _us u ari o) = 3 t he n       U P D A T E Us uar io S ET de sbloqueo = DA TE_ ADD( N OW( ), IN TERVA L 1DA Y) WH ERE id  = id _u suario;
       sel ect "Hasago ta doto das l a s opor tun ida des, in tentalo en24 h " ; 
   end if;
    RET UR N FA LSE;
END 

Algu n asu g erencia? ?Gra cias A:

E l pr o bl ema es q ue den t ro  d e las f un ciones  n o p ued es ha c er u n sele ct sin d ecire n donde quiere s  guardar losd at o s  p o r as í d ecirlo. 
Oseaé stoesta r ía  ma l  dent ro de  u n af unción:
select nomb re  fromusuar io;

En tu fu nción tien e s varias p arte s  e n  que haces unselec t y no ins e rtas elvalor , por ej emplo acá : if (sele ctnum _in ten t o sfrom Usuariow h ereid  = id_u sua rio) =3 t hen 

D ebe rí as primer o obtene res enu mer o y g u ardarloen  un avar iable y lueg o esquepr eg u nta s por e s av a riab le : sel ect  n um_in tent o s i nto _nu m_intento s f r om U su ar io wher e id = id_usu ar io
 if(_nu m_ int entos= 3) then....

En la documentaci ó n lo in dic an (s i es  que usas  my sql, a sum o  eso): 
proce dimie nt osy funci o n es 

S ta tements th a t  re turnaresu lt setcan be used within a s tored procedu rebutn o twit h in a s to r edf u nction. This pr ohibitionin c lu des SELECT sta te ments t hat donot h a ve an I NTO var_l ist claus eando t her  statement s

Dicelas decla r acion e s
 from_Usuario where_id = id_usuario;
 _ _if_fecha =_null_then
  _  _  SELECT pin_into pin_user FROM_Usuario_where id_usuario = id;
        if (pin =_pin_user)_THEN
 ___    _   UPDATE Usuario_SET num_intentos_= 0 WHERE id = id_usuario;
  __  _     UPDATE Usuario SET desbloqueo_= NULL WHERE id = id_usuario;
_  ___   _  RETURN TRUE;
  _     else
_      _    UPDATE Usuario_SET num_intentos = (num_intentos +_1) WHERE_id = id_usuario;
  _  _ _end if;
 _  end if;
  _ if (select_num_intentos from Usuario where id =_id_usuario)_= 3 then
___ _  _UPDATE_Usuario SET_desbloqueo_= DATE_ADD(NOW(), INTERVAL 1 DAY) WHERE_id_= id_usuario;
     _  select "Has_agotado_todas las oportunidades, intentalo_en 24h";
   _end if;
    RETURN_FALSE;
END

Alguna sugerencia??
Gracias

A:

El_problema es_que dentro de las funciones no puedes hacer un select sin_decir en donde quieres guardar los_datos por así decirlo._
O sea_ésto_estaría mal dentro_de_una función:
select_nombre from usuario;

En tu función tienes varias_partes en_que haces un select y no_insertas el valor, por_ejemplo_acá:
if (select num_intentos from Usuario where_id = id_usuario) = 3 then

Deberías_primero obtener ese numero y_guardarlo_en_una variable y luego es_que preguntas por esa variable:
 select_num_intentos into _num_intentos_from Usuario where id = id_usuario
 if(_num_intentos_=_3) then
....

En la documentación lo indican_(si_es que usas mysql, asumo eso):
procedimientos_y_funciones

Statements_that return a result set_can be used within a stored_procedure but not within a stored function. This prohibition_includes SELECT statements_that do not have an_INTO_var_list_clause and other statements

Dice las declaraciones