2017-08-23 5 views
0

ici, j'ai essayé de donner une réduction basée sur la quantité commandée en utilisant la procédure. mais je ne sais pas comment assigner une valeur de colonne à la variable dans la procédure.comment affecter une variable dans la procédure dans SAP HANA

ici mon code:

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; 

quelqu'un me aider ....

Répondre

0

Ceci est un cas classique de ne pas utiliser assez SQL, mais plutôt d'essayer de forcer un style de programmation impératif sur une base de données SQL. Tout ce que vous voulez faire est de mettre à jour une table en fonction d'une condition, n'est-ce pas?

Dans ce cas, il n'y a pas du tout besoin de logique procédurale (et c'est vrai pour toute base de données SQL).

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

Ce stockera la valeur calculée "DISCOUNT" dans le tableau sans mise en boucle, en une seule commande.

0

Vous pouvez affecter des variables en sélectionnant des colonnes dans celles-ci. Par exemple:

SELECT QTY INTO QTY FROM KABIL_PRACTICE.SALES_IF_ELSE 
+0

Salut, merci pour votre réponse, mais ici je l'ai utilisé ce code:. « Qty = sélectionner "QTY" de "KABIL_PRACTICE" "SALES_IF_ELSE"; if (QTY> 25) 'mais il affiche une erreur comme celle-ci: type de données incohérent: le type INT n'est pas comparable au type TABLE. –

+0

Pourriez-vous expliquer un peu plus pourquoi vous avez fait cela? L'erreur est survenue parce que vous comparez une table temporaire à un seul entier. Vous devez utiliser une variable au lieu d'une table si vous souhaitez évaluer par rapport à un entier. – DaveBeck

+0

Salut Dave, Je veux juste vérifier les valeurs de la colonne "QTY" et si la quantité est supérieure à 25, je voudrais donner la réduction. –