Witam,
czy ktoś mógłby mi pomóc ze zmianą poniższego kodu z MS SQL do SQL?
Liczę na pomoc! :)
CREATE TABLE Konto
(
id INT IDENTITY (1, 1) NOT NULL PRIMARY KEY,
idOsoba INT,
numer VARCHAR(30),
saldo MONEY DEFAULT 0
)
CREATE TABLE Osoba
(
id INT IDENTITY (1, 1) NOT NULL PRIMARY KEY,
imie VARCHAR(30),
nazwisko VARCHAR(30),
pesel VARCHAR(15),
adres VARCHAR(80),
)
CREATE TABLE Karta
(
idKonto INT,
numer VARCHAR(30),
waznaDo DATETIME,
limit MONEY DEFAULT 0
)
CREATE TABLE Transakcja
(
dataTr DATETIME DEFAULT getdate(),
idKonto INT,
idTyp INT,
opis VARCHAR(80),
kwota MONEY DEFAULT 0
)
/*
rodzaj transakcji
0 - wplata
1 - wyplata
*/
CREATE TABLE TypTransakcji
(
id INT,
nazwa VARCHAR(40),
rodzaj INT DEFAULT 0
)
GO
/*
Funkcja skladajaca zwracajaca imie i nazwisko osoby na podstawie id
*/
CREATE FUNCTION podajImieNazwisko(@idOsoba INT)
RETURNS VARCHAR(65)
AS
BEGIN
DECLARE @imieNazwisko VARCHAR(65)
DECLARE @imie VARCHAR(30)
DECLARE @nazwisko VARCHAR(30)
SELECT @imie = imie, @nazwisko = nazwisko FROM Osoba WHERE id = @idOsoba
SET @imieNazwisko = @imie + ' ' + @nazwisko
RETURN (@imieNazwisko)
END
GO
/*
widok z lista transakcji
*/
CREATE VIEW ListaTransakcji
AS
SELECT
Transakcja.dataTr,
Konto.numer AS numerKonta,
Transakcja.opis,
Transakcja.kwota
FROM
Transakcja, Konto
WHERE
Transakcja.idKonto = Konto.id
GO
/*
widok z lista kont
*/
CREATE VIEW ListaKont
AS
SELECT
Konto.numer,
dbo.podajImieNazwisko(idOsoba) AS imieInazwisko,
Konto.saldo
FROM
Konto
GO
/*
Uzupelnienie tabel danymi
*/
INSERT INTO Osoba (imie, nazwisko, pesel, adres) VALUES ('Anna', 'Jawor', '123456789', 'Kozienice');
INSERT INTO Osoba (imie, nazwisko, pesel, adres) VALUES ('Jerzy', 'Buk', '987654321', 'Pionki');
GO
INSERT INTO Konto (idOsoba, numer) VALUES (1, '112341234-1111000022224444')
INSERT INTO Konto (idOsoba, numer) VALUES (2, '112341234-1111000022225555')
GO
INSERT INTO TypTransakcji VALUES (1, 'wplata gotowki', 0)
INSERT INTO TypTransakcji VALUES (2, 'przelew', 0)
INSERT INTO TypTransakcji VALUES (3, 'wyplata z bankomatu', 1)
INSERT INTO TypTransakcji VALUES (4, 'przelew', 1)
INSERT INTO TypTransakcji VALUES (5, 'zakup karta', 1)
GO
/*
Procedura dodawania karty do konta
*/
CREATE PROCEDURE DodajKarte
@numerKonta VARCHAR(30),
@numerKarty VARCHAR(30),
@waznaDo DATETIME,
@limit MONEY
AS
BEGIN
DECLARE @idKonto INT
SELECT @idKonto = id FROM Konto WHERE numer = @numerKonta
IF ((@@ERROR = 0) AND ( @@ROWCOUNT > 0))
BEGIN
INSERT INTO Karta (idKonto, numer, waznaDo, limit)
VALUES (@idKonto, @numerKarty, @waznaDo, @limit)
END
ELSE
BEGIN
RETURN(0)
END
END
GO
/*
Procedura zmiany statusu projektu o podanym kodzie
*/
CREATE PROCEDURE DodajTransakcje
@numerKonta VARCHAR(30),
@idTyp INT,
@kwota MONEY
AS
BEGIN
DECLARE @idKonto INT
DECLARE @opis VARCHAR(200)
DECLARE @nazwaTr VARCHAR(40)
DECLARE @rodzaj INT
SELECT @nazwaTr = nazwa, @rodzaj = rodzaj FROM TypTransakcji WHERE id = @idTyp
SET @opis = 'Transakcja: ' + @nazwaTr
SELECT @idKonto = id FROM Konto WHERE numer = @numerKonta
IF ((@@ERROR = 0) AND ( @@ROWCOUNT > 0))
BEGIN
-- transakcja dopisujaca zapis w Transakcjach i zmieniajaca saldo konta
BEGIN TRANSACTION
INSERT INTO Transakcja (idKonto, idTyp, opis, kwota)
VALUES (@idKonto, @idTyp, @opis, @kwota)
IF ((@@ERROR = 0) AND ( @@ROWCOUNT > 0))
BEGIN
IF (@rodzaj = 0)
BEGIN
-- wplata
UPDATE Konto SET saldo = saldo + @kwota WHERE id = @idKonto
IF ((@@ERROR = 0) AND ( @@ROWCOUNT > 0))
BEGIN
COMMIT TRANSACTION
END
ELSE
BEGIN
ROLLBACK TRANSACTION
END
END
ELSE
BEGIN
-- wyplata
UPDATE Konto SET saldo = saldo - @kwota WHERE id = @idKonto
IF ((@@ERROR = 0) AND ( @@ROWCOUNT > 0))
BEGIN
COMMIT TRANSACTION
END
ELSE
BEGIN
ROLLBACK TRANSACTION
END
END
END
ELSE
BEGIN
ROLLBACK TRANSACTION
END
END
ELSE
BEGIN
RETURN(0)
END
END
GO
/*
trigger sprawdzajacy czy przy dodaniu transakcji nie przekroczono jakiegos salda,
saldo musi byc zawsze >= 0
*/
CREATE TRIGGER SprawdzSaldo
ON Konto
AFTER UPDATE
AS
-- wszystkie saldo ponizej 0
SELECT saldo FROM Konto WHERE saldo < 0
IF (@@ROWCOUNT > 0)
BEGIN
RAISERROR('Saldo ponizej zera', 16, 1)
ROLLBACK TRANSACTION
END
GO
-- wplata
EXECUTE DodajTransakcje '112341234-1111000022224444', 1, 1000
GO
-- wyplata z bankomatu
EXECUTE DodajTransakcje '112341234-1111000022224444', 3, 120
GO
-- zakup karta
EXECUTE DodajTransakcje '112341234-1111000022224444', 5, 49.99
GO
-- przekroczenie salda
EXECUTE DodajTransakcje '112341234-1111000022224444', 3, 900
GO
SELECT * FROM ListaKont
SELECT * FROM ListaTransakcji
GO