2017-10-16 5 views
0

私は同時に2つのテーブルにデータを追加しますが、mySQLを使用するプロシージャを作成しようとしていますが、データベースのif/elseステートメントを使用する経験はあまりありません。私はuがその使用のストアの後にすべてのテーブルを追加するためのビューテーブルを使用する必要があると思うデータベースにプロシージャを追加する

DELIMITER $$ 
Create Procedure addOrder(IN cust_id int, IN camera_id int, IN len_id int, 
IN emp_id int, IN c_quantity int,IN l_quantity int, 
IN status char(30), IN p_Status char(30), IN hire_date date, IN return_date 
date) 
begin 
Declare order_id int; 
Declare hireTime int; 
Declare totalC int; 
Declare totalL int; 
Declare totalP int; 

Select order_id = max(orderID) from orders; 
if orderID is null then set order_id = 1; 

Set hireTime = DATEDILL(hire_date, return_date); 
if hire_date == return_date then set hireTime = 1; 

if p_Status = "Lost" then set 
    select totalC = hireTime*c_quantity*hPrice + pPrice from Camera as C 
    inner join orderDetail as OD on C.camID = OD.camera_id inner join Orders 
    as O on O.orderID = OD.order_id; 

    select totalL = hireTime*l_quantity*hPrice + pPrice from Lens as L 
    inner join orderDetail as OD on L.lenID = OD.len_id inner join Orders as 
    O on O.orderID = OD.order_id; 

    Set totalP = totalL + totalC; 
else set 
    select totalC = hireTime*c_quantity*hPrice + pPrice from Camera as C 
    inner join orderDetail as OD on C.camID = OD.camera_id inner join Orders 
    as O on O.orderID = OD.order_id; 

    select totalL = hireTime*l_quantity*hPrice + pPrice from Lens as L 
    inner join orderDetail as OD on L.lenID = OD.len_id inner join Orders as 
    O on O.orderID = OD.order_id; 

    Set totalP = totalL + totalC; 
end if; 

insert into Orders(custID, empID, hireDate, returnDate) 
    values (cust_id, emp_id,hire_date, return_date); 

insert into orderDetail(orderID, cameraID, lenID, totalPrice, camQuantity, 
lenQuantity, status, pStatus) values (order_id,camera_id, len_id, totalP, 
c_quantity, l_quantity, status, p_Status); 
end $$ 
DELIMITER 
+0

注文の詳細行ごとにこれを呼び出す予定ですか? –

+0

ここにいくつかの明白な問題があります。datedill関数はありません。おそらくdatediffを意味します。ヌルセーフの等価は<=>ではありません。==、if then thenの後のset文は何も設定しませんなぜこの表から何も使用されていないときにselectステートメントで注文を参照しているのですが、注文明細ごとにこれを呼び出していると、毎回注文に挿入したくないと思われます。質問のサンプルデータを期待した結果のテキストまたはsqlfiddleに公開することができれば役に立ちます。 –

答えて

0

:ここ

Customer information: ID,Name, Address, Telephone. 

Staff information: ID, Name, Phone 

Camera/Len Type: ID,Name 

Camera: ID, typeID, Model, Status, Color, Hiring Price (per day), Paying Price (in case of loss). 

Len: ID, TypeID, Model, Status, Hiring Price (per day), Paying Price (in case of loss). 

Order orderID, customerID, employeeID, hireDate, returnDate 

OrderDetail: orderID, cameraID, lenID, cameraQuantity, lenQuantity, Status(paid/not paid), pStatus(Lost/Ok) 

は、プロシージャのコードです:私は私のコードここ

属性修正することができますd手順。そして、私はあなたを与え、私はあなたが理解できると思う例を示します。

CREATE PROCEDURE [dbo].[sp_CMIDByID] @UID INT, @TID INT 
AS 
BEGIN 
DECLARE @CMID INT 

IF(@TID IS NULL AND @UID IS NOT NULL) 
BEGIN 
    SELECT @TID = TID, @CMID = CMID FROM tbl_U WHERE UID = @UID  
END 


IF (@CMID IS NULL AND @TID IS NOT NULL) 
BEGIN 
    SELECT @CMID = CMID FROM tbl_T WHERE TID = @TID 
END 

SELECT @CMID 
END 
+0

これはsqlserverの回答ですが、疑問はmysqlです。重要な違いがあります。 –

関連する問題