PostgreSQL
Portierung Oracle
AS Geronimo
Liferay
.Net (VB)
PowerPoint-Tips
Excel-Tips
Word-Tips
Outlook-Tips
Zitatenschatz
Dietmar Keune


Für das Können gibt es nur einen Beweis: das Tun.
Marie von Ebner-Eschenbach Öst. Schriftstellerin (1830-1916)

Portierung Oracle nach PostgreSQL

Oracle

PostgreSQL

Bemerkung

RETURN

RETURN, RETURNS


IS

AS


BEGIN

BEGIN


COMMIT

COMMIT;


VARCHAR2

VARCHAR


NUMBER

NUMERIC, INTEGER


sysdate

now(), CURRENT_TIMESTAMP, timeofday()

Timeofday() in pgsql einzig wirkliche akt. Zeit, sonst Transaktionsbeginn.

cErrCode NUMBER := SQLCODE;

cErrCode VARCHAR := SQLSTATE;


cErrMsg VARCHAR2(512) := TRIM(SQLERRM);

cErrMsg VARCHAR(512) := TRIM(SQLERRM);


to_char(nInteger)

to_char(nInteger,''9999999999'')


to_number(cZeichenkette)

to_number(cZeichenkette,''9999999999'')


cursor CurMainLogPatient IS SELECT PatientID FROM P_LogPatient

CurMainLogPatient Cursor IS SELECT PatientID FROM P_LogPatient


CurMemQuellen CurQuellen%ROWTYPE;

....

OPEN CurQuellen;
LOOP
FETCH CurQuellen INTO CurMemQuellen;

CurMemQuellen P_Domaenen%ROWTYPE;

...

OPEN CurQuellen;
LOOP
FETCH CurQuellen INTO CurMemQuellen;

Es können nur existierende Tabellen oder Views benutzt werden!

TYPE RefCurQuelleS_Patient IS REF CURSOR;
CurQuelleS_Patient RefCurQuelleS_Patient;

CurQuelleS_Patient REFCURSOR;
CurQuelleS_Patient RefCurQuelleS_Patient;


Erzeuge ungebunden Cursor und ordne

DBMS_OUTPUT.PUT_LINE (für Exeption)

RAISE level 
level :=	DEBUG -Meldung in Serverlog
LOG	-Meldung mit höherer Priorität 
         in Serverlog
NOTICE  -Meld. untersch. Prio. in Serverlog &
	 an Client senden
WARNING -Meld. untersch. Prio. in Serverlog & 
	 an Client senden
EXCEPTION -Error erzeugen und die akt. 
  Transaktion abbrechen

		

EXIT WHEN CurTicketStatus%NOTFOUND;

IF NOT FOUND THEN

EXIT;

END IF;


tGiveTime TIMESTAMP := SYSDATE-(nMinuteWaitForTicket*(1/24/60));

tGiveTime TIMESTAMP := now()- (nMinuteWaitForTicket||' minutes')::Interval;

alternativ mit days, months, hours, years & seconds


create or replace PROCEDURE ADM_Autom_TicketGive (nDaysTicketValid in NUMBER,nMinuteWaitForTicket IN NUMBER) AS

cursor CurTicketStatus IS SELECT TicketID

FROM OPENSC.P_TicketStatus WHERE ...

CREATE OR REPLACE FUNCTION adm_autom_ticketgive(integer, integer)

RETURNS void AS $$

DECLARE nDaysTicketValid ALIAS FOR $1;

nMinuteWaitForTicket ALIAS FOR $2;

CurTicketStatus CURSOR FOR SELECT TicketID FROM OPENSC.P_TicketStatus WHERE ...


EXECUTE 'UPDATE tbl SET ' || spaltenname||' = '|| neuerwert

|| ' WHERE ...';

EXECUTE ''UPDATE tbl SET '' || quote_ident(spaltenname) || '' = ''

|| quote_literal(neuerwert) || '' WHERE ...'';

quote_ident() für Spaltennamen

quote_literal() für Zuweisungen von Literalen zu dyn.Feldern



create or replace function testProcedure(varchar) returns char as $$

Declare text alias for $1;

Begin

perform adm_autom_ticketupdate();

raise notice 'Done! %', text;

return 'k';

end;

$$ language plpgsql;

-----------------------------------------------

select testProcedure('^^')



create or replace function testProcedure(varchar) returns void as $$

Declare text alias for $1;

Begin

perform adm_autom_ticketupdate();

raise notice 'Done! %', text;

end;

$$ language plpgsql;

-----------------------------------------------

select testProcedure('^^')

'Returns void... -- dann keine Return;


Aufruf mit PERFORM ....

FETCH CurMainLogPatient INTO nMainPatientID; kein Satz -> Ergenisvariable bleibt wie sie war!

FETCH CurMainLogPatient INTO nMainPatientID; kein Satz -> Ergenisvariable NULL

Ergebnis unterschiedlich

open cur_viewtable;

if cur_viewtable%isopen then

loop

fetch cur_viewtable into ...

open cur_viewtable;

while found = true

loop

fetch cur_viewtable into

Überprüfung, ob Cursor offen

IF err_num = -955 THEN RAISE EXCEPTION ...

IF err_num = '42P07' THEN RAISE EXCEPTION ...




PostgreSQL-

Automatische Anmeldung für psql:Lw:\Users\%user%\AppData\Roaming\postgresql\pgpass.conf


Beispiele für Portierung von Funktionen und Prozeduren von Oracle nach PostgreSQL

http://www.postgresql.org/docs/7.4/static/plpgsql-porting.html


Funktionen

http://www.postgresql.org/docs/current/static/xfunc-sql.html


Übersicht SQL-Kommandos

http://www.postgresql.org/docs/current/static/sql-commands.html


PostgreSQL Fehler-Codes

http://www.postgresql.org/docs/current/static/errcodes-appendix.html


String Funktionen & Operatoren

http://www.postgresql.org/docs/8.4/static/functions-string.html


Datentypen zu Zeit & Datum

http://www.postgresql.org/docs/7.4/static/datatype-datetime.html


Dokumentationsindex (alphabetisch)

http://www.postgresql.org/docs/7.4/static/bookindex.html


Tipps & Tricks

http://www.postgres.cz/index.php/PostgreSQL_SQL_Tricks


PostgreSQL wiki

http://wiki.postgresql.org/wiki/Main_Page

Am Anfang
Selbst
Der engste Kreis
Impressum