2017-06-04 94 views
0

當我運行該功能這個mysql函數有什麼問題?

CREATE PROCEDURE alege() 
    BEGIN 
     declare v_prenumeNou VARCHAR(15); 
     declare v_numeRandom INTEGER(10); 
     declare v_prenumeRandom INTEGER(10); 
     declare v_idCutremurRandom INTEGER(10); 

     set v_numeRandom = 1 + CEIL (RAND() * 50); 
     set v_prenumeRandom = 1 + CEIL (RAND() * 50); 
     set v_idCutremurRandom = 1 + CEIL (RAND() * 50); 

     select prenume into v_prenumeNou from (SELECT prenume, rownum as v_rn from voluntari) where v_rn=v_prenumeRandom; 
     select nume into v_numeNou from (SELECT nume, rownum as v_rn from voluntari) where v_rn=v_numeRandom; 

     v_idPersoanaNou := v_idPersoanaNou + 1; 

     INSERT INTO voluntari (IDCUTREMUR, IDPERSOANA, NUME, PRENUME) 
     VALUES (CONCAT('C',IFNULL(v_idCutremurRandom, '')), CONCAT('V',IFNULL(v_idPersoanaNou, '')) , v_numeNou, v_prenumeNou); 
END; 

我有這個錯誤

[錯誤] 1248 - 每一個派生表必須有它自己的別名

我怎樣才能解決這個問題?

回答

0

嘗試用這個,只是改變的別名FROM子句(每deribed表必須有一個別名):

CREATE PROCEDURE alege() 
    BEGIN 
     declare v_prenumeNou VARCHAR(15); 
     declare v_numeRandom INTEGER(10); 
     declare v_prenumeRandom INTEGER(10); 
     declare v_idCutremurRandom INTEGER(10); 

     set v_numeRandom = 1 + CEIL (RAND() * 50); 
     set v_prenumeRandom = 1 + CEIL (RAND() * 50); 
     set v_idCutremurRandom = 1 + CEIL (RAND() * 50); 

     select prenume into v_prenumeNou from (SELECT prenume, rownum as v_rn from voluntari) AS A where v_rn=v_prenumeRandom; 
     select nume into v_numeNou from (SELECT nume, rownum as v_rn from voluntari) AS B where v_rn=v_numeRandom; 

     v_idPersoanaNou := v_idPersoanaNou + 1; 

     INSERT INTO voluntari (IDCUTREMUR, IDPERSOANA, NUME, PRENUME) 
     VALUES (CONCAT('C',IFNULL(v_idCutremurRandom, '')), CONCAT('V',IFNULL(v_idPersoanaNou, '')) , v_numeNou, v_prenumeNou); 
END; 
1

您必須在select into語句的別名添加到每個子查詢:

select prenume 
into v_prenumeNou 
from (SELECT prenume, rownum as v_rn 
     from voluntari) t1 <----------- 
where v_rn=v_prenumeRandom; 

select nume 
into v_numeNou 
from (SELECT nume, rownum as v_rn 
     from voluntari) t1 <------------ 
where v_rn=v_numeRandom;