как назначить переменную в процедуре в 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;

кто нибудь помогите мне....


person KABIL ARASAN    schedule 23.08.2017    source источник


Ответы (2)


Это классический случай недостаточного использования SQL, вместо этого попытки применить императивный стиль программирования к базе данных SQL. Все, что вам нужно сделать, это обновить таблицу на основе условия, не так ли?

В этом случае вообще не нужна процедурная логика (и это верно для любой базы данных SQL).

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

Это сохранит вычисленное значение "DISCOUNT" в таблице без зацикливания в одной команде.

person Lars Br.    schedule 23.08.2017

Вы можете назначать переменные, выбирая в них столбцы. Например:

SELECT QTY INTO QTY FROM KABIL_PRACTICE.SALES_IF_ELSE
person DaveBeck    schedule 28.08.2017
comment
Привет, спасибо за ваш ответ, но здесь я использовал этот код: 'QTY = выберите QTY из KABIL_PRACTICE.SALES_IF_ELSE; if (QTY › 25)', но выдает такую ​​ошибку: несогласованный тип данных: тип INT не сравним с типом TABLE. - person KABIL ARASAN; 29.08.2017
comment
Не могли бы вы немного подробнее объяснить, почему вы это сделали? Ошибка произошла из-за того, что вы сравниваете временную таблицу с одним целым числом. Вам нужно использовать переменную вместо таблицы, если вы хотите оценить целое число. - person DaveBeck; 30.08.2017
comment
привет, Дэйв, я просто хочу проверить значения из столбца QTY, и если количество больше 25, я хотел бы предоставить скидку. - person KABIL ARASAN; 30.08.2017