الوظائف وعوامل التشغيل التي تحاكي مجموعة فرعية من الوظائف والحزم من Oracle RDBMS.
توجد مجموعة Google مرتبطة - https://groups.google.com/forum/?hl=en#!forum/orafce-general
يتم دعم Orafce في AWS Aurora مع توافق PostgreSQL وأيضًا في قاعدة بيانات Azure لـ PostgreSQL.
تحتوي هذه الوحدة على بعض الوظائف المفيدة التي يمكن أن تساعد في نقل تطبيق Oracle إلى PostgreSQL أو التي يمكن أن تكون مفيدة بشكل عام.
تم اختبار وظائف تاريخ Oracle المضمنة مقابل Oracle 10 للتأكد من توافقها. نطاقات التاريخ من 1960 إلى 2070 تعمل بشكل صحيح. لا يمكن التحقق من التواريخ قبل 05-10-1582 بالتنسيق 'J' وقبل 01-03-1100 بالتنسيقات الأخرى بسبب خطأ في Oracle.
جميع الوظائف متوافقة تمامًا مع Oracle وتحترم جميع سلاسل التنسيق المعروفة. يمكن العثور على الأوصاف التفصيلية على الإنترنت. استخدم كلمات رئيسية مثل: oracle round trunc date iyyy.
Y،YY،YYY،YYYY،SYYY،سنة سنة أنا، IY، IYY، IYYY iso سنة س، ربع أسبوع WW، اليوم هو أول يوم في السنة أسبوع IW، يبدأ يوم الاثنين الأسبوع W، اليوم هو اليوم الأول من الشهر DAY،DY،D أول يوم من الأسبوع، الأحد شهر، شهر، شهر، شهر RM CC، SCC القرن يوم DDD، DD، J سمو،HH12،HH24 ساعة دقيقة مي
وظائف تقريب. أي أنه سيتم تقريب تاريخ الأول من يوليو إلى العام التالي. سيتم تقريب يوم 16 يوليو إلى أغسطس.
add_months(date, integer) date - تاريخ الإرجاع بالإضافة إلى n شهرًا
add_months(تاريخ '2005-05-31'،1) -> 2005-06-30
last_date(date) date - يُرجع اليوم الأخير من الشهر بناءً على قيمة تاريخ
last_day(التاريخ "24/05/2005") -> 31/05/2005
next_day(date, text) date - يُرجع أول يوم من أيام الأسبوع أكبر من قيمة تاريخ
next_day (التاريخ "24/05/2005"، "الاثنين") -> 30/05/2005
next_day(date, integer) date - نفس ما ورد أعلاه. يجب أن تكون الوسيطة الثانية 1..7 ويتم تفسيرها على أنها Sunday..Satday.
next_day (التاريخ "24/05/2005"، 1) -> 30/05/2005
Months_between(date, date) رقمي - يُرجع عدد الأشهر بين التاريخ 1 والتاريخ 2. إذا تم حساب شهر كسري، فإن الدالة Months_between تحسب الكسر بناءً على شهر مكون من 31 يومًا.
أشهر_بين (التاريخ "02/02/1995"، التاريخ "01/01/1995") -> 1.0322580645161
trunc(date, text) date - اقتطاع التاريخ وفقًا للتنسيق المحدد
trunc(تاريخ "12-07-2005"، "iw") -> 11-07-2005
round(date, text) date - سيتم تقريب التواريخ وفقًا للتنسيق المحدد
جولة (التاريخ "12/07/2005"، "السنة") -> 01/01/2006
to_date(text) الطابع الزمني - سيتم كتابة نص الإدخال إلى الطابع الزمني. يتم استخدام GUC orafce.nls_date_format لتحديد تنسيق نص الإدخال لهذه الوظيفة. إذا تم ترك القيمة فارغة أو تم تعيينها كقيمة افتراضية، فقم بإدخال تنسيق النص وفقًا لإعداد GUC لنمط التاريخ الخاص بـ PostgreSQL.
orafce.nls_date_format القيمة إلى DEFAULT
to_date('2014-05-19 17:23:53+5:30') -> 2014-05-19 17:23:53
orafce.nls_date_format='YYYY-MMDD HH24:MI:SS'
to_date('2014-0519 17:23:53+5:30') -> 2014-05-19 17:23:53
to_date(text, text) الطابع الزمني - سيقوم بطباعة نص الإدخال بالتنسيق المحدد إلى الطابع الزمني. يتم استخدام GUC orafce.orafce_emit_error_on_date_bug
لتحديد ما إذا كان سيتم الإبلاغ عن خطأ عندما تصل قيمة التاريخ إلى خطأ Oracle في التواريخ. يظهر هذا الخطأ بتواريخ قبل 1582-10-05
عند استخدام التنسيق 'J'
( 'J2299159'
) وقبل 1100-03-01
مع التنسيقات الأخرى. يتم الإبلاغ عن خطأ افتراضيًا، لتعطيل هذا السلوك، set orafce.orafce_emit_error_on_date_bug to off
.
حدد oracle.to_date('112012', 'J'); خطأ: لا يمكن التحقق من التواريخ قبل 05-10-1582 ('J2299159') بسبب خطأ في Oracle. SELECT oracle.to_date('1003-03-15', 'yyyy-mm-dd'); خطأ: لا يمكن التحقق من التواريخ قبل 01-03-1100 بسبب خطأ في Oracle. قم بضبط orafce.Oracle_compatibility_date_limit على إيقاف التشغيل؛ حدد oracle.to_date('112012', 'J'); to_date ------------------------ 4407-07-30 00:00:00 ق.م (صف واحد) حدد oracle.to_date('1003/03/15', 'yyyy/mm/dd'); to_date --------------------- 1003-03-15 00:00:00 (صف واحد)
تحتوي هذه الوحدة على تنفيذ نوع بيانات DATE المتوافق مع Oracle "Oracle.date" والوظائف التي تستخدم نوع بيانات DATE مثل oracle.add_months،Oracle.last_day()،Oracle.next_day()،Oracle.months_between() وما إلى ذلك.
مثال:
قم بتعيين مسار البحث إلى أوراكل، "$user"، public، pg_catalog؛ إنشاء جدول oracle_date(col1 date); أدخل في قيم oracle_date('2014-06-24 12:12:11'::date); حدد * من oracle_date؛ العقيد 1 --------------------- 2014-06-24 12:12:11 (صف واحد)
oracle.add_months (الطابع الزمني مع المنطقة الزمنية، عدد صحيح) - إرجاع التاريخ والوقت بالإضافة إلى n من الأشهر
oracle.add_months(oracle.date'2005-05-31 10:12:12',1) -> 2005-06-30 10:12:12
oracle.last_day(الطابع الزمني مع المنطقة الزمنية) - إرجاع اليوم الأخير من الشهر بناءً على قيمة التاريخ
oracle.last_day(Oracle.date '2005-05-24 11:12:12') -> 2005-05-31 11:12:12
oracle.next_day(الطابع الزمني مع المنطقة الزمنية، النص) - إرجاع أول يوم من أيام الأسبوع أكبر من قيمة التاريخ
oracle.next_day(Oracle.date '2005-05-24 10:12:12'، 'الاثنين') -> 2005-05-30 10:12:12
oracle.next_day(الطابع الزمني مع المنطقة الزمنية، عدد صحيح) - كما هو مذكور أعلاه. يجب أن تكون الوسيطة الثانية 1..7 ويتم تفسيرها على أنها الأحد..السبت.
oracle.next_day(Oracle.date '2005-05-24 11:21:12', 1) -> 2005-05-29 11:21:12
oracle.months_between (الطابع الزمني مع المنطقة الزمنية، الطابع الزمني مع المنطقة الزمنية) - إرجاع عدد الأشهر بين الطابع الزمني 1 والطابع الزمني 2. إذا تم حساب شهر كسري، فإن الدالة Months_between تحسب الكسر بناءً على شهر مكون من 31 يومًا.
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) - يُرجع الطابع الزمني بدون منطقة زمنية.
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) - يُرجع oracle.date
oracle.to_date('02/16/09 04:12:12') -> 2009-02-16 04:12:12
oracle.sysdate() - يُرجع الطابع الزمني للبيان في المنطقة الزمنية للخادم (orafce.timezone)
Oracle.sysdate() -> 2015-12-09 17:47:56
oracle.dbtimezone - إرجاع المنطقة الزمنية للخادم - تمت محاكاتها عبر orafce.timezone
أوراكل.dbtimezone() -> بتوقيت جرينتش
oracle.sessiontimezone() - إرجاع المنطقة الزمنية للجلسة - المنطقة الزمنية الحالية لـ PostgreSQL
oracle.sessiontimezone() -> أوروبا/براغ
oracle.sys_extract_utc(الطابع الزمني مع المنطقة الزمنية) - إرجاع الطابع الزمني في المنطقة الزمنية بالتوقيت العالمي
oracle.sys_extract_utc(current_timestamp)
oracle.sys_extract_utc(oracle.date) - يُرجع الطابع الزمني بالمنطقة الزمنية بالتوقيت العالمي المنسق، عندما لا يتم تحديد المنطقة الزمنية، يتم استخدام المنطقة الزمنية للجلسة (PostgreSQL الحالية)
oracle.sys_extract_utc(Oracle.date '2005-05-24 11:21:12', 1) -> 2005-05-24 09:21:12
oracle.to_char(timestamp) - يُرجع الطابع الزمني بتنسيق nls_date_format.
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) - إرجاع oracle.date
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) - يُرجع oracle.date
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) - يقوم بإرجاع oracle.date
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) - يُرجع oracle.date
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) - إرجاع oracle.date
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) - إرجاع oracle.date
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) - إرجاع oracle.date
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) - يُرجع oracle.date
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) - إرجاع دقة مزدوجة
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-dd hh24:mi:ss') -> 166.048785
تحتاج إلى تعيين search_path TO oracle,$user, public, pg_catalog لأنه يتم تثبيت وظائف مثل oracle.add_months,Oracle.last_day,Oracle.next_day,Oracle.months_between جنبًا إلى جنب مع pg_catalog.add_months,pg_catalog.last_day, pg_catalog.next_day،pg_catalog.months_between.
لا يحتاج PostgreSQL إلى جدول Oracle "ثنائي"، ولكن نظرًا لاستخدامه بشكل مكثف من قبل مستخدمي Oracle، فقد تمت إضافته في orafce. هذا الجدول موجود في مخطط oracle
. عادةً ما تريد السماح بالوصول غير المؤهل - لذا يجب عليك إضافة هذا المخطط إلى تكوين search_path
(مثل search_path = 'oracle, pg_catalog, "$user", public'
في postgresql.conf
).
يرسل PostgreSQL المعلومات إلى العميل عبر إشعار RAISE. تستخدم Oracle dbms_output.put_line(). يعمل هذا بشكل مختلف عن RAISE NOTICE. لدى Oracle قائمة انتظار للجلسة، ويضيف put_line() سطرًا إلى قائمة الانتظار وتقرأ الدالة get_line() من قائمة الانتظار. إذا تم تعيين علامة "serveroutput"، فسيقوم العميل فوق جميع عبارات SQL بقراءة قائمة الانتظار. يمكنك استخدام:
حدد dbms_output.enable(); حدد dbms_output.put_line('first_line'); حدد dbms_output.put_line('next_line'); حدد * من dbms_output.get_lines(0);
أو
حدد dbms_output.enable(); حدد dbms_output.serveroutput('t'); حدد dbms_output.put_line('first_line');
تحتوي هذه الحزمة على الوظائف التالية: تمكين()، تعطيل()، serveroutput()، وضع()، put_line()، new_line()، get_line()، get_lines(). يتم تنفيذ قائمة انتظار الحزمة في الذاكرة المحلية للجلسة.
تسمح هذه الحزمة لبرامج PL/pgSQL بالقراءة من أي ملفات يمكن الوصول إليها من الخادم والكتابة إليها. يمكن لكل جلسة فتح ما يصل إلى عشرة ملفات كحد أقصى والحد الأقصى لحجم الخط هو 32 كيلو بايت. تحتوي هذه الحزمة على الوظائف التالية:
utl_file.f Close(file utl_file.file_type) - إغلاق الملف
utl_file.frose_all() - أغلق كافة الملفات
utl_file.fcopy(src_location, src_filename, dest_location, dest_filename[, start_line][, end_line]) - نسخ ملف نصي
utl_file.fflush(file utl_file.file_type) - يقوم بمسح كافة البيانات من المخازن المؤقتة
utl_file.fgetattr(الموقع، اسم الملف) - الحصول على سمات الملف
utl_file.fopen (نص الموقع، نص اسم الملف، نص وضع الملف [، الحد الأقصى لحجم int] [، اسم التشفير]) utl_file.file_type - ملف مفتوح
utl_file.fremove(الموقع، اسم الملف) - إزالة الملف
utl_file.frename(location, filename, dest_dir, dest_file[, overwrite]) - إعادة تسمية الملف
utl_file.get_line(ملف utl_file.file_type) نص - قراءة سطر واحد من الملف
نص utl_file.get_nextline(ملف utl_file.file_type) - قراءة سطر واحد من الملف أو إرجاع NULL
utl_file.is_open(file utl_file.file_type) bool - يُرجع صحيحًا، إذا تم فتح الملف
utl_file.new_line(file utl_file.file_type [,rows int]) - يضع بعض أحرف الأسطر الجديدة في الملف
utl_file.put(file utl_file.file_type, buffer text) - يضع المخزن المؤقت في الملف
utl_file.put_line(ملف utl_file.file_type, نص المخزن المؤقت) - يضع سطرًا في الملف
utl_file.putf(file utl_file.file_type, format buffer [,arg1 text][,arg2 text][..][,arg5 text]) - وضع النص المنسق في الملف
utl_file.tmpdir() - احصل على مسار الدليل المؤقت
نظرًا لأن PostgreSQL لا يدعم الاتصال حسب المرجع، فإن بعض الوظائف تختلف قليلًا: fClose وget_line.
أعلن f utl_file.file_type؛ يبدأ f := utl_file.fopen('/tmp', 'sample.txt', 'r'); <<اقرأ>> حلقة يبدأ إشعار رفع '%'، utl_file.get_line(f); استثناء عندما no_data_found بعد ذلك خروج readl؛ نهاية؛ حلقة النهاية؛ و := f Close(f); نهاية؛
أو الثانية (مع وظيفة محددة لـ PostgreSQL get_nextline)
يعلن f utl_file.file_type; نص سطر؛ يبدأ f := utl_file.fopen('/tmp', 'sample.txt', 'r'); حلقة السطر := utl_file.get_nextline(f); الخروج عندما يكون السطر فارغًا؛ رفع الإشعار '%'، السطر؛ استثناء عند الآخرين بعد ذلك utl_file.f Close_all(); نهاية؛
قبل استخدام الحزمة عليك ضبط الجدول utl_file.utl_file_dir. أنه يحتوي على كافة الدلائل المسموح بها دون رمز النهاية ('/' أو ''). على نظام WinNT، يجب أن تنتهي المسارات بالرمز '' في كل مرة.
يمكن تسمية إدخالات الدليل (العمود الثاني في الجدول utl_file.utl_file_dir
). يمكن أن تكون معلمة location
إما اسم الدليل أو مسار القاموس. يتم أولاً تفسير الموقع والتحقق منه كاسم دليل. إذا لم يتم العثور عليه (في العمود الثاني)، فسيتم تفسير الموقع والتحقق منه كمسار.
تتطلب الوظائف من حزمة utl_file (المخطط في Postgres) الوصول إلى الجدول utl_file.utl_file_dir. يمكن استخدام هذه الحقيقة للتحكم في ما يمكن للمستخدمين استخدامه لهذه الوظائف أم لا. الإعداد الافتراضي هو القراءة للعامة. يمكن لـ INSERT وUPDATE إجراء المستخدم المميز فقط (المستخدم المتميز). لذلك يمكن للمستخدم الذي لا يتمتع بالامتياز استخدام وظائف من هذه الحزمة، لكن لا يمكنه تغيير قائمة الأدلة الآمنة (محتوى جدول utl_file.utl_file_dir). محتوى هذا الجدول مرئي لـ PUBLIC (أو يجب أن يكون مرئيًا للمستخدمين الذين يستخدمون وظائف من هذه الحزمة).
هذا هو تطبيق واجهة برمجة تطبيقات Oracle للحزمة DBMS_SQL
إنه لا يضمن التوافق الكامل، ولكن يجب أن يقلل العمل الضروري للترحيل الناجح.
تنبيه: تختلف بنية PostgreSQL عن بنية Oracle. يتم تنفيذ PL/pgSQL في نفس السياق مثل محرك SQL. إذن ليس هناك أي سبب لاستخدام أنماط Oracle مثل التجميع المجمع والتكرار فوق التجميع في Postgres للحصول على أداء جيد. تم تصميم هذا الرمز لتقليل العمل المتعلق بنقل بعض التطبيقات من Oracle إلى Postgres، ويمكن أن يعمل بشكل جيد. ولكن لن تكون هناك أي ميزة في الأداء مقابل عبارات PL/pgSQL المضمنة. تحتوي محاكاة واجهة برمجة التطبيقات (API) الخاصة بـ Oracle على ذاكرة ووحدة المعالجة المركزية (CPU)، والتي يمكن أن تكون مهمة بالنسبة للبيانات الأكبر حجمًا.
يطبق هذا الامتداد مجموعة فرعية من واجهة dbms_sql الخاصة بـ Oracle. الهدف من هذا الامتداد ليس التوافق مع Oracle، فهو مصمم لتقليل بعض تطبيقات Oracle المرتبطة بالعمل إلى Postgres. يتم دعم بعض وظائف DML المجمعة الأساسية:
افعل $$ يعلن ج كثافة العمليات؛ كثافة العمليات[]; ب فارشار[]; كاليفورنيا رقمية[]; يبدأ ج := dbms_sql.open_cursor(); استدعاء dbms_sql.parse(c, 'إدراج في قيم foo(:a, :b, :c)'); أ := ARRAY[1, 2, 3, 4, 5]; b := ARRAY['Ahoj', 'Nazdar', 'Bazar']; كاليفورنيا := ARRAY[3.14, 2.22, 3.8, 4]; استدعاء dbms_sql.bind_array(c, 'a', a, 2, 3); استدعاء dbms_sql.bind_array(c, 'b', b, 3, 4); استدعاء dbms_sql.bind_array(c, 'c', ca); رفع إشعار "الصفوف المدرجة %d"، dbms_sql.execute(c); نهاية؛ $$; افعل $$ يعلن ج كثافة العمليات؛ كثافة العمليات[]; ب فارشار[]; كاليفورنيا رقمية[]; يبدأ ج := dbms_sql.open_cursor(); استدعاء dbms_sql.parse(c, 'select i, ''Ahoj'' || i, i + 0.003 from generator_series(1, 35) g(i)'); استدعاء dbms_sql.define_array(c, 1, a, 10, 1); استدعاء dbms_sql.define_array(c, 2, b, 10, 1); استدعاء dbms_sql.define_array(c, 3, ca, 10, 1); تنفيذ dbms_sql.execute(c); بينما dbms_sql.fetch_rows(c) > 0 حلقة استدعاء dbms_sql.column_value(c, 1, a); استدعاء dbms_sql.column_value(c, 2, b); استدعاء dbms_sql.column_value(c, 3, ca); رفع الإشعار 'a = %'، a؛ رفع الإشعار 'b = %'، b؛ رفع الإشعار 'c = %', ca; حلقة النهاية؛ اتصل بـ dbms_sql. Close_cursor(c); نهاية؛ $$;
توجد وظيفة dbms_sql.describe_columns_f
، والتي تشبه الإجراء dbms_sql.describe_columns
. انتبه، ترتبط معرفات النوع بنظام نوع PostgreSQL. لا يتم تحويل القيم إلى أرقام Oracle
افعل $$ يعلن ج كثافة العمليات؛ سجل ص. د dbms_sql.desc_rec; يبدأ ج := dbms_sql.open_cursor(); استدعاء dbms_sql.parse(c, 'select * from pg_class'); r := dbms_sql.describe_columns(c); رفع الإشعار '%'، r.col_cnt؛ foreach d في الصفيف r.desc_t حلقة رفع الإشعار '% %'، d.col_name، d.col_type::regtype؛ حلقة النهاية؛ اتصل بـ dbms_sql. Close_cursor(c); نهاية؛ $$; افعل $$ يعلن ج كثافة العمليات؛ ن كثافة العمليات؛ د dbms_sql.desc_rec; da dbms_sql.desc_rec[]; يبدأ ج := dbms_sql.open_cursor(); استدعاء dbms_sql.parse(c, 'select * from pg_class'); استدعاء dbms_sql.describe_columns(c, n, da); رفع الإشعار '%'، n؛ foreach د في مجموعة دا حلقة رفع الإشعار '% %'، d.col_name، d.col_type::regtype؛ حلقة النهاية؛ اتصل بـ dbms_sql. Close_cursor(c); نهاية؛ $$;
هذه الحزمة عبارة عن محاكاة لحزمة dbms_pipe Oracle. يوفر التواصل بين الجلسات. يمكنك إرسال وقراءة أي رسالة مع أو بدون انتظار؛ قائمة الأنابيب النشطة؛ ضبط الأنبوب على أنه خاص أو عام؛ واستخدام الأنابيب الصريحة أو الضمنية.
الحد الأقصى لعدد الأنابيب هو 50.
يتم استخدام الذاكرة المشتركة لإرسال الرسائل.
مثال على ذلك:
-- الجلسة أ حدد dbms_pipe.create_pipe('my_pipe',10,true); - إنشاء الأنابيب الصريحة حدد dbms_pipe.pack_message('neco je jinak'); حدد dbms_pipe.pack_message("أي شيء آخر"); حدد dbms_pipe.send_message('my_pipe',20,0); - تغيير الحد والإرسال دون انتظار حدد * من dbms_pipe.db_pipes؛ - قائمة الأنابيب الحالية -- الجلسة ب حدد dbms_pipe.receive_message('my_pipe',1); - انتظر ثانية واحدة كحد أقصى لوصول الرسالة حدد dbms_pipe.next_item_type(); -- -> 11، نص حدد dbms_pipe.unpack_message_text(); حدد dbms_pipe.next_item_type(); -- -> 11، نص حدد dbms_pipe.unpack_message_text(); حدد dbms_pipe.next_item_type(); -- -> 0، لا يوجد المزيد من العناصر حدد dbms_pipe.remove_pipe('my_pipe');
هناك بعض الاختلافات مقارنة بأوراكل، ولكن:
الحد الأقصى للأنابيب ليس بالبايت ولكن في العناصر الموجودة في الأنبوب
يمكنك إرسال رسالة دون انتظار
يمكنك إرسال رسائل فارغة
يعرف next_item_type عن TIMESTAMP (النوع 13)
لا يعرف PostgreSQL نوع RAW، استخدم bytea بدلاً من ذلك
وسيلة أخرى للاتصال بين العمليات.
-- الجلسة أ حدد dbms_alert.register('boo'); حدد * من dbms_alert.waitany(10); -- الجلسة ب حدد dbms_alert.register('boo'); حدد * من dbms_alert.waitany(10); -- الجلسة ج حدد dbms_alert.signal('boo','يوم جميل');
تحتوي هذه الوحدة على بعض الوظائف للعمل مع أيام العمل من الحزمة PLVdate. يمكن العثور على الوثائق التفصيلية في مكتبة PLVision. هذه الحزمة متعددة الثقافات، ولكن التكوينات الافتراضية مخصصة للدول الأوروبية فقط (راجع كود المصدر).
يجب عليك تحديد أيام العطل الخاصة بك (بحد أقصى 50 يومًا) والعطلات الخاصة بك (بحد أقصى 30 يومًا). العطلة هي أي يوم غير عمل، وهو نفسه كل عام. على سبيل المثال، يوم عيد الميلاد في الدول الغربية.
plvdate.add_bizdays(day date, days int) date - احصل على التاريخ الذي تم إنشاؤه عن طريق إضافة <n> أيام عمل إلى التاريخ
تاريخ plvdate.nearest_bizday(day date) - احصل على أقرب تاريخ عمل لتاريخ معين، يحدده المستخدم
plvdate.next_bizday(تاريخ اليوم) التاريخ - احصل على تاريخ العمل التالي من تاريخ معين، يحدده المستخدم
plvdate.bizdays_between(day1 date, day2 date) int - احصل على عدد أيام العمل بين تاريخين
plvdate.prev_bizday(تاريخ اليوم) date - احصل على تاريخ العمل السابق من تاريخ معين
plvdate_isbizday(date) bool - قم باستدعاء هذه الوظيفة لتحديد ما إذا كان التاريخ هو يوم عمل
plvdate.set_nonbizday(dow varchar) - قم بتعيين يوم من الأسبوع كيوم غير عمل
plvdate.unset_nonbizday(dow varchar) - يوم غير محدد من الأسبوع كيوم غير عمل
plvdate.set_nonbizday(تاريخ اليوم) - قم بتعيين اليوم كيوم غير عمل
plvdate.unset_nonbizday(day date) - يوم غير محدد كيوم غير عمل
plvdate.set_nonbizday (تاريخ اليوم، تكرار منطقي) - قم بتعيين اليوم كيوم غير تجاري، إذا كان "التكرار" صحيحًا، فإن اليوم هو يوم غير تجاري كل عام
plvdate.unset_nonbizday (تاريخ اليوم، تكرار منطقي) - يوم غير محدد كيوم غير تجاري، إذا كان "التكرار" صحيحًا، فإن اليوم هو يوم غير تجاري كل عام
plvdate.use_easter() - سيكون عيد الفصح ويوم الاثنين عطلة
plvdate.unuse_easter();
plvdate.use_easter(useit boolean);
plvdate.using_easter() bool - إذا استخدمنا عيد الفصح، فسيتم إرجاعه صحيحًا
plvdate.use_great_friday() - الجمعة العظيمة لعيد الفصح ستكون عطلة
plvdate.unuse_easter();
plvdate.use_easter(useit boolean);
plvdate.using_easter() bool - إذا استخدمنا عيد الفصح يوم الجمعة العظيمة كعطلة، فسيتم إرجاعه صحيحًا
plvdate.include_start() - قم بتضمين تاريخ البدء في حساب bizdays_between
plvdate.noinclude_start();
plvdate.include_start(include boolean);
plvdate. Included_start() bool;
plvdate.default_holidays(varchar) - تحميل التكوينات الافتراضية. يمكنك استخدام التكوينات التالية: التشيكية والألمانية والنمسا وبولندا وسلوفاكيا وروسيا والمملكة المتحدة والولايات المتحدة الأمريكية في هذه اللحظة.
يحتوي التكوين على أيام العطل المشتركة فقط لجميع المناطق. يمكنك إضافة عطلتك الإقليمية باستخدام plvdate.set_nonbizday(nonbizday, true)
مثال:
postgres=# حدد plvdate.default_holidays('czech'); default_holidays ----------------- (صف واحد) postgres=# حدد to_char(current_date, 'day'), plvdate.next_bizday(current_date)، to_char(plvdate.next_bizday(current_date),'day'); to_char | next_bizday | to_char ----------+------------+----------- السبت | 13-03-2006 | الاثنين (صف واحد)
التغيير للبيئة غير الأوروبية:
حدد plvdate.unset_nonbizday('saturday'); حدد plvdate.unset_nonbizday('sunday'); حدد plvdate.set_nonbizday('الجمعة'); حدد plvdate.set_nonbizday('2006-05-19', صحيح); حدد plvdate.unuse_easter();
تحتوي هذه الحزمة على بعض وظائف السلسلة والأحرف المفيدة. تدعم كل دالة الإزاحة الموجبة والسالبة — أي الإزاحة من نهاية السلسلة. على سبيل المثال:
plvstr.left('abcdef',2) -> ab plvstr.left('abcdef',-2) -> abcd plvstr.substr('abcdef',1,1) -> أ plvstr.substr('abcdef',-1,1) -> f plvstr.substr('abcde',-2,1) -> د
قائمة الوظائف:
plvstr.normalize(str text) - تطبيع السلسلة - استبدال الأحرف البيضاء بمسافة، واستبدال المسافات بمسافة
plvstr.is_prefix(str text, prefix text, cs bool) - يُرجع صحيحًا، إذا كانت البادئة هي بادئة str
plvstr.is_prefix(str text, prefix text) - يُرجع صحيحًا، إذا كانت البادئة هي بادئة str
plvstr.is_prefix(str int, prefix int) - يُرجع صحيحًا، إذا كانت البادئة هي بادئة str
plvstr.is_prefix(str bigint, prefix bigint) - يُرجع صحيحًا، إذا كانت البادئة هي بادئة str
plvstr.substr(str text, start int, len int) - إرجاع السلسلة الفرعية التي بدأت في start_in إلى النهاية
plvstr.substr(str text, start int) - يُرجع السلسلة الفرعية التي بدأت في start_in إلى النهاية
plvstr.instr (نص str، نص بات، بداية int، nth int) - نمط البحث في السلسلة
plvstr.instr(str text, patt text, start int) - نمط البحث في السلسلة
plvstr.instr(نص str، نص بات) - نمط البحث في السلسلة
plvstr.lpart(str text, div text, start int, nth int, all_if_notfound bool) - استدعاء هذه الوظيفة لإرجاع الجزء الأيسر من السلسلة
plvstr.lpart(str text, div text, start int, nth int) - استدعاء هذه الوظيفة لإرجاع الجزء الأيسر من السلسلة
plvstr.lpart(str text, div text, start int) - استدعاء هذه الوظيفة لإرجاع الجزء الأيسر من السلسلة
plvstr.lpart(str text, div text) - قم باستدعاء هذه الدالة لإرجاع الجزء الأيسر من السلسلة
plvstr.rpart(str text, div text, start int, nth int, all_if_notfound bool) - استدعاء هذه الوظيفة لإرجاع الجزء الأيمن من السلسلة
plvstr.rpart(str text, div text, start int, nth int) - استدعاء هذه الوظيفة لإرجاع الجزء الأيمن من السلسلة
plvstr.rpart(str text, div text, start int) - استدعاء هذه الوظيفة لإرجاع الجزء الأيمن من السلسلة
plvstr.rpart(str text, div text) - قم باستدعاء هذه الدالة لإرجاع الجزء الأيمن من السلسلة
plvstr.lstrip(str text, substr text, num int) - قم باستدعاء هذه الوظيفة لإزالة الأحرف من البداية
plvstr.lstrip(str text, substr text) - قم باستدعاء هذه الوظيفة لإزالة الأحرف من البداية
plvstr.rstrip(str text, substr text, num int) - قم باستدعاء هذه الوظيفة لإزالة الأحرف من النهاية
plvstr.rstrip(str text, substr text) - قم باستدعاء هذه الوظيفة لإزالة الأحرف من النهاية
plvstr.rvrs(str text, start int, _end int) - عكس السلسلة أو جزء من السلسلة
plvstr.rvrs(str text, start int) - عكس السلسلة أو جزء من السلسلة
plvstr.rvrs(نص str) - سلسلة عكسية أو جزء من السلسلة
plvstr.left(str text, n int) - يُرجع أول عدد من الأحرف. يمكنك استخدام num_in السالب
plvstr.right(str text, n int) - يقوم بإرجاع آخر num_in من الأحرف. يمكنك استخدام num_ni السالبة
plvstr.swap (نص str، استبدال النص، بدء int، length int) - استبدال سلسلة فرعية في سلسلة بسلسلة محددة
plvstr.swap (نص str، استبدال النص) - استبدال سلسلة فرعية في سلسلة بسلسلة محددة
plvstr.betwn(str text, start int, _end int, include bool) - ابحث عن السلسلة الفرعية بين موقعي البداية والنهاية
plvstr.betwn (نص str، نص البداية، نص _end، startnth int، endnth int، شامل bool، gotoend bool) - ابحث عن السلسلة الفرعية بين مواقع البداية والنهاية
plvstr.betwn(str text, start text, _end text) - ابحث عن السلسلة الفرعية بين موقعي البداية والنهاية
plvstr.betwn(str text, start text, _end text, startnth int, endnth int) - ابحث عن السلسلة الفرعية بين مواقع البداية والنهاية
plvchr.nth(str text, n int) - استدعاء هذه الوظيفة لإرجاع الحرف Nth في سلسلة
plvchr.first(str text) - قم باستدعاء هذه الدالة لإرجاع الحرف الأول في السلسلة
plvchr.last(str text) - قم باستدعاء هذه الدالة لإرجاع الحرف الأخير في السلسلة
plvchr.is_blank(c int) - فارغ
plvchr.is_blank(c text) - فارغ
plvchr.is_digit(c int) - رقم
plvchr.is_digit(c text) - رقم
plvchr.is_quote(c int) - هو الاقتباس
plvchr.is_quote(نص ج) - هو اقتباس
plvchr.is_other(c int) - غير ذلك
plvchr.is_other(c text) - غير ذلك
plvchr.is_letter(c int) - هو حرف
plvchr.is_letter(c text) - هو حرف
plvchr.char_name(c text) - يُرجع اسم الحرف إلى كود ascii باعتباره VARCHAR.
plvchr.quoted1(str text) - النص المقتبس بين '''
plvchr.quoted2(str text) - النص المقتبس بين '"'
plvchr.stripped(str text, char_in text) - يزيل سلسلة من كافة مثيلات الأحرف المحددة
تقوم حزمة PLVsubst بإجراء عمليات استبدال السلسلة بناءً على كلمة أساسية بديلة.
plvsubst.string(template_in text, vals_in text[]) - يقوم بمسح سلسلة لجميع مثيلات الكلمة الأساسية البديلة واستبدالها بالقيمة التالية في قائمة قيم الاستبدال
plvsubst.string(template_in text, vals_in text[], subst_in text)
plvsubst.string(نص القالب، نص vals_in، نص delim_in)
plvsubst.string(نص القالب، نص vals_in، نص delim_in، نص subst_in)
plvsubst.setsubst(str text) - تعيين الكلمة الأساسية البديلة إلى الافتراضي '%s'
plvsubst.subst() - استرداد الكلمة الأساسية البديلة
أمثلة:
حدد plvsubst.string('اسمي %s %s.', ARRAY['Pavel','Stěhule']); خيط -------------------------- اسمي بافيل ستهول. (صف واحد) حدد plvsubst.string('اسمي %s %s.', 'Pavel,Stěhule'); خيط -------------------------- اسمي بافيل ستهول. (صف واحد) حدد plvsubst.string('اسمي $$ $$.', 'Pavel|Stěhule','|','$$'); خيط -------------------------- اسمي بافيل ستهول. (صف واحد)
dms_utility.format_call_stack() — إرجاع سلسلة منسقة تحتوي على محتوى مكدس الاستدعاءات
postgres=# حدد foo2(); foo2 --------------------------------- ----- مكدس المكالمات ----- كائن الخط اسم بيان الرقم 1 وظيفة العودة foo 1 وظيفة العودة foo1 1 وظيفة الإرجاع foo2 (صف واحد)
هذه الحزمة غير متوافقة مع PLVlex الأصلي.
postgres=# اختر * من plvlex.tokens('select * from abc join d ON x=y', true, true); نقاط البيع | رمز | كود | الطبقة | فاصل | وزارة الدفاع ----+--------+------+------------------------------------------------------------- 0 | حدد | 527 | الكلمة الرئيسية | | 7 | * | 42 | أخرى | | النفس 9 | من | 377 | الكلمة الرئيسية | | 25 | اي بي سي | | الهوية | | 20 | انضم | 418 | الكلمة الرئيسية | | 25 | د | | الهوية | | 27 | على | 473 | الكلمة الرئيسية | | 30 | س | | الهوية | | 31 | = | 61 | أخرى | | النفس 32 | ذ | | الهوية | | (10 صفوف)
تحذير: يمكن تغيير رموز الكلمات الرئيسية بين إصدارات PostgreSQL! o plvlex.tokens(str text, Skip_spaces bool,qualified_names bool) - إرجاع جدول العناصر المعجمية في str.
تحمي هذه الحزمة مدخلات المستخدم من حقن SQL.
dbms_assert.enquote_literal(varchar) varchar - أضف علامات الاقتباس البادئة والزائدة، وتأكد من أن جميع علامات الاقتباس المفردة مقترنة بعلامات الاقتباس المفردة المجاورة.
dbms_assert.enquote_name(varchar [, boolean]) varchar - ضع الاسم بين علامتي اقتباس مزدوجتين. تضمن المعلمة الثانية الاختيارية خفض مستوى الاسم. تنبيه - في Oracle، يتم استخدام المعلمة الثانية بأحرف كبيرة!
dbms_assert.noop(varchar) varchar - إرجاع القيمة دون أي فحص.
dbms_assert.qualified_sql_name(varchar) varchar - تتحقق هذه الوظيفة من أن سلسلة الإدخال هي اسم SQL مؤهل.
dbms_assert.schema_name(varchar) varchar - تتحقق الوظيفة من أن سلسلة الإدخال هي اسم مخطط موجود.
dbms_assert.simple_sql_name(varchar) varchar - تتحقق هذه الوظيفة من أن سلسلة الإدخال هي اسم SQL بسيط.
dbms_assert.object_name(varchar) varchar - يتحقق من أن سلسلة الإدخال هي معرف SQL مؤهل لكائن SQL موجود.
تحتوي هذه الوحدة على بعض وظائف التأكيد.
plunit.assert_true(bool [, varchar]) - التأكد من صحة الشرط.
plunit.assert_false(bool [, varchar]) - يؤكد أن الشرط غير صحيح.
plunit.assert_null(anyelement [, varchar]) - يؤكد أن القيمة الفعلية فارغة.
plunit.assert_not_null(anyelement [, varchar]) - يؤكد أن القيمة الفعلية ليست فارغة.
plunit.assert_equals(anyelement, Anyelement [, doublecision] [, varchar]) - التأكيد على أن المتوقع والفعلي متساويان.
plunit.assert_not_equals(anyelement, Anyelement [, doublecision] [, varchar]) - يؤكد أن المتوقع والفعلي متساويان.
plunit.fail([varchar]) - يمكن استخدام الفشل للتسبب في فشل إجراء الاختبار على الفور باستخدام الرسالة المقدمة.
dbms_random.initialize(int) - تهيئة الحزمة بقيمة أولية.
dbms_random.normal() - إرجاع أرقام عشوائية في التوزيع العادي القياسي.
dbms_random.random() - إرجاع رقم عشوائي من -2^31 .. 2^31.
dbms_random.seed(int)
dbms_random.seed(text) - إعادة تعيين قيمة البذرة.
dbms_random.string(opt text(1), len int) - إنشاء سلسلة عشوائية
dbms_random.terminate() - إنهاء الحزمة (لا تفعل شيئًا في الصفحة)
dbms_random.value() - إرجاع رقم عشوائي من [0.0 إلى 1.0)
dbms_random.value (دقة مزدوجة منخفضة، دقة مزدوجة عالية) - إرجاع رقم عشوائي من [منخفض - عالي)
تحتوي هذه الوحدة على تنفيذ الوظائف: concat، nvl، nvl2، lnnvl، decode، great، less، bitand، nanvl، sinh، cosh، tanh، oracle.substr and oracle.mod.
oracle.substr(str text, start int, len int) - سلسلة فرعية متوافقة مع Oracle
oracle.substr(str text, start int) - سلسلة فرعية متوافقة مع Oracle
oracle.substr(str numeric, start numeric) - سلسلة فرعية متوافقة مع Oracle
oracle.substr(str numeric, start numeric, len numeric) - سلسلة فرعية متوافقة مع Oracle
oracle.substr(str varchar, start numeric) - سلسلة فرعية متوافقة مع Oracle
oracle.substr(str varchar, start numeric,len numeric) - سلسلة فرعية متوافقة مع Oracle
oracle.lpad(string, length [, fill]) - lpad المتوافق مع Oracle
oracle.rpad(string, length [, fill]) - rpad المتوافق مع Oracle
oracle.ltrim(نص السلسلة [، نص الأحرف]) - ltrim المتوافق مع Oracle
oracle.rtrim(نص السلسلة [، نص الأحرف]) - rtrim المتوافق مع Oracle
oracle.btrim(نص السلسلة [، نص الأحرف]) - btrim المتوافق مع Oracle
oracle.length(string char) - الطول المتوافق مع Oracle
oracle.listagg(str text [, separator text]) - القيم المجمعة للقائمة
Oracle.wm_concat(str text) - القيم المجمعة إلى قائمة مفصولة بفواصل
Oracle.median(float4) - حساب الوسيط
Oracle.median(float8) - حساب الوسيط
Oracle.to_number(text) - يحول سلسلة إلى رقم
oracle.to_number(numeric) - يحول سلسلة إلى رقم
oracle.to_number(numeric,numeric) - يحول سلسلة إلى رقم
public.to_multi_byte(text) - تحويل كافة الأحرف أحادية البايت إلى أحرف متعددة البايت المقابلة لها
public.to_single_byte(text) - تحويل كافة الأحرف متعددة البايت إلى الأحرف المفردة البايت المقابلة لها
oracle.greatest(anyelement, Anyelement[]) - توافق Oracle هو الأفضل، ويُرجع NULL عند إدخال NULL
oracle.least(anyelement, Anyelement[]) - التوافق مع Oracle على الأقل، يُرجع NULL عند الإدخال NULL
oracle.mod(int, int) - تعديل توافق Oracle، إذا كانت المعلمة الثانية صفرًا، فإنها تُرجع المعلمة الأولى
Oracle.Remainder (int ، int) - إرجاع ما تبقى من العدد مقسوما على رقم آخر
Oracle.Remainder (Numeric ، Numeric) - إرجاع ما تبقى من العدد مقسوما على رقم آخر
oracle.sys_guid () - إرجاع bytea - 16 بايت من معرف Uniq العالمي
قد تحتاج إلى تعيين Search_Path على "Oracle ، PG_CATALOG ،" $ user "، public" لأن Oracle.substr ، Oracle.lpad ، Oracle.rpad ، Oracle.Ltrim ، Oracle.rtrim ، Oracle.Btrim ، Oracle.length تم تثبيته على الجانب -DY-BY مع pg_catalog.substr ، pg_catalog.lpad ، pg_catalog.rpad ، pg_catalog.ltrim ، pg_catalog.rtrim ، pg_catalog.btrim ، pg_catalog.length على التوالي.
وظائف Oracle.Decode ، Oracle.Greatest و Oracle.LEAST يجب أن تربى دائمًا بواسطة اسم المخطط حتى لو كانت Oracle قبل PG_CATALOG في Search_PATH لأن هذه الوظائف يتم تنفيذها داخل محلل ومحلل PostgreSQL. بدون اسم المخطط ، سيتم دائمًا استخدام الوظائف الداخلية.
لاحظ أنه في حالة LPAD و RPAD ، يمكن أن تكون سلسلة المعلمات وملء الأنواع char أو varchar أو text و varchar2 أو nvarchar2 (لاحظ أن آخر نوعين من الأنواع المقدمة من ORAFCE). حرف التعبئة الافتراضي هو مساحة نصف عرض. وبالمثل ل Ltrim و Rtrim و Btrim.
لاحظ أن Oracle.Length له قيود على أنه يعمل فقط في وحدات من الشخصيات لأن نوع postgresql char يدعم فقط دلالات الشخصية.
يمكن لـ Oracle.substr بثلاث وسيطات إرجاع نتيجة مختلفة (خالية أو سلسلة فارغة) في الاعتماد على تعيين orafce.using_substring_zero_width_in_substr المتغير (Oracle ، Warning_oracle ، orafce ، warning_orafce). يتم إرجاع هذه النتيجة المختلفة فقط عندما تكون الوسيطة الثالثة (Sentring_Length) صفر. الافتراضي هو warning_oracle ، وهذا يعني رفع التحذير وإعادة فارغ.
هذه الوظائف إرجاع معرف فريد عالمي. يستدعي وظائف محددة من ملحق "UUID-OSSP" ، ثم يجب تثبيت هذه الوظيفة قبل استخدام الوظيفة Sys_Guid. بشكل افتراضي ، تستخدم هذه الوظيفة وظيفة uuid_genera_v1 ، ولكن يمكن استخدام الدالة uuid_generate_v1mc ، uuid_generate_v4 أيضًا (عن طريق إعداد orafce.sys_guid_source). Oracle.sys_guid يمكنه استخدام builin gen_random_uuid func أيضًا. في هذه الحالة ، لا يلزم امتداد "uuid-ossp".
ينفذ Varchar2 من ORAFCE أجزاء من مواصفات قاعدة بيانات Oracle حول varchar2:
وحدة من النوع المعدل = 'بايت "(لدلالات الشخصية ، انظر nvarchar2)
على عكس postgresql varchar ، لا يقتطو يلقي الضمني إلى varchar2 مساحات بيضاء على الحد الأقصى المعلن عن الطول
لهذه الأنواع من الممكن استخدام NULL SAFE || المشغل ، عند تمكين orafce.varchar2_null_safe_concat إلى true. السلوك يشبه إلى حد كبير أوراكل.
الانتباه: - عندما تكون النتيجة سلسلة فارغة ، فإن النتيجة هي فارغة. هذا السلوك هو معطل بشكل افتراضي.
الانتباه: - هناك عدم توافق محتمل بين 3.7 وما فوق ORAFCE الإصدارات. يتم الآن وضع علامة على وظيفة المشغل على أنها مستقرة (كانت غير قابلة للتغيير من قبل). لا يمكن إنشاء فهارس وظيفية على تعبيرات مستقرة أو متقلبة.
- Concat Null Safe (معطل بشكل افتراضي) حدد NULL || 'hello' :: varchar2 || باطل؛ تعيين orafce.varchar2_null_safe_concat إلى true ؛ حدد NULL || 'hello' :: varchar2 || باطل؛
يرجى ملاحظة أن postgreSQL لا يسمح بتحديد ديناميكي كيفية تفسير سلاسل varchar. إنه يفسرهم دائمًا على أنه سلاسل "شخصية" كما هو محدد بواسطة ترميز قاعدة البيانات. لذلك ، لا يمكننا دعم كل من دلالات البايت والشخصيات لنوع Varchar معين في نفس قاعدة البيانات. اخترنا تنفيذ دلالات البايت لأن ذلك هو الافتراضي في أوراكل. بالنسبة لدلالات الشخصية ، يرجى الاطلاع على NVARCHAR2 الذي ينفذ دائمًا دلالات الشخصية.
يرجى توخي الحذر عند استخدام النوع أعلاه لتخزين السلاسل التي تتكون من أحرف مشفرة متعددة ، حيث قد يتكون كل حرف من عدد تعسفي من البايتات.
ينفذ nvarchar2 ما يلي:
وحدة النوع Modifier = 'أحرف "(باستخدام مجموعة الأحرف/ترميز قاعدة البيانات)
استخدم هذا النوع إذا كانت دلالات الأحرف مفضلة.
يرجى ملاحظة أنه على عكس Oracle ، لا يفرض Orafce's Varchar2 و NvarChar2 الحد الأقصى البالغ 4000 بايت على الحجم "المعلن". في الواقع ، إنها نفس قلة PostgreSql Varchar ، والتي تبلغ حوالي 10 ميجابايت (على الرغم من أن Varchar يمكنه تخزين قيم الحجم من الناحية النظرية إلى 1 جيجابايت)
بعض وظائف السلسلة القائمة على البايت لاستخدامها مع سلاسل Varchar2
STERTRB (varchar2 ، int [، int]) - استخراج سلسلة من الطول المحدد (بالبايت) بدءًا من موضع بايت معين (العد من واحد) ؛ إذا لم يتم تحديد الوسيطة الثالثة ، فسيتم النظر في الطول إلى نهاية السلسلة
strposb (varchar2 ، varchar2) - إرجاع موقع السلسلة الفرعية المحددة في سلسلة معينة (العد من واحد)
LengthB (varchar2) - إرجاع الطول (بالبايت) لسلسلة معينة
Oracle لا تجعل الاختلافات بين السلسلة الفارغة والخارفة (عند استخدام القيمة كنص). بالنسبة إلى postgres null والسلسلة الفارغة هي قيم مختلفة. من الجيد أن تكون البساطة ضمان (في قاعدة بيانات postgres) استخدام فقط خالية (ولا تستخدم سلاسل فارغة) أو استخدام سلاسل فارغة فقط (ولا تستخدم خالية) لأعمدة نوع النص. كلا المتغيرات لديه بعض المزايا والعيوب.
يمكن تمييز هذا مع وظائف الزناد:
oracle.replace_empty_strings (['on' | 'true' | 'تحذير' | 'خطأ']) oracle.replace_null_strings (['on' | 'true' | 'تحذير' | 'خطأ'])
يتم استخدام وسيطة السلسلة الاختيارية كمؤشر ، لذا يجب أن تثير هذه الوظائف تحذيرًا (ربما خطأ) عندما تم تغيير الصف داخل هذه الوظائف.
إنشاء اختبار الجدول (ID Serial ، name varchar ، surname varchar) ؛ إنشاء Trigger test_trg قبل إدراج أو تحديث على الاختبار لكل صف تنفيذ الإجراء oracle.replace_empty_strings () ؛ أدخل في اختبار (الاسم ، اللقب) قيم ('' ، 'stehule') ؛ - سيتم استبدال الاسم بواسطة NULL
oracle.user_tab_columns
oracle.user_tables
oracle.user_cons_columns
oracle.user_constraints
oracle.product_componenent_version
oracle.user_objects
oracle.dba_segments
وثائق أفضل
تحسين المصل في dbms_pipe (عبر وظائف _send و _recv)
تغيير هياكل الذاكرة المشتركة بواسطة الجداول المؤقتة: الأقفال فقط في SHMEM ، (BITMAPS) ، والبيانات في TMP TBL
يتم إصدار هذه الوحدة بموجب ترخيص BSD.
تأسس المشروع في عام 2008 من قبل بافل ستيهول <[email protected]>.
المساهمون الآخرون:
غابرييل بارتوليني (gbartolini)
جيفري كوهين (jcohen)
جايلز دارولد (دارولد)
بافان ديولاسي (Pavanvd)
بيتر إيسنتراوت (بيتي)
Beata Emerson (B-Imerson)
Takahiro Itagaki (Itagaki)
Zdenek Kotala (Hlipa)
أميت لانغوت (أميتلان)
Heikki Linnakangas (Hlinnaka)
فوجي ماساو
Marco Nenciarini (Mnencia)
فيناياك بوكالي
غافن شيري (SWM)
بافيل ستيهول (أوكبوب)
رهيلا سيد (رهيلا)