2016-09-27 26 views
0

私はこのようなクエリを持って作成するために、MySQLでプロシージャを作成します。各選択クエリ

SELECT 
    a.CREATED, 
    a.FIRST_REVISION, 
    a.SECOND_REVISION , 
    a.THIRD_REVISION , 
    a.FOURTH_REVISION, 
    a.FIFTH_REVISION 
FROM tb_master_repair_estimate a 
WHERE a.REPAIR_ESTIMATE_ID = 91 

を、私はこのようになりました:

+---------------------+----------------+-----------------+----------------+-----------------+----------------+ 
| CREATED    | FIRST_REVISION | SECOND_REVISION | THIRD_REVISION | FOURTH_REVISION | FIFTH_REVISION | 
+---------------------+----------------+-----------------+----------------+-----------------+----------------+ 
| 2016-09-26 04:32:22 | 2016-09-25  | 2016-09-25  | 2016-09-25  | NULL   | NULL   | 
+---------------------+----------------+-----------------+----------------+-----------------+----------------+ 
1 row in set (0.00 sec) 

は、私はこのようなロジックを持つプロシージャを作成することはできますか?

I will check in field FIRST_REVISION, 
    if null, I used data CREATED to another query 
    break; 
I will check IN field SECOND_REVISION 
    if null, I use data FIRST_REVISION to another query 
    break 
I will check IN field THIRD_REVISION 
    if null, I use data SECOND_REVISION to another query 
    break 

私はそれを管理するための手順のようなものがありますか?

例を挙げて、私はmysqlで関数やプロシージャを作成する初心者です。

CREATE FUNCTION F_CHECK_LAST_REVISED 
    RETURNS DATE 

BEGIN 
    /* LIKE THIS ONE */ 

END; 

私はこのようなプロシージャを作成:

DROP PROCEDURE IF EXISTS P_CHECK_LAST_REVISED; 

DELIMITER // 

CREATE PROCEDURE P_CHECK_LAST_REVISED(id_cari int(10)) 

BEGIN 

DECLARE pre varchar(50); 
DECLARE one varchar(50); 
DECLARE two varchar(50); 
DECLARE three varchar(50); 
DECLARE four varchar(50); 
DECLARE five varchar(50); 
DECLARE last_revision varchar(50); 

SELECT CREATED, FIRST_REVISION, SECOND_REVISION, THIRD_REVISION, FOURTH_REVISION, FIFTH_REVISION   
    INTO one, two,three, four, five 
    FROM tb_master_repair_estimate a 
WHERE a.REPAIR_ESTIMATE_ID = id_cari; 

IF one IS NULL THEN 
    SELECT b.* FROM tb_repair_detail b 
    WHERE b.REPAIR_ESTIMATE_ID = id_cari; 

ELSEIF two IS NULL THEN 
    SELECT c.* FROM tb_repair_detail_first_revision c 
    WHERE c.REPAIR_ESTIMATE_ID = id_cari; 

ELSEIF three IS NULL THEN 
    SELECT d.* FROM tb_repair_detail_second_revision d 
    WHERE d.REPAIR_ESTIMATE_ID = id_cari; 

ELSEIF four IS NULL THEN 
    SELECT e.* FROM tb_repair_detail_third_revision e 
    WHERE e.REPAIR_ESTIMATE_ID = id_cari; 

ELSEIF five IS NULL THEN 
    SELECT f.* FROM tb_repair_detail_fourth_revision f 
    WHERE f.REPAIR_ESTIMATE_ID = id_cari; 

ELSE 
    SELECT g.* FROM tb_repair_detail_fifth_revision g 
    WHERE gx.REPAIR_ESTIMATE_ID = id_cari; 

END IF; 

END; 
// 

だから、call P_CHECK_LAST_REVISED(92)、私はこのようなエラーを得た:こんにちはかもしれ

The used select statment hav a different number columns 
+1

はい、非常に簡単にIF'ブロック'として選択ヴァルスにあなたは、推定IDなど – Drew

+0

のようなprocに渡すべきparamsを決めるでしょう。 –

+2

私はここにいると思います。あなたは180の質問と5つの受け入れられた答えを持っています。 idk。 – Drew

答えて

-1

あなたはこの

を試すことができます

`DELIMITER //

a.CREATED、

a.FIRST_REVISION、

a.SECOND_REVISION、

SELECT

を開始手続きテスト(p_REPAIR_ESTIMATE_ID int型)

を作成します。 THIRD_REVISION、

a.FOURTH_REVISION、tb_master_repair_estimate FROM

a.FIFTH_REVISION

a.REPAIR_ESTIMATE_ID = p_REPAIR_ESTIMATE_ID

END; `

+0

OPが要求したロジックに従うコードを追加できますか? –