2017-08-23 7 views
0

ここでは、手続きを使用して注文数量にもとづいて値引きを試みました。しかし、私はどのようにプロシージャの変数に列の値を割り当てるか分からない。ここSAP HANAの手続きで変数を割り当てる方法

私のコード:

create column table "KABIL_PRACTICE"."SALES_IF_ELSE" 
(
"SALES_ID" integer, 
"PRODUCT_ID" integer, 
"QTY" integer, 
"DISCOUNT" integer, 
"SALES_AMOUNT" Double 
); 

insert into "KABIL_PRACTICE"."SALES_IF_ELSE" ("SALES_ID","PRODUCT_ID","QTY","SALES_AMOUNT") values (1,101,15,1500); 
insert into "KABIL_PRACTICE"."SALES_IF_ELSE" ("SALES_ID","PRODUCT_ID","QTY","SALES_AMOUNT") values (2,102,25,2500); 
insert into "KABIL_PRACTICE"."SALES_IF_ELSE" ("SALES_ID","PRODUCT_ID","QTY","SALES_AMOUNT") values (3,103,35,3500); 
insert into "KABIL_PRACTICE"."SALES_IF_ELSE" ("SALES_ID","PRODUCT_ID","QTY","SALES_AMOUNT") values (4,104,40,4000); 
insert into "KABIL_PRACTICE"."SALES_IF_ELSE" ("SALES_ID","PRODUCT_ID","QTY","SALES_AMOUNT") values (5,105,27,2700); 
insert into "KABIL_PRACTICE"."SALES_IF_ELSE" ("SALES_ID","PRODUCT_ID","QTY","SALES_AMOUNT") values (6,106,32,3200); 
insert into "KABIL_PRACTICE"."SALES_IF_ELSE" ("SALES_ID","PRODUCT_ID","QTY","SALES_AMOUNT") values (7,107,19,1900); 

create procedure "KABIL_PRACTICE"."IF_ELSE_DISC" 
language sqlscript 
as begin 
declare QTY integer ; 
select "QTY" from "KABIL_PRACTICE"."SALES_IF_ELSE" := QTY; 
if (QTY > 25) 
then 
update "KABIL_PRACTICE"."SALES_IF_ELSE" set "DISCOUNT" = 5; 
else if 
update "KABIL_PRACTICE"."SALES_IF_ELSE" set "DISCOUNT" = 1; 
end if; 
end if; 
end; 

誰も私を助けて....

答えて

0

これは十分なSQLを使用してではなく、SQLデータベースに命令型プログラミングスタイルを強制しようとしていないの古典的なケースです。 条件に基づいてテーブルを更新するだけでいいですか?

この場合、手続き型ロジックはまったく必要ありません(SQLデータベースでも同様です)。

UPDATE "KABIL_PRACTICE"."SALES_IF_ELSE" 
SET "DISCOUNT" = (CASE WHEN "QTY" >25 
        THEN 2 
        ELSE 1 
        END) ; 

これは、単一のコマンドでないループを持つテーブルで計算"DISCOUNT"値を格納します。

0

変数を割り当てるには、列を選択します。例:

SELECT QTY INTO QTY FROM KABIL_PRACTICE.SALES_IF_ELSE 
+0

こんにちは、このコードを使用しました: 'QTY = "KABIL_PRACTICE"から "QTY"を選択してください。 "SALES_IF_ELSE"; if(QTY> 25) 'ですが、次のようなエラーが表示されます。inconsistent datatype:INT型はTABLE型と比較できません。 –

+0

なぜこれをやったのかもう少し説明できますか?一時テーブルを単一の整数と比較しているため、エラーが発生しました。整数に対して評価する場合は、テーブルの代わりに変数を使用する必要があります。 – DaveBeck

+0

こんにちはDave、 「QTY」列の値をチェックしたいだけで、数量が25を超える場合は割引をします。 –

関連する問題