Funktionen und Operatoren, die eine Teilmenge von Funktionen und Paketen aus dem Oracle RDBMS emulieren.
Es gibt eine zugehörige Google-Gruppe – https://groups.google.com/forum/?hl=en#!forum/orafce-general
Orafce wird in AWS Aurora mit PostgreSQL-Kompatibilität und auch in Azure Database for PostgreSQL unterstützt.
Dieses Modul enthält einige nützliche Funktionen, die bei der Portierung von Oracle-Anwendungen nach PostgreSQL hilfreich sein können oder allgemein nützlich sein können.
Integrierte Oracle-Datumsfunktionen wurden mit Oracle 10 auf Konformität getestet. Datumsbereiche von 1960 bis 2070 funktionieren korrekt. Daten vor dem 05.10.1582 mit dem „J“-Format und vor dem 01.03.1100 mit anderen Formaten können aufgrund eines Fehlers in Oracle nicht überprüft werden.
Alle Funktionen sind vollständig kompatibel mit Oracle und respektieren alle bekannten Formatzeichenfolgen. Ausführliche Beschreibungen finden Sie im Internet. Verwenden Sie Schlüsselwörter wie: Oracle Round Trunc Date iyyy.
Y,YY,YYY,YYYY,SYYY,SYEAR Jahr I,IY,IYY,IYYY iso Jahr Q, Viertel WW-Woche, Tag als erster Tag des Jahres IW-Woche, Beginn Montag W Woche, Tag als erster Tag des Monats DAY,DY,D erster Tag der Woche, Sonntag MONAT, MON, MM, RM Monat CC,SCC Jahrhundert TDD,DD,J Tag HH, HH12, HH24 Stunden MI Minute
Funktionen aufgerundet. Das heißt, ein Datum vom 1. Juli wird auf das nächste Jahr gerundet. Der 16. Juli wird auf August aufgerundet.
add_months(date, integer) date – Gibt das Datum plus n Monate zurück
add_months(date '2005-05-31',1) -> 2005-06-30
last_date(date) date – Gibt den letzten Tag des Monats basierend auf einem Datumswert zurück
last_day(Datum '24.05.2005') -> 31.05.2005
next_day(date, text) Datum – Gibt den ersten Wochentag zurück, der größer als ein Datumswert ist
next_day(Datum '24.05.2005', 'Montag') -> 30.05.2005
next_day(date, integer) date – Das Gleiche wie oben. Das zweite Argument sollte 1..7 sein und als Sunday..Satday interpretiert werden.
next_day(Datum '24.05.2005', 1) -> 30.05.2005
Monate_zwischen(Datum, Datum) numerisch – Gibt die Anzahl der Monate zwischen Datum1 und Datum2 zurück. Wenn ein Bruchteil eines Monats berechnet wird, berechnet die Funktion „months_between“ den Bruchteil basierend auf einem 31-Tage-Monat.
Monate_zwischen(Datum '1995-02-02', Datum '1995-01-01') -> 1.0322580645161
trunc(date, text) date – Datum entsprechend dem angegebenen Format abschneiden
trunc(date '2005-07-12', 'iw') -> 2005-07-11
Round(Datum, Text) Datum – rundet Datumsangaben gemäß dem angegebenen Format
Runde (Datum '2005-07-12', 'yyyy') -> 2006-01-01
to_date(text) timestamp – wandelt den Eingabetext in einen Zeitstempel um. Das GUC orafce.nls_date_format wird verwendet, um das Eingabetextformat für diese Funktion anzugeben. Wenn der Wert leer bleibt oder auf DEFAULT festgelegt ist, geben Sie das Textformat gemäß der GUC-Einstellung datestyle von PostgreSQL ein.
orafce.nls_date_format Wert auf DEFAULT
to_date('2014-05-19 17:23:53+5:30') -> 2014-05-19 17:23:53
orafce.nls_date_format='JJJJ-MMTT HH24:MI:SS'
to_date('2014-0519 17:23:53+5:30') -> 2014-05-19 17:23:53
to_date(text, text) timestamp – wandelt Eingabetext mit dem angegebenen Format in den Zeitstempel um. Der GUC orafce.orafce_emit_error_on_date_bug
wird verwendet, um anzugeben, ob ein Fehler gemeldet wird, wenn der Datumswert auf den Oracle-Fehler bei Datumsangaben trifft. Dieser Fehler tritt bei Datumsangaben vor 1582-10-05
auf, wenn das 'J'
-Format verwendet wird ( 'J2299159'
), und bei anderen Formaten vor 1100-03-01
. Standardmäßig wird ein Fehler gemeldet. Um dieses Verhalten zu deaktivieren, set orafce.orafce_emit_error_on_date_bug to off
.
SELECT oracle.to_date('112012', 'J'); FEHLER: Daten vor dem 05.10.1582 („J2299159“) können aufgrund eines Fehlers in Oracle nicht überprüft werden. SELECT oracle.to_date('1003-03-15', 'yyyy-mm-dd'); FEHLER: Daten vor dem 01.03.1100 können aufgrund eines Fehlers in Oracle nicht überprüft werden. SET orafce.oracle_compatibility_date_limit TO off; SELECT oracle.to_date('112012', 'J'); miteinander ausgehen ------------------------ 4407-07-30 00:00:00 v. Chr (1 Reihe) SELECT oracle.to_date('1003/03/15', 'yyyy/mm/dd'); miteinander ausgehen --------------------- 1003-03-15 00:00:00 (1 Reihe)
Dieses Modul enthält die Implementierung des Oracle-kompatiblen DATE-Datentyps „oracle.date“ und Funktionen, die den DATE-Datentyp verwenden, wie oracle.add_months, oracle.last_day(), oracle.next_day(), oracle.months_between() usw.
Beispiel:
setze search_path TO oracle,"$user", public, pg_catalog; Tabelle erstellen oracle_date(col1 date); insert into oracle_date Values('2014-06-24 12:12:11'::date); select * from oracle_date; Spalte 1 --------------------- 24.06.2014 12:12:11 (1 Reihe)
oracle.add_months(Zeitstempel mit Zeitzone, Ganzzahl) – Gibt Datum und Uhrzeit plus n Monate zurück
oracle.add_months(oracle.date'2005-05-31 10:12:12',1) -> 2005-06-30 10:12:12
oracle.last_day(Zeitstempel mit Zeitzone) – Gibt den letzten Tag des Monats basierend auf einem Datumswert zurück
oracle.last_day(oracle.date '2005-05-24 11:12:12') -> 2005-05-31 11:12:12
oracle.next_day(Zeitstempel mit Zeitzone, Text) – Gibt den ersten Wochentag zurück, der größer als ein Datumswert ist
oracle.next_day(oracle.date '2005-05-24 10:12:12', 'monday') -> 2005-05-30 10:12:12
oracle.next_day(Zeitstempel mit Zeitzone, Ganzzahl) – Dasselbe wie oben. Das zweite Argument sollte 1..7 sein und als Sonntag..Samstag interpretiert werden.
oracle.next_day(oracle.date '2005-05-24 11:21:12', 1) -> 2005-05-29 11:21:12
oracle.months_between(Zeitstempel mit Zeitzone, Zeitstempel mit Zeitzone) – Gibt die Anzahl der Monate zwischen Zeitstempel1 und Zeitstempel2 zurück. Wenn ein Bruchteil eines Monats berechnet wird, berechnet die Funktion „months_between“ den Bruchteil basierend auf einem 31-Tage-Monat.
oracle.months_between(oracle.date '1995-02-02 10:00:00', oracle.date '1995-01-01 10:21:11') -> 1.03225806451613
oracle.to_date(text,text) – Gibt einen Zeitstempel ohne Zeitzone zurück.
oracle.to_date('02/16/09 04:12:12', 'MM/DD/YY HH24:MI:SS') -> 2009-02-16 04:12:12
oracle.to_date(text) – Gibt oracle.date zurück
oracle.to_date('02/16/09 04:12:12') -> 2009-02-16 04:12:12
oracle.sysdate() – Gibt den Anweisungszeitstempel in der Serverzeitzone (orafce.timezone) zurück.
oracle.sysdate() -> 2015-12-09 17:47:56
oracle.dbtimezone – Gibt die Serverzeitzone zurück – emuliert über orafce.timezone
oracle.dbtimezone() -> GMT
oracle.sessiontimezone() – Gibt die Sitzungszeitzone zurück – die aktuelle PostgreSQL-Zeitzone
oracle.sessiontimezone() -> Europa/Prag
oracle.sys_extract_utc(timestamp with timezone) – Gibt den Zeitstempel in der UTC-Zeitzone zurück
oracle.sys_extract_utc(current_timestamp)
oracle.sys_extract_utc(oracle.date) – Gibt den Zeitstempel in der UTC-Zeitzone zurück. Wenn keine Zeitzone angegeben ist, wird die Sitzungszeitzone (aktuelle PostgreSQL-Zeitzone) verwendet
oracle.sys_extract_utc(oracle.date '2005-05-24 11:21:12', 1) -> 2005-05-24 09:21:12
oracle.to_char(timestamp) – Gibt den Zeitstempel im nls_date_format zurück.
orafce.nls_date_format='YY-MonDD HH24:MI:SS' oracle.to_char(to_date('14-Jan08 11:44:49+05:30')) -> 14-Jan08 11:44:49 orafce.nls_date_format='YY-MonDD HH24:MI:SS' oracle.to_char(oracle.to_date('21052014 12:13:44+05:30','DDMMYYYY HH24:MI:SS')) -> 14-May21 12:13:44
oracle.+(oracle.date,smallint) – Gibt oracle.date zurück
oracle.to_date('2014-07-02 10:08:55','YYYY-MM-DD HH:MI:SS') + 9::smallint -> 2014-07-11 10:08:55
oracle.+(oracle.date,integer) – Gibt oracle.date zurück
oracle.to_date('2014-07-02 10:08:55','YYYY-MM-DD HH:MI:SS') + 9::integer -> 2014-07-11 10:08:55
oracle.+(oracle.date,bigint) – Gibt oracle.date zurück
oracle.to_date('2014-07-02 10:08:55','YYYY-MM-DD HH:MI:SS') + 9::bigint -> 2014-07-11 10:08:55
oracle.+(oracle.date,numeric) – Gibt oracle.date zurück
oracle.to_date('2014-07-02 10:08:55','YYYY-MM-DD HH:MI:SS') + 9::numeric -> 2014-07-11 10:08:55
oracle.-(oracle.date,smallint) – Gibt oracle.date zurück
oracle.to_date('2014-07-02 10:08:55','YYYY-MM-DD HH:MI:SS') - 9::smallint -> 2014-06-23 10:08:55
oracle.-(oracle.date,integer) – Gibt oracle.date zurück
oracle.to_date('2014-07-02 10:08:55','YYYY-MM-DD HH:MI:SS') - 9::integer -> 2014-06-23 10:08:55
oracle.-(oracle.date,bigint) – Gibt oracle.date zurück
oracle.to_date('2014-07-02 10:08:55','YYYY-MM-DD HH:MI:SS') - 9::bigint -> 2014-06-23 10:08:55
oracle.-(oracle.date,numeric) – Gibt oracle.date zurück
oracle.to_date('2014-07-02 10:08:55','YYYY-MM-DD HH:MI:SS') - 9::numeric -> 2014-06-23 10:08:55
oracle.-(oracle.date,oracle.date) – Gibt doppelte Genauigkeit zurück
oracle.to_date('2014-07-17 11:10:15', 'yyyy-mm-dd hh24:mi:ss') - oracle.to_date('2014-02-01 10:00:00', 'yyyy -mm-tt hh24:mi:ss') -> 166.048785
Sie müssen search_path auf oracle,"$user", public, pg_catalog setzen, da Funktionen wie oracle.add_months,oracle.last_day,oracle.next_day,oracle.months_between parallel zu pg_catalog.add_months,pg_catalog.last_day installiert werden. pg_catalog.next_day,pg_catalog.months_between.
PostgreSQL benötigt die Oracle-Tabelle „dual“ nicht, da sie jedoch von Oracle-Benutzern intensiv genutzt wird, wurde sie in orafce hinzugefügt. Diese Tabelle befindet sich im oracle
-Schema. Normalerweise möchten Sie unqualifizierten Zugriff zulassen – daher sollten Sie dieses Schema zur search_path
-Konfiguration hinzufügen (wie search_path = 'oracle, pg_catalog, "$user", public'
in postgresql.conf
).
PostgreSQL sendet Informationen über RAISE NOTICE an den Client. Oracle verwendet dbms_output.put_line(). Dies funktioniert anders als RAISE NOTICE. Oracle hat eine Sitzungswarteschlange, put_line() fügt der Warteschlange eine Zeile hinzu und die Funktion get_line() liest aus der Warteschlange. Wenn das Flag „serveroutput“ gesetzt ist, liest der Client alle SQL-Anweisungen in der Warteschlange. Sie können Folgendes verwenden:
Wählen Sie dbms_output.enable(); Wählen Sie dbms_output.put_line('first_line'); Wählen Sie dbms_output.put_line('next_line'); Wählen Sie * aus dbms_output.get_lines(0);
oder
Wählen Sie dbms_output.enable(); Wählen Sie dbms_output.serveroutput('t'); Wählen Sie dbms_output.put_line('first_line');
Dieses Paket enthält die folgenden Funktionen: enable(), disable(), serveroutput(), put(), put_line(), new_line(), get_line(), get_lines(). Die Paketwarteschlange wird im lokalen Speicher der Sitzung implementiert.
Dieses Paket ermöglicht PL/pgSQL-Programmen das Lesen und Schreiben in alle Dateien, auf die vom Server aus zugegriffen werden kann. Jede Sitzung kann maximal zehn Dateien öffnen und die maximale Zeilengröße beträgt 32 KB. Dieses Paket enthält folgende Funktionen:
utl_file.fclose(file utl_file.file_type) – Datei schließen
utl_file.fclose_all() – alle Dateien schließen
utl_file.fcopy(src_location, src_filename, dest_location, dest_filename[, start_line][, end_line]) – Textdatei kopieren
utl_file.fflush(file utl_file.file_type) – löscht alle Daten aus Puffern
utl_file.fgetattr(location, filename) – Dateiattribute abrufen
utl_file.fopen(Speicherorttext, Dateinamentext, Dateimodustext [, maxlinesize int] [, Codierungsname]) utl_file.file_type – Datei öffnen
utl_file.fremove(Speicherort, Dateiname) – Datei entfernen
utl_file.frename(location, filename, dest_dir, dest_file[, overwrite]) – Datei umbenennen
utl_file.get_line(file utl_file.file_type) Text – liest eine Zeile aus der Datei
utl_file.get_nextline(file utl_file.file_type) Text – liest eine Zeile aus der Datei oder gibt NULL zurück
utl_file.is_open(file utl_file.file_type) bool – gibt true zurück, wenn die Datei geöffnet ist
utl_file.new_line(file utl_file.file_type [,rows int]) – fügt einige neue Zeilenzeichen in die Datei ein
utl_file.put(file utl_file.file_type, buffer text) – fügt Puffer in die Datei ein
utl_file.put_line(file utl_file.file_type, buffer text) – fügt Zeile in Datei ein
utl_file.putf(file utl_file.file_type, format buffer [,arg1 text][,arg2 text][..][,arg5 text]) – formatierten Text in die Datei einfügen
utl_file.tmpdir() – Pfad des temporären Verzeichnisses abrufen
Da PostgreSQL Call-by-Reference nicht unterstützt, unterscheiden sich einige Funktionen geringfügig: fclose und get_line.
deklariere f utl_file.file_type; beginnen f := utl_file.fopen('/tmp', 'sample.txt', 'r'); <<readl>> Schleife beginnen Erhöhen Sie den Hinweis „%“, utl_file.get_line(f); Ausnahme wenn no_data_found dann readl beenden; Ende; Endschleife; f := fclose(f); Ende;
oder zweitens (mit PostgreSQL-spezifischer Funktion get_nextline)
erklären f utl_file.file_type; Zeilentext; beginnen f := utl_file.fopen('/tmp', 'sample.txt', 'r'); Schleife Zeile := utl_file.get_nextline(f); Beenden, wenn die Zeile NULL ist; Erhöhen Sie den Hinweis '%', Zeile; Ausnahme wenn andere dann utl_file.fclose_all(); Ende;
Bevor Sie das Paket verwenden, müssen Sie die Tabelle utl_file.utl_file_dir festlegen. Es enthält alle erlaubten Verzeichnisse ohne Endsymbol ('/' oder ''). Auf der WinNT-Plattform müssen die Pfade jedes Mal mit dem Symbol '' enden.
Verzeichniseinträge können benannt werden (zweite Spalte in Tabelle utl_file.utl_file_dir
). Der location
kann entweder der Verzeichnisname oder der Wörterbuchpfad sein. Der Standort wird zunächst als Verzeichnisname interpretiert und überprüft. Wenn nicht gefunden (in der 2. Spalte), wird der Standort als Pfad interpretiert und überprüft.
Funktionen aus dem utl_file-Paket (Schema auf Postgres) erfordern einen Zugriff auf die Tabelle utl_file.utl_file_dir. Diese Tatsache kann genutzt werden, um zu steuern, welche Benutzer diese Funktionen nutzen können und welche nicht. Die Standardeinstellung ist READ für PUBLIC. INSERT, UPDATE können nur privilegierte Benutzer (Superuser) ausführen. Daher kann ein unprivilegierter Benutzer Funktionen aus diesem Paket verwenden, aber die Liste der sicheren Verzeichnisse (Inhalt der Tabelle utl_file.utl_file_dir) nicht ändern. Der Inhalt dieser Tabelle ist für PUBLIC sichtbar (oder sollte für Benutzer sichtbar sein, die Funktionen aus diesem Paket verwenden).
Dies ist eine Implementierung der Oracle-API des Pakets DBMS_SQL
Es gewährleistet keine vollständige Kompatibilität, sollte aber den für eine erfolgreiche Migration erforderlichen Aufwand verringern.
Achtung: Die PostgreSQL-Architektur unterscheidet sich von der Oracle-Architektur. PL/pgSQL wird im gleichen Kontext wie die SQL-Engine ausgeführt. Dann gibt es keinen Grund, Oracle-Muster wie Massensammlung und Iteration über Sammlung in Postgres zu verwenden, um eine gute Leistung zu erzielen. Dieser Code soll den Aufwand im Zusammenhang mit der Portierung einiger Anwendungen von Oracle nach Postgres reduzieren und kann gut funktionieren. Gegenüber eingebauten PL/pgSQL-Anweisungen ergibt sich jedoch kein Leistungsvorteil. Die Emulation der Oracle-API verursacht Speicher- und CPU-Overhead, der bei größeren Datenmengen erheblich sein kann.
Diese Erweiterung implementiert eine Teilmenge der dbms_sql-Schnittstelle von Oracle. Das Ziel dieser Erweiterung ist nicht die Kompatibilität mit Oracle, sondern die Reduzierung einiger arbeitsbedingter Migrationen von Oracle-Anwendungen auf Postgres. Einige grundlegende Massen-DML-Funktionen werden unterstützt:
mach $$ erklären c int; ein int[]; b varchar[]; ca numeric[]; beginnen c := dbms_sql.open_cursor(); call dbms_sql.parse(c, 'insert into foo Values(:a, :b, :c)'); a := ARRAY[1, 2, 3, 4, 5]; b := ARRAY['Ahoj', 'Nazdar', 'Bazar']; ca := ARRAY[3.14, 2.22, 3.8, 4]; call dbms_sql.bind_array(c, 'a', a, 2, 3); call dbms_sql.bind_array(c, 'b', b, 3, 4); call dbms_sql.bind_array(c, 'c', ca); Erhöhen Sie den Hinweis „Zeilen %d eingefügt“, dbms_sql.execute(c); Ende; $$; mach $$ erklären c int; ein int[]; b varchar[]; ca numeric[]; beginnen c := dbms_sql.open_cursor(); call dbms_sql.parse(c, 'select i, ''Ahoj'' || i, i + 0.003 from generic_series(1, 35) g(i)'); call dbms_sql.define_array(c, 1, a, 10, 1); call dbms_sql.define_array(c, 2, b, 10, 1); call dbms_sql.define_array(c, 3, ca, 10, 1); Führen Sie dbms_sql.execute(c) aus; während dbms_sql.fetch_rows(c) > 0 Schleife call dbms_sql.column_value(c, 1, a); call dbms_sql.column_value(c, 2, b); call dbms_sql.column_value(c, 3, ca); Erhöhen Sie den Hinweis 'a = %', a; Erhöhen Sie den Hinweis 'b = %', b; Hinweis erhöhen 'c = %', ca; Endschleife; call dbms_sql.close_cursor(c); Ende; $$;
Es gibt die Funktion dbms_sql.describe_columns_f
, die der Prozedur dbms_sql.describe_columns
ähnelt. Achtung, die Typ-IDs beziehen sich auf das PostgreSQL-Typsystem. Die Werte werden nicht in Oracle-Zahlen umgewandelt
mach $$ erklären c int; r Rekord; d dbms_sql.desc_rec; beginnen c := dbms_sql.open_cursor(); call dbms_sql.parse(c, 'select * from pg_class'); r := dbms_sql.describe_columns(c); Erhöhen Sie den Hinweis „%“, r.col_cnt; foreach d im Array r.desc_t Schleife Erhöhen Sie den Hinweis „% %“, d.col_name, d.col_type::regtype; Endschleife; call dbms_sql.close_cursor(c); Ende; $$; mach $$ erklären c int; n int; d dbms_sql.desc_rec; da dbms_sql.desc_rec[]; beginnen c := dbms_sql.open_cursor(); call dbms_sql.parse(c, 'select * from pg_class'); call dbms_sql.describe_columns(c, n, da); Hinweis erhöhen '%', n; foreach d im Array da Schleife Erhöhen Sie den Hinweis „% %“, d.col_name, d.col_type::regtype; Endschleife; call dbms_sql.close_cursor(c); Ende; $$;
Dieses Paket ist eine Emulation des Oracle-Pakets dbms_pipe. Es ermöglicht die Kommunikation zwischen Sitzungen. Sie können jede Nachricht mit oder ohne Wartezeit senden und lesen; aktive Pipes auflisten; Legen Sie eine Pipe als privat oder öffentlich fest. und verwenden Sie explizite oder implizite Pipes.
Die maximale Anzahl an Rohren beträgt 50.
Der gemeinsame Speicher wird zum Versenden von Nachrichten verwendet.
Es folgt ein Beispiel:
-- Sitzung A select dbms_pipe.create_pipe('my_pipe',10,true); -- explizite Pipe-Erstellung select dbms_pipe.pack_message('neco je jinak'); select dbms_pipe.pack_message('anything is else'); select dbms_pipe.send_message('my_pipe',20,0); - Limit ändern und ohne Wartezeit senden Wählen Sie * aus dbms_pipe.db_pipes; -- Liste der aktuellen Pipes -- Sitzung B select dbms_pipe.receive_message('my_pipe',1); - Warten Sie maximal 1 Sekunde auf die Nachricht Wählen Sie dbms_pipe.next_item_type(); -- -> 11, Text Wählen Sie dbms_pipe.unpack_message_text(); Wählen Sie dbms_pipe.next_item_type(); -- -> 11, Text Wählen Sie dbms_pipe.unpack_message_text(); Wählen Sie dbms_pipe.next_item_type(); -- -> 0, keine weiteren Elemente Wählen Sie dbms_pipe.remove_pipe('my_pipe');
Es gibt jedoch einige Unterschiede zu Oracle:
Der Grenzwert für Pipes liegt nicht in Bytes, sondern in Elementen in der Pipe
Sie können eine Nachricht senden, ohne zu warten
Sie können leere Nachrichten senden
next_item_type kennt TIMESTAMP (Typ 13)
PostgreSQL kennt den RAW-Typ nicht, verwenden Sie stattdessen bytea
Ein weiteres Mittel zur Kommunikation zwischen Prozessen.
-- Sitzung A Wählen Sie dbms_alert.register('boo'); Wählen Sie * aus dbms_alert.waitany(10); -- Sitzung B Wählen Sie dbms_alert.register('boo'); Wählen Sie * aus dbms_alert.waitany(10); -- Sitzung C select dbms_alert.signal('boo','Schöner Tag');
Dieses Modul enthält einige Funktionen zum Arbeiten mit Werktagen aus dem Paket PLVdate. Eine ausführliche Dokumentation finden Sie in der PLVision-Bibliothek. Dieses Paket ist multikulturell, die Standardkonfigurationen gelten jedoch nur für europäische Länder (siehe Quellcode).
Sie sollten Ihre eigenen arbeitsfreien Tage (max. 50 Tage) und eigene Feiertage (max. 30 Tage) definieren. Ein Feiertag ist jeder arbeitsfreie Tag, der jedes Jahr gleich ist. Zum Beispiel der Weihnachtstag in westlichen Ländern.
plvdate.add_bizdays(day date, days int) date – Ruft das Datum ab, das durch Hinzufügen von <n> Werktagen zu einem Datum erstellt wurde
plvdate.nearest_bizday(day date) date – Ruft das Geschäftsdatum ab, das einem bestimmten Datum am nächsten liegt, benutzerdefiniert
plvdate.next_bizday(day date) Datum – Rufen Sie das nächste Geschäftsdatum ab einem bestimmten Datum ab, benutzerdefiniert
plvdate.bizdays_between(day1 date, day2 date) int – Ermittelt die Anzahl der Werktage zwischen zwei Daten
plvdate.prev_bizday(day date) date – Ruft das vorherige Geschäftsdatum eines bestimmten Datums ab
plvdate_isbizday(date) bool – Rufen Sie diese Funktion auf, um zu bestimmen, ob ein Datum ein Werktag ist
plvdate.set_nonbizday(dow varchar) – Wochentag als arbeitsfreien Tag festlegen
plvdate.unset_nonbizday(dow varchar) – Wochentag als arbeitsfreien Tag zurücksetzen
plvdate.set_nonbizday(day date) – Tag als arbeitsfreien Tag festlegen
plvdate.unset_nonbizday(Tagesdatum) – Tag als arbeitsfreien Tag zurückgesetzt
plvdate.set_nonbizday(day date, repeat bool) – Tag als Nichtgeschäftstag festlegen. Wenn „repeat“ wahr ist, ist der Tag jedes Jahr Nichtgeschäftstag
plvdate.unset_nonbizday(day date, repeat bool) – Tag als Nichtgeschäftstag zurücksetzen. Wenn „repeat“ wahr ist, ist der Tag jedes Jahr kein Geschäftstag
plvdate.use_easter() – Ostersonntag und Ostermontag werden Feiertage sein
plvdate.unuse_easter();
plvdate.use_easter(useit boolean);
plvdate.using_easter() bool – Wenn wir Ostern verwenden, wird true zurückgegeben
plvdate.use_great_friday() – Ostern Der Große Freitag wird ein Feiertag sein
plvdate.unuse_easter();
plvdate.use_easter(useit boolean);
plvdate.using_easter() bool – Wenn wir Ostern, den Großen Freitag, als Feiertag verwenden, wird „true“ zurückgegeben
plvdate.include_start() – Startdatum in die bizdays_between-Berechnung einbeziehen
plvdate.noinclude_start();
plvdate.include_start(include boolean);
plvdate.inklusive_start() bool;
plvdate.default_holidays(varchar) – Standardkonfigurationen laden. Sie können derzeit die folgenden Konfigurationen verwenden: Tschechisch, Deutsch, Österreich, Polen, Slowakei, Russland, GB und USA.
Die Konfiguration enthält nur gemeinsame Feiertage für alle Regionen. Mit plvdate.set_nonbizday(nonbizday, true) können Sie Ihren eigenen regionalen Feiertag hinzufügen.
Beispiel:
postgres=# select plvdate.default_holidays('czech'); default_holidays ----------------- (1 Reihe) postgres=# select to_char(current_date, 'day'), plvdate.next_bizday(aktuelles_Datum), to_char(plvdate.next_bizday(current_date),'day'); to_char | next_bizday | to_char ----------+-------------+----------- Samstag | 13.03.2006 | Montag (1 Reihe)
Änderung für außereuropäische Umgebung:
select plvdate.unset_nonbizday('saturday'); select plvdate.unset_nonbizday('sunday'); select plvdate.set_nonbizday('friday'); select plvdate.set_nonbizday('2006-05-19', true); select plvdate.unuse_easter();
Dieses Paket enthält einige nützliche String- und Zeichenfunktionen. Jede Funktion unterstützt positive und negative Offsets – also den Offset vom Ende der Zeichenfolge. Zum Beispiel:
plvstr.left('abcdef',2) -> ab plvstr.left('abcdef',-2) -> abcd plvstr.substr('abcdef',1,1) -> a plvstr.substr('abcdef',-1,1) -> f plvstr.substr('abcde',-2,1) -> d
Liste der Funktionen:
plvstr.normalize(str text) – Zeichenfolge normalisieren – Weiße Zeichen durch Leerzeichen ersetzen, Leerzeichen durch Leerzeichen ersetzen
plvstr.is_prefix(str text, prefix text, cs bool) – Gibt true zurück, wenn prefix das Präfix von str ist
plvstr.is_prefix(str text, prefix text) – Gibt true zurück, wenn prefix das Präfix von str ist
plvstr.is_prefix(str int, prefix int) – Gibt true zurück, wenn prefix das Präfix von str ist
plvstr.is_prefix(str bigint, prefix bigint) – Gibt true zurück, wenn prefix das Präfix von str ist
plvstr.substr(str text, start int, len int) – Gibt die am start_in begonnene Teilzeichenfolge bis zum Ende zurück
plvstr.substr(str text, start int) – Gibt die am start_in begonnene Teilzeichenfolge bis zum Ende zurück
plvstr.instr(str text, patt text, start int, nth int) – Suchmuster im String
plvstr.instr(str text, patt text, start int) – Suchmuster im String
plvstr.instr(str text, patt text) – Suchmuster im String
plvstr.lpart(str text, div text, start int, nth int, all_if_notfound bool) – Rufen Sie diese Funktion auf, um den linken Teil einer Zeichenfolge zurückzugeben
plvstr.lpart(str text, div text, start int, nth int) – Rufen Sie diese Funktion auf, um den linken Teil einer Zeichenfolge zurückzugeben
plvstr.lpart(str text, div text, start int) – Rufen Sie diese Funktion auf, um den linken Teil einer Zeichenfolge zurückzugeben
plvstr.lpart(str text, div text) – Rufen Sie diese Funktion auf, um den linken Teil einer Zeichenfolge zurückzugeben
plvstr.rpart(str text, div text, start int, nth int, all_if_notfound bool) – Rufen Sie diese Funktion auf, um den rechten Teil einer Zeichenfolge zurückzugeben
plvstr.rpart(str text, div text, start int, nth int) – Rufen Sie diese Funktion auf, um den rechten Teil einer Zeichenfolge zurückzugeben
plvstr.rpart(str text, div text, start int) – Rufen Sie diese Funktion auf, um den rechten Teil einer Zeichenfolge zurückzugeben
plvstr.rpart(str text, div text) – Rufen Sie diese Funktion auf, um den rechten Teil einer Zeichenfolge zurückzugeben
plvstr.lstrip(str text, substr text, num int) – Rufen Sie diese Funktion auf, um Zeichen vom Anfang zu entfernen
plvstr.lstrip(str text, substr text) – Rufen Sie diese Funktion auf, um Zeichen vom Anfang zu entfernen
plvstr.rstrip(str text, substr text, num int) – Rufen Sie diese Funktion auf, um Zeichen vom Ende zu entfernen
plvstr.rstrip(str text, substr text) – Rufen Sie diese Funktion auf, um Zeichen vom Ende zu entfernen
plvstr.rvrs(str text, start int, _end int) – String oder Teil eines Strings umkehren
plvstr.rvrs(str text, start int) – String oder Teil eines Strings umkehren
plvstr.rvrs(str text) – String oder Teil eines Strings umkehren
plvstr.left(str text, n int) – Gibt die ersten num_in Zeichen zurück. Sie können negative num_in verwenden
plvstr.right(str text, n int) – Gibt die letzten num_in Zeichen zurück. Sie können negative num_ni verwenden
plvstr.swap(str text, replace text, start int, length int) – Ersetzen Sie einen Teilstring in einem String durch einen angegebenen String
plvstr.swap(str text, replace text) – Ersetzen Sie einen Teilstring in einem String durch einen angegebenen String
plvstr.betwn(str text, start int, _end int, inclusive bool) – Finden Sie die Teilzeichenfolge zwischen Start- und Endpositionen
plvstr.betwn(str text, start text, _end text, startnth int, endnth int, inclusive bool, gotoend bool) – Finden Sie die Teilzeichenfolge zwischen Start- und Endpositionen
plvstr.betwn(str text, start text, _end text) – Finden Sie die Teilzeichenfolge zwischen Start- und Endpositionen
plvstr.betwn(str text, start text, _end text, startnth int, endnth int) – Finden Sie die Teilzeichenfolge zwischen Start- und Endpositionen
plvchr.nth(str text, n int) – Rufen Sie diese Funktion auf, um das N-te Zeichen in einer Zeichenfolge zurückzugeben
plvchr.first(str text) – Rufen Sie diese Funktion auf, um das erste Zeichen in einer Zeichenfolge zurückzugeben
plvchr.last(str text) – Rufen Sie diese Funktion auf, um das letzte Zeichen in einer Zeichenfolge zurückzugeben
plvchr.is_blank(c int) – Ist leer
plvchr.is_blank(c text) – Ist leer
plvchr.is_digit(c int) – Ist eine Ziffer
plvchr.is_digit(c text) – Ist eine Ziffer
plvchr.is_quote(c int) – Ist ein Zitat
plvchr.is_quote(c text) – Ist ein Zitat
plvchr.is_other(c int) – Ist anders
plvchr.is_other(c text) – Ist anders
plvchr.is_letter(c int) – Ist ein Buchstabe
plvchr.is_letter(c text) – Ist ein Buchstabe
plvchr.char_name(c text) – Gibt den Namen des Zeichens als VARCHAR im ASCII-Code zurück.
plvchr.quoted1(str text) – Zitierter Text zwischen '''
plvchr.quoted2(str text) – Zitierter Text zwischen „““
plvchr.stripped(str text, char_in text) – Entfernt eine Zeichenfolge aller Instanzen der angegebenen Zeichen
Das PLVsubst-Paket führt Zeichenfolgenersetzungen basierend auf einem Ersetzungsschlüsselwort durch.
plvsubst.string(template_in text, vals_in text[]) – Durchsucht eine Zeichenfolge nach allen Instanzen des Substitutionsschlüsselworts und ersetzt es durch den nächsten Wert in der Liste der Substitutionswerte
plvsubst.string(template_in text, vals_in text[], subst_in text)
plvsubst.string(template_in text, vals_in text, delim_in text)
plvsubst.string(template_in text, vals_in text, delim_in text, subst_in text)
plvsubst.setsubst(str text) – Ersetzungsschlüsselwort auf Standard „%s“ setzen
plvsubst.subst() – Ersetzungsschlüsselwort abrufen
Beispiele:
select plvsubst.string('Mein Name ist %s %s.', ARRAY['Pavel','Stěhule']); Zeichenfolge -------------------------- Mein Name ist Pavel Stěhule. (1 Reihe) select plvsubst.string('Mein Name ist %s %s.', 'Pavel,Stěhule'); Zeichenfolge -------------------------- Mein Name ist Pavel Stěhule. (1 Reihe) select plvsubst.string('Mein Name ist $$ $$.', 'Pavel|Stěhule','|','$$'); Zeichenfolge -------------------------- Mein Name ist Pavel Stěhule. (1 Reihe)
dms_utility.format_call_stack() – gibt eine formatierte Zeichenfolge mit dem Inhalt des Aufrufstapels zurück
postgres=# select foo2(); foo2 --------------------------------- ----- Aufrufstapel ----- Linienobjekt Name der Nummernanweisung 1 Rückgabefunktion foo 1 Rückgabefunktion foo1 1 Rückgabefunktion foo2 (1 Reihe)
Dieses Paket ist nicht mit dem Original-PLVlex kompatibel.
postgres=# select * from plvlex.tokens('select * from abc join d ON x=y', true, true); pos | Token | Code | Klasse | Trennzeichen | Mod ----+--------+------+---------+-----------+------ 0 | wählen | 527 | SCHLÜSSELWORT | | 7 | * | 42 | ANDERE | | selbst 9 | von | 377 | SCHLÜSSELWORT | | 25 | abc | | IDENT | | 20 | beitreten | 418 | SCHLÜSSELWORT | | 25 | d | | IDENT | | 27 | auf | 473 | SCHLÜSSELWORT | | 30 | x | | IDENT | | 31 | = | 61 | ANDERE | | selbst 32 | y | | IDENT | | (10 Reihen)
Warnung: Die Schlüsselwortcodes können zwischen den PostgreSQL-Versionen geändert werden! o plvlex.tokens(str text, Skip_Spaces Bool, Qualified_Names Bool) – Gibt eine Tabelle mit lexikalischen Elementen in str zurück.
Dieses Paket schützt Benutzereingaben vor SQL-Injection.
dbms_assert.enquote_literal(varchar) varchar – Fügen Sie führende und nachgestellte Anführungszeichen hinzu und stellen Sie sicher, dass alle einfachen Anführungszeichen mit benachbarten einfachen Anführungszeichen gepaart sind.
dbms_assert.enquote_name(varchar [, boolean]) varchar – Name in doppelte Anführungszeichen setzen. Der optionale zweite Parameter gewährleistet die Verkleinerung des Namens. Achtung – Bei Oracle ist der zweite Parameter groß zu schreiben!
dbms_assert.noop(varchar) varchar – Gibt einen Wert ohne Prüfung zurück.
dbms_assert.qualified_sql_name(varchar) varchar – Diese Funktion überprüft, ob die Eingabezeichenfolge ein qualifizierter SQL-Name ist.
dbms_assert.schema_name(varchar) varchar – Funktion überprüft, ob die Eingabezeichenfolge ein vorhandener Schemaname ist.
dbms_assert.simple_sql_name(varchar) varchar – Diese Funktion überprüft, ob die Eingabezeichenfolge ein einfacher SQL-Name ist.
dbms_assert.object_name(varchar) varchar – Überprüft, ob die Eingabezeichenfolge ein qualifizierter SQL-Bezeichner eines vorhandenen SQL-Objekts ist.
Diese Einheit enthält einige Assert-Funktionen.
plunit.assert_true(bool [, varchar]) – Bestätigt, dass die Bedingung wahr ist.
plunit.assert_false(bool [, varchar]) – Bestätigt, dass die Bedingung falsch ist.
plunit.assert_null(anyelement [, varchar]) – Bestätigt, dass der tatsächliche Wert null ist.
plunit.assert_not_null(anyelement [, varchar]) – Bestätigt, dass der tatsächliche Wert nicht null ist.
plunit.assert_equals(anyelement, anyelement [, double precision] [, varchar]) – Behauptet, dass erwartet und tatsächlich gleich sind.
plunit.assert_not_equals(anyelement, anyelement [, double precision] [, varchar]) – Behauptet, dass erwartet und tatsächlich gleich sind.
plunit.fail([varchar]) – Fail kann verwendet werden, um einen Testvorgang mithilfe der bereitgestellten Nachricht sofort zum Scheitern zu bringen.
dbms_random.initialize(int) – Paket mit einem Startwert initialisieren.
dbms_random.normal() – Gibt Zufallszahlen in einer Standardnormalverteilung zurück.
dbms_random.random() – Gibt eine Zufallszahl von -2^31 .. 2^31 zurück.
dbms_random.seed(int)
dbms_random.seed(text) – Seed-Wert zurücksetzen.
dbms_random.string(opt text(1), len int) – Zufallszeichenfolge erstellen
dbms_random.terminate() – Paket beenden (nichts in Pg tun)
dbms_random.value() – Gibt eine Zufallszahl von [0,0 – 1,0) zurück.
dbms_random.value(niedrige doppelte Genauigkeit, hohe doppelte Genauigkeit) – Gibt eine Zufallszahl von [niedrig – hoch) zurück.
Dieses Modul enthält die Implementierung der Funktionen: concat, nvl, nvl2, lnnvl, decode, most, least, bitand, nanvl, sinh, cosh, tanh, oracle.substr und oracle.mod.
oracle.substr(str text, start int, len int) – Oracle-kompatibler Teilstring
oracle.substr(str text, start int) – Oracle-kompatibler Teilstring
oracle.substr(str numeric, start numeric) – Oracle-kompatibler Teilstring
oracle.substr(str numeric, start numeric, len numeric) – Oracle-kompatibler Teilstring
oracle.substr(str varchar, start numeric) – Oracle-kompatibler Teilstring
oracle.substr(str varchar, start numeric,len numeric) – Oracle-kompatibler Teilstring
oracle.lpad(string, length [, fill]) – Oracle-kompatibles lpad
oracle.rpad(string, length [, fill]) – Oracle-kompatibles Rpad
oracle.ltrim(string text [, Zeichen text]) – Oracle-kompatibles ltrim
oracle.rtrim(string text [, Zeichen text]) – Oracle-kompatibles rtrim
oracle.btrim(string text [, Zeichen text]) – Oracle-kompatibles btrim
oracle.length(string char) – Oracle-kompatible Länge
oracle.listagg(str text [, Separator Text]) – Aggregiert die aufzulistenden Werte
oracle.wm_concat(str text) – Aggregiert Werte zu einer durch Kommas getrennten Liste
oracle.median(float4) – berechnet einen Median
oracle.median(float8) – berechnet einen Median
oracle.to_number(text) – konvertiert eine Zeichenfolge in eine Zahl
oracle.to_number(numeric) – konvertiert eine Zeichenfolge in eine Zahl
oracle.to_number(numeric,numeric) – konvertiert eine Zeichenfolge in eine Zahl
public.to_multi_byte(text) – Konvertiert alle Einzelbyte-Zeichen in die entsprechenden Multibyte-Zeichen
public.to_single_byte(text) – Konvertiert alle Multibyte-Zeichen in die entsprechenden Einzelbyte-Zeichen
oracle.greatest(anyelement, anyelement[]) – Oracle-Kompatibilität am höchsten, NULL bei NULL-Eingabe zurückgeben
oracle.least(anyelement, anyelement[]) – Oracle-Kompatibilität am wenigsten, NULL bei NULL-Eingabe zurückgeben
oracle.mod(int, int) – Oracle-Kompatibilitätsmod. Wenn der zweite Parameter Null ist, wird der erste Parameter zurückgegeben
Oracle.Remainer (int, int) - Gibt den Rest der Zahl zurück, geteilt durch eine andere Zahl
Oracle.Remainer (numerisch, numerisch) - Gibt den Rest der Zahl zurück, geteilt durch eine andere Zahl
Oracle.sys_guid () - Gibt Bytea zurück - 16 Bytes der globalen UNIQ -ID
Möglicherweise müssen Sie Search_path auf 'Oracle, pg_catalog, "$ user", public' festlegen -By-Seite mit pg_catalog.substr, pg_catalog.lpad, pg_catalog.rpad, pg_catalog.ltrim, pg_catalog.rtrim, pg_catalog.btrim, pg_catalog.length.
Funktionen Oracle.Decode, Oracle.Greatest und Oracle.least müssen immer vom Schema -Namen vorangestellt werden, selbst wenn sich das Oracle vor PG_CATALOG im Search_Path befindet, da diese Funktionen in Postgresql Parser und Analysator implementiert sind. Ohne das Schema -Namen werden die internen Funktionen immer verwendet.
Beachten Sie, dass bei LPAD und RPAD die Parameter-Zeichenfolge und Füllung von Typen, Varchar, Text, Varchar2 oder Nvarchar2 sein können (Beachten Sie, dass die letzten beiden orafce-bereitgestellten Typen sind). Der Standard-Füllfigur ist ein halber Breite. Ähnlich für LTRIM, RTRIM und BTRIM.
Beachten Sie, dass Oracle.length eine Einschränkung hat, dass es nur in Zeicheneinheiten funktioniert, da PostgreSQL -Zeichen nur die Zeichensemantik unterstützt.
Das Oracle.substr mit drei Argumenten kann ein anderes Ergebnis (Null oder leere Zeichenfolge) in der Abhängigkeit zurückgeben, um orafce.use_substring_zero_width_in_substr Variable (Oracle, Warning_oracle, ORAFCE, WARNUNG_ORAFCE) festzulegen. Dieses andere Ergebnis wird nur zurückgegeben, wenn das dritte Argument (substring_length) Null ist. Standard ist Warnung_oracle, das bedeutet, Warnung zu erhöhen und Null zurückzugeben.
Diese Funktion gibt globale eindeutige ID zurück. Es werden angegebene Funktionen aus der Erweiterung "uUid-ossp" aufgerufen, und dann sollte diese Funktion installiert werden, bevor Funktionssys_Guid verwendet wird. Standardmäßig verwendet diese Funktion die Funktion uUid_generate_v1, aber die Funktion uUid_generate_v1mc, uUid_generate_v4 kann auch verwendet werden (durch Einstellen von orafce.sys_guid_source). Oracle.sys_guid kann auch Builin Gen_Random_Uuid Func verwenden. In diesem Fall ist die Erweiterung "uUid-oSSP" nicht erforderlich.
VARCHAR2 von ORAFCE implementiert Teile der Oracle -Datenbankspezifikation zu Varchar2:
Einheit des Typs modifikier = 'Bytes' (für die Zeichensemantik siehe Nvarchar2)
Im Gegensatz zu postgresql varchar wird der implizite Guss in Varchar2 keine weißen Räume über die deklarierte maximale Länge abgeschnitten
Für diese Typen ist NULL SAFE || möglich Operator, wenn Sie orafce.varchar2_null_safe_concat zu true aktivieren. Das Verhalten ist Oracle sehr ähnlich.
Achtung: - Wenn das Ergebnis eine leere Zeichenfolge ist, ist das Ergebnis NULL. Dieses Verhalten ist standardmäßig deaktiviert.
Achtung: - Es gibt eine mögliche Inkompatibilität zwischen 3,7 und älteren ORAFCE Veröffentlichungen. Eine Operatorfunktion ist jetzt als stabil gekennzeichnet (war vorher unveränderlich). Es ist nicht möglich, funktionale Indizes über stabile oder flüchtige Ausdrücke zu erstellen.
- Null Safe Concat (standardmäßig deaktiviert) Wählen Sie NULL || 'Hallo' :: varchar2 || Null; Setze orafce.varchar2_null_safe_concat auf true; Wählen Sie NULL || 'Hallo' :: varchar2 || Null;
Bitte beachten Sie, dass PostgreSQL nicht erlaubt, dynamisch anzugeben, wie wir Varchar -Zeichenfolgen interpretieren. Es interpretiert sie immer als "Charakter" -Abschnitte, wie durch Datenbankcodierung bestimmt. Daher können wir sowohl Byte- als auch Zeichensemantik für einen bestimmten VARCHAR -Typ in derselben Datenbank nicht unterstützen. Wir haben uns entschieden, die Byte -Semantik zu implementieren, da dies in Oracle standardmäßig ist. Für die Charaktersemantik siehe Nvarchar2, die standardmäßig die Charaktersemantik immer implementiert.
Bitte seien Sie vorsichtig, wenn Sie den oben genannten Typ verwenden, um Zeichenfolgen zu speichern, die aus multibyten -codierten Zeichen bestehen, bei denen jedes Zeichen aus einer willkürlichen Anzahl von Bytes besteht.
Nvarchar2 implementiert Folgendes:
Einheit des Typs modifikier = 'Zeichen' (Verwenden der Zeichensatz/Codierung der Datenbank)
Verwenden Sie diesen Typ, wenn die Zeichensemantik bevorzugt wird.
Bitte beachten Sie, dass der Varchar2 und NvarCHAR2 von Oracle im Gegensatz zu Oracle die 4000 -Bytes -Grenze für die "deklarierte" Größe nicht auferlegen. Tatsächlich ist es das gleiche wie das von PostgreSQL Varchar, was etwa 10 MB beträgt (obwohl Varchar theoretisch Werte der Größe bis zu 1 GB speichern kann)
Einige Byte-basierte Zeichenfolgefunktionen, die mit VARCHAR2-Zeichenfolgen verwendet werden sollen
substrb (varchar2, int [, int]) - Extrahieren Sie eine Substring der angegebenen Länge (in Bytes), die an einer gegebenen Byteposition beginnt (Zählen von einem); Wenn das dritte Argument nicht angegeben ist, wird die Länge bis zum Ende der Zeichenfolge berücksichtigt
StrposB (varchar2, varchar2) - Gibt die Position des angegebenen Substrings in einer bestimmten Zeichenfolge zurück (Zählen von einem))
Länge (varchar2) - Gibt die Länge (in Bytes) einer bestimmten Zeichenfolge zurück
Oracle macht keine Unterschiede zwischen Null und leerem String (wenn ein Wert als Text verwendet wird). Für Postgres Null und leere Zeichenfolge sind verschiedene Werte. Der Einfachheit halber ist gut, sicherzustellen (in der Postgres -Datenbank) nur Nulls (und verwenden Sie keine leeren Zeichenfolgen) oder nur leere Zeichenfolgen (und verwenden Sie keine Nulls) für Texttypspalten. Beide Varianten haben einige Vor- und Nachteile.
Dies kann mit Triggerfunktionen eingefügt werden:
Oracle.Replace_Empty_strings (['on' | 'true' | 'Warnung' | 'Fehler']) Oracle.Replace_Null_strings (['on' | 'true' | 'Warnung' | 'Fehler'])
Optionales String -Argument wird als Indikator verwendet, daher sollten diese Funktionen die Warnung (möglicherweise Fehler) erhöhen, wenn die Zeile in diesen Funktionen geändert wurde.
Tabellentest erstellen (ID -Serienname, Name Varchar, Nachname varchar); Erstellen Sie Trigger test_trg Vor dem Einfügen oder Update Auf Test Für jede Reihe Execute -Prozedur Oracle.replace_Empty_strings (); In Test (Name, Nachname) Werte ('', 'Stehule') einfügen; - Name wird durch NULL ersetzt
Oracle.user_tab_columns
Oracle.user_tables
Oracle.user_cons_columns
Oracle.User_Constraints
Oracle.Product_Componenent_version
Oracle.User_Objects
Oracle.dba_segmente
Bessere Dokumentation
Bessere Seralisierung in dbms_pipe (über _Send und _RECV -Funktionen)
Änderung der gemeinsam genutzten Speicherstrukturen durch temporäre Tabellen: Nur Sperren befinden sich in SHMEM (Bitmaps), Daten in TMP TBL
Dieses Modul wird unter BSD -Lizenz veröffentlicht.
Das Projekt wurde 2008 von Pavel Stehule <[email protected]> gegründet.
Andere Mitwirkende:
Gabriele Bartolini (Gbartolini)
Jeffrey Cohen (Jcohen)
Giles Darold (Darold)
Pavan Deolasee (Pavanvd)
Peter Eisentraut (Petere)
Beea Emerson (B-Emerson)
Takahiro Itagaki (itagaki)
Zdenek Kotala (HLIPA)
Amit Langote (Amitlan)
Heikki Linnakangas (Hlinnaka)
Fujii Masao
Marco Nenciarini (Mnencia)
Vinayak Pokale
Gavin Sherry (SWM)
Pavel Stehule (OKBOB)
Rahila Syed (Rahila)