Hilfe bei Erstellung einer Stored Procedure inkl. SQL Join

Lavender1984

Neuer Benutzer
Beiträge
1
Hallo zusammen,

zuerst muss ich sagen, dass ich mit SQL bisher nicht viel am Hut hatte.

Ich habe folgende drei Tabellen aus der Datenbank eines Krankenhausinformationssystems (KIS):

Tabelle "HoHospitalisation" (enthält die Behandlungsfalldaten, d.h. die mit einer Krankenhausaufnahme bzw. einem -aufenthalt eines Patienten verbundenen Daten)
HoRefnr |HoPaRefnr | HoAufnahmenummer | HoAufnahmedatum | HoAufnahmezeit | HoEntlassungsdatum | HoEntlassungszeit | ...

Tabelle "vSYSMEDZ" (enthält die ärztlich verordneten Medikamente)
MEDZRefnr | MEDZName | MEDZWirkstoff | MEDZVForm | ...

Tabelle "MEDZZMEDZHoZuordnung" (Zuordnungstabelle "Medikamente zu Fall")
MEDZZMEDZRefnr | MEDZZHoRefnr | MEDZZHoDatum | MEDZZHoDosis | MEDZZHoIntervall

Ich möchte nun eine Stored Procedure anlegen, welche die Medikamente eines Patienten bei Entlassung (=Entlassmedikation) zurückgibt. Dabei wird der Stored Procedure ein Identifikator vom Fall übergeben. Als Rückgabe soll je Arzneimittel die Bezeichnung, der Wirkstoff, die Dosis sowie das Dosierungsintervall ausgegeben werden.

Meine Stored Procedure:

CREATE Procedure UDTCTXENTLMEDIS
@ho int​
AS
BEGIN
DECLARE @MNAME varchar (255), @MWIRKSTOFF varchar (255),​
@ MDOSIS varchar (255), @MINTERVALL varchar (255)
SELECT @MNAME = MEDZName, @MWIRKSTOFF = MEDZWirkstoff,
@MDOSIS = MEDZZHoDosis, @MINTERVALL = MEDZZHoIntervall​
FROM vSYSMEDZ JOIN MEDZZMEDZHoZuordnung ON MEDZRefnr = MEDZZMEDZRefnr
JOIN HoHospitalisation ON MEDZZHoRefnr = HoRefnr​
WHERE MEDZZHoRefnr = @ho AND MEDZZHoDatum = HoEntlassungsdatum​
END

Ist das so korrekt?! Leider habe ich nicht die Möglichkeit es zu testen und bin daher um jede Hilfe und ggf. Berichtigung sehr dankbar!

Beste Grüße
Lavender
 
Werbung:
Ich habe mir mal die Mühe gemacht, es ist nicht wirklich professionell gemacht (langfristig), aber sollte für den Anfang ausreichen:

Ich habe das Ganze hoffentlich in etwa richtig umsetzen können:

Erstellen der 3 Tabellen
Code:
create table patienten(id serial primary key, name text not null);
create table medikamente(id serial primary key, name text not null, hersteller text not null, menge integer not null, unique(name, hersteller, menge));
create table verordnungen(id serial primary key, patient integer references patienten(id) not null, medikament integer references medikamente(id) not null, einnahmenabstände interval not null);

Erstellen einer View
Code:
create view view_verordnungen as select patienten.name as patient, medikamente.name as medikament, medikamente.menge, verordnungen.einnahmeabstände from verordnungen
inner join patienten on (verordnungen.patient = patienten.id) inner join medikamente on (verordnungen.medikament = medikamente.id);

Ein paar Werte einfügen
Code:
insert into medikamente(name, hersteller, menge) values ('Medi1', 'Laborist1', 200);
insert into medikamente(name, hersteller, menge) values ('Medi2', 'Laborist1', 100);
insert into patienten(name) values ('Hans');
insert into patienten(name) values ('Klemens');
insert into verordnungen(patient, medikament, einnahmeabstände) values ((select id from patienten where lower(name) = lower('Hans')), (select id from medikamente where lower(name) = lower('Medi1')), '1 days'::interval);
insert into verordnungen(patient, medikament, einnahmeabstände) values ((select id from patienten where lower(name) = lower('Klemens')), (select id from medikamente where lower(name) = lower('Medi1')), '1 days'::interval);
insert into verordnungen(patient, medikament, einnahmeabstände) values ((select id from patienten where lower(name) = lower('Klemens')), (select id from medikamente where lower(name) = lower('Medi2')), '1 days'::interval);

Alles von der View selecten
Code:
select * from view_verordnungen;

Von der View mittels einer Where-Klausel filtern
Code:
select * from view_verordnungen where patient = 'Klemens';

Eine Funktion für gefilterte Selects aus dem View bauen
Code:
create or replace function filtered_verordnung(q_patient text) returns table(patient text, medikament text, einnahmeabstände interval) as $$ select patient, medikament, einnahmeabstände from view_verordnungen where lower(patient) = lower(q_patient) $$ language sql;

Mittels einer Funktion aus der View selecten
Code:
select * from filtered_verordnung('Klemens');

Ergebniss:
Klemens, Medi1, 1 day
Klemens, Medi2, 1 day

Mittels einer Funktion aus der View selecten
Code:
select * from filtered_verordnung('Hans');

Ergebniss:
Hans, Medi1, 1 day
 
Zurück
Oben