zendarol
@zendarol
Первый Казахский программист

Перевести процедуры и функции с оракла sql в ms sql. Как?

Есть 5 процедур и функции

Процедура вывода контракта, суммы его и кем был подписан, а также клиента, на которого он оформлен.
create or replace procedure contract (num number)
is
cursor asd(num1 number)
is 
select c."num_contract",c."sum",e."surname" as "empsur",cl."surname" from
"contract" c
inner join "employee" e
on c."num_employee"=e."num_employee"
inner join "clients" cl
on c."num_client"=cl."num_client"
where c."num_employee"=num1;
begin
for emp_1 in asd(num)
loop
    DBMS_OUTPUT.PUT_LINE (lpad(emp_1."num_contract",20,' ')||' cost '||emp_1."sum"||' client '||emp_1."surname"|| ' emp '||emp_1."empsur" ); 
end loop;
end;


Функция считает полную стоимость прибыли клиента от заказа
create or replace function allcost (num number) return number
is
vip number;
begin
select sum("sum"*0.01*"%vypl") into vip from "contract" where "num_client"=num;
return vip;
end;


Процедура считает полную стоимость прибыли всех сотрудников от заказа
create or replace procedure allcost2
is
cursor cur
is
select sum("sum"*0.01*"%vypl") "ad","num_employee"
from "contract" 
group by "num_employee";
begin
for ssd in cur
loop
DBMS_OUTPUT.PUT_LINE (ssd."num_employee"||' summ '||ssd."ad");
end loop;


Функция считает прибыль от продажи вещи
create or replace function pribil (num number) return number
is
vip number;
begin
select c."sum"-t."price" into vip from "contract" c
inner join "things" t
on t."thing_id"=c."thing_id"
where "num_contract"=num;
return vip;
end;


Триггер, запрещающий повторять ИИН
create or replace TRIGGER mol
before  insert or update of "IIN" ON "clients"
for each  row
DECLARE 
clientsn number;
BEGIN
select count(*) into clientsn from "clients" s where s."IIN"=:new."IIN";
IF (clientsn=1) then
RAISE_APPLICATION_ERROR(-20323,'Oshibka pri vvode IIN. Nelyazya povtiryt');
end if;
end;


Пакет, который содержит процедуру и функцию по подсчету и выводу итоговой суммы(сколько потратил клиент)

create or replace PACKAGE pk_client_emp as
procedure contract(num number);
function summ(num number) return number;
end pk_client_emp;
/
create or replace  package body pk_client_emp
is
procedure contract(num number)
is
cursor emp(nn number)
is select c."num_contract", c."sum", cl."surname" "client", emp."surname" "employee" 
from "contract" c
inner join "clients" cl
on cl."num_client"=c."num_client"
inner join "employee" emp
on emp."num_employee"=c."num_employee"
where cl."num_client"=nn;
begin
for emp1 in emp(num)
loop
  DBMS_OUTPUT.PUT_LINE (emp1."num_contract"||' '||emp1."sum"||' client ='||emp1."client"|| ' employee '||emp1."employee" );
end loop;
 DBMS_OUTPUT.PUT_LINE('Itogova9 summa '||summ(num));
end;
function summ(num number) return number
is 
da number;
begin
select sum("sum") into da from "contract" where "num_client"=num;
return da;
end;
end pk_client_emp;


Хотя бы одну из них переделать в ms sql для примера
  • Вопрос задан
  • 295 просмотров
Пригласить эксперта
Ответы на вопрос 1
@timusKul
на MSDN достаточно и примеров и спецификации

не думая:
create function pribil (@num float)
returns float
as
begin
declare @ret float
select @ret=c.sum-t.price from "contract" c
inner join things t
on t.thing_id=c.thing_id
where num_contract=@num
return @ret
end;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы