استفاده از نشانه های غیر سمبولیک چیست؟

ساخت وبلاگ

ورودی SQL از دنباله ای از دستورات تشکیل شده است. یک دستور از دنباله ای از نشانه ها تشکیل شده است ، که توسط یک قسمت اصلی ("؛") خاتمه یافته است. انتهای جریان ورودی نیز یک دستور را خاتمه می دهد. کدام نشانه ها معتبر هستند به نحو دستور خاص بستگی دارد.

یک نشانه می تواند یک کلمه کلیدی ، شناسه ، شناسه نقل شده ، یک تحت اللفظی (یا ثابت) یا یک نماد شخصیت خاص باشد. توکن ها معمولاً با فضای سفید (فضا ، برگه ، خط جدید) از هم جدا می شوند ، اما در صورت عدم ابهام لازم نیست (که به طور کلی فقط در صورتی که یک شخصیت خاص در مجاورت برخی دیگر از نوع نشانه ها باشد).

به عنوان مثال ، موارد زیر (به صورت نحوی) ورودی SQL معتبر است:

این یک توالی از سه دستور است ، یک در هر خط (اگرچه این مورد لازم نیست ؛ بیش از یک دستور می تواند روی یک خط باشد و دستورات می توانند به طور مفید در خطوط تقسیم شوند).

علاوه بر این ، نظرات می تواند در ورودی SQL رخ دهد. آنها نشانه هایی نیستند ، آنها به طور موثری با فضای سفید هستند.

نحو SQL با توجه به آنچه نشانه ها دستورات را شناسایی می کنند و عملیات یا پارامترها هستند ، چندان سازگار نیست. چند نشانه اول به طور کلی نام فرمان هستند ، بنابراین در مثال بالا معمولاً از "انتخاب" ، "بروزرسانی" و یک دستور "درج" صحبت می کنیم. به عنوان مثال ، دستور بروزرسانی همیشه به یک نشانه تنظیم شده نیاز دارد تا در یک موقعیت خاص ظاهر شود ، و این تغییر خاص درج نیز برای تکمیل به مقادیر نیاز دارد. قوانین دقیق نحو برای هر دستور در قسمت VI شرح داده شده است.

4. 1. 1. شناسه ها و کلمات کلیدی

نشانه هایی مانند انتخاب ، بروزرسانی یا مقادیر در مثال بالا نمونه هایی از کلمات کلیدی هستند ، یعنی کلماتی که در زبان SQL معنای ثابت دارند. نشانه های my_table و a نمونه هایی از شناسه ها هستند. آنها بسته به دستور مورد استفاده در آنها ، نام جداول ، ستون ها یا سایر اشیاء پایگاه داده را مشخص می کنند. بنابراین گاهی اوقات به سادگی "نام" خوانده می شوند. کلمات کلیدی و شناسه ها از ساختار واژگانی یکسان برخوردار هستند ، به این معنی که نمی توان دانست که آیا یک نشانه شناسه است یا یک کلمه کلیدی بدون دانستن زبان. لیست کاملی از کلمات کلیدی را می توان در پیوست C یافت.

شناسه های SQL و کلمات کلیدی باید با یک نامه (a - z ، بلکه حروف با علائم دیاکریتیک و حروف غیر لاتین) یا یک زیربنایی (_) شروع شوند. کاراکترهای بعدی در یک شناسه یا کلمه کلیدی می توانند حروف ، زیرکانها ، رقم ها (0 - 9) یا علائم دلار ($) باشند. توجه داشته باشید که علائم دلار مطابق نامه استاندارد SQL در شناسه ها مجاز نیست ، بنابراین استفاده از آنها ممکن است برنامه های قابل حمل را کمتر کند. استاندارد SQL یک کلمه کلیدی را که حاوی رقم باشد تعریف نمی کند یا با یک زیربنایی شروع می شود یا به پایان می رسد ، بنابراین شناسه های این فرم در برابر تضاد احتمالی با پسوندهای آینده استاندارد ایمن هستند.

این سیستم بیش از آن از نامگذار ی-1 بایت یک شناسه استفاده نمی کند. نام های طولانی تر را می توان در دستورات نوشت ، اما آنها کوتاه می شوند. به طور پیش فرض ، نامگذاری شده 64 است بنابراین حداکثر طول شناسه 63 بایت است. اگر این حد مشکل ساز باشد ، می توان با تغییر ثابت نام آتالن در SRC/شامل/pg_config_manual. h افزایش یافت.

واژگان کلیدی و شناسه های نامشخص از نظر موارد غیر حساس هستند. از این رو:

می توان معادل آن را به صورت:

یک کنوانسیون که اغلب مورد استفاده قرار می گیرد نوشتن کلمات کلیدی در موارد بزرگ و نام ها در موارد پایین ، به عنوان مثال:

یک نوع دوم شناسه وجود دارد: شناسه محدود یا شناسه نقل شده. این با محصور کردن یک دنباله دلخواه از کاراکترها در کوالها (") تشکیل شده است. در حالی که یک انتخاب نامشخص به عنوان یک کلمه کلیدی گرفته می شود و بنابراین خطای تجزیه را در صورت استفاده از نام جدول یا ستون ایجاد می کند. مثال را می توان با شناسه های نقل شده مانند این نوشت:

شناسه های نقل شده می توانند حاوی هر شخصیت باشند ، به جز کاراکتر با کد صفر.(برای شامل یک نقل قول مضاعف ، دو نقل قول دوتایی بنویسید.) این امکان را فراهم می کند که نام جدول یا ستون ایجاد کنید که در غیر این صورت امکان پذیر نباشد ، مانند مواردی که دارای فضاها یا آمپرسند هستند. محدودیت طول هنوز اعمال می شود.

به نقل از یک شناسه ، آن را حساس به مورد نیز می کند ، در حالی که نام های بدون سیم همیشه به موارد کمتری تاشو می شوند. به عنوان مثال ، شناسه های FOO ، FOO و "FOO" توسط PostgreSQL یکسان در نظر گرفته می شوند ، اما "Foo" و "Foo" با این سه و یکدیگر متفاوت هستند.. شما می خواهید برنامه های قابل حمل را بنویسید که به شما توصیه می شود همیشه یک نام خاص را نقل کنید یا هرگز آن را نقل نکنید.)

نوعی از شناسه های نقل شده اجازه می دهد تا از جمله شخصیت های یونیکد فراری که توسط نقاط کد آنها مشخص شده است. این نوع با U & (بالا یا پایین مورد شما به دنبال ampersand) بلافاصله قبل از نقل قول مضاعف شروع می شود ، بدون هیچ فضایی بین ، به عنوان مثال U و "foo".:از طرف دیگر ، یک پشتی به دنبال یک علامت به علاوه به دنبال یک شماره کد شش رقمی شش رقمی. به عنوان مثال ، "داده" شناسه می تواند به صورت نوشته شود

مثال کمتر بی اهمیت زیر کلمه روسی "Slon" (فیل) را با حروف سیریلیک می نویسد:

اگر یک شخصیت فرار متفاوت از Backslash مورد نظر باشد ، می توان با استفاده از بند Uescape پس از رشته مشخص شد ، به عنوان مثال:

شخصیت فرار می تواند هر شخصیت واحد دیگری به غیر از رقم شش ضلعی ، علامت به علاوه ، یک نقل قول واحد ، یک نقل قول مضاعف یا شخصیت Whitespace باشد. توجه داشته باشید که شخصیت فرار در نقل قول های منفرد نوشته شده است ، نه به نقل از مضاعف ، پس از Uescape.

برای گنجاندن شخصیت فرار در شناسه به معنای واقعی کلمه ، آن را دو بار بنویسید.

یا از فرم فرار 4 رقمی یا 6 رقمی می توان برای مشخص کردن جفت های جانشین UTF-16 برای آهنگسازی کاراکترها با نقاط کد بزرگتر از U+FFFF استفاده کرد ، اگرچه در دسترس بودن فرم 6 رقمی از نظر فنی این امر را غیر ضروری می کند.(جفت های جانشین مستقیماً ذخیره نمی شوند ، اما در یک نقطه کد واحد ترکیب می شوند.)

اگر رمزگذاری سرور UTF-8 نباشد ، نقطه کد یونیکد که توسط یکی از این توالی های فرار مشخص شده است به رمزگذاری سرور واقعی تبدیل می شود. در صورت امکان خطایی گزارش می شود.

4. 1. 2. ثابت

سه نوع ثابت به طور ضمنی در PostgreSQL وجود دارد: رشته ها ، رشته های بیت و اعداد. ثابت همچنین می تواند با انواع صریح مشخص شود ، که می تواند نمایندگی دقیق تر و کارآمدتر توسط سیستم را فعال کند. این گزینه ها در زیر بخش های زیر مورد بحث قرار گرفته است.

4. 1. 2. 1. ثابت

ثابت رشته در SQL یک توالی دلخواه از شخصیت ها است که توسط نقل قول های منفرد (') محدود شده است ، به عنوان مثال "این یک رشته است". برای درج یک شخصیت تکذبه در یک رشته ثابت ، دو نقل قول مجاور مجاور ، به عنوان مثال ، "اسب دایان" بنویسید. توجه داشته باشید که این یک شخصیت دوتایی نیست (").

دو ثابت رشته ای که فقط با فضای سفید با حداقل یک خط جدید از هم جدا می شوند ، به هم پیوسته و به طور مؤثر درمان می شوند که گویی رشته به عنوان یک ثابت نوشته شده است. مثلا:

برابر است با:

نحو معتبر نیست.(این رفتار کمی عجیب توسط SQL مشخص شده است ؛ PostgreSQL استاندارد را دنبال می کند.)

4. 1. 2. 2. ثابت های رشته ای با فرار به سبک C

PostgreSQL همچنین ثابت های رشته ای "فرار" را می پذیرد ، که یک استاندارد برای استاندارد SQL است. ثابت رشته فرار با نوشتن حرف E (مورد بالا یا پایین) درست قبل از نقل قول تک باز ، به عنوان مثال ، e'foo 'مشخص می شود.(هنگام ادامه یک رشته فرار ثابت در خطوط ، E را فقط قبل از اولین نقل قول اول بنویسید.) در یک رشته فرار ، یک شخصیت backslash () یک توالی فرار Backslash مانند C را شروع می کند ، که در آن ترکیب backslash و شخصیت زیر (s) مقدار بایت ویژه را نشان می دهد ، همانطور که در جدول 4. 1 نشان داده شده است.

جدول 4. 1. توالی فرار backslash

دنباله فرار backslashتفسیر
قسمت پشتی
fخوراک فرم
خط جدید
برگشت محموله
زبانه
o ، oo ، ooo (o = 0-7)مقدار بایت اکتال
X H ، x HH (H = 0–9 ، A-F)مقدار بایت شش ضلعی
u xxxx ، u xxxxxxxx (x = 0–9 ، a-f)مقدار شخصیت unicode شش ضلعی 16 یا 32 بیتی

هر شخصیت دیگری که به دنبال پشتی است ، به معنای واقعی کلمه گرفته می شود. بنابراین ، برای اینکه یک شخصیت backslash را شامل شود ، دو پشتی بنویسید (\). همچنین ، یک نقل قول واحد می تواند علاوه بر روش عادی "" در یک رشته فرار گنجانده شود.

این وظیفه شماست که توالی بایت شما ایجاد می کنید ، به خصوص هنگام استفاده از اکتال یا شش ضلعی ، شخصیت های معتبری را در مجموعه شخصیت های سرور ایجاد کنید. یک جایگزین مفید استفاده از فرار یونیکد یا نحو فرار جایگزین یونیکد ، که در بخش 4. 1. 2. 3 توضیح داده شده است. سپس سرور بررسی می کند که تبدیل کاراکتر امکان پذیر است.

احتیاط

اگر پارامتر پیکربندی Standard_Conforming_Strings خاموش است ، پس از آن PostgreSQL فرار از Backslash را در هر دو ثابت و فرار از رشته تشخیص می دهد. با این حال ، همانطور که از PostgreSQL 9. 1 ، پیش فرض روشن است ، به این معنی که فرار از پشتی فقط در ثابت های رشته فرار شناخته می شود. این رفتار مطابق با استانداردها است ، اما ممکن است برنامه هایی را که به رفتار تاریخی متکی هستند ، شکسته شود ، جایی که فرار از پشتی همیشه به رسمیت شناخته می شد. به عنوان یک راه حل ، می توانید این پارامتر را خاموش کنید ، اما بهتر است از استفاده از فرار از Backslash به دور حرکت کنید. اگر برای نشان دادن یک شخصیت خاص نیاز به استفاده از Backslash Escape دارید ، رشته را با E ثابت بنویسید.

علاوه بر Standard_Conforming_strings ، پارامترهای پیکربندی فرار_ استرینگ_ waing و backslash_quote حاکم بر درمان پشتی در ثابت های رشته ای است.

شخصیت با کد صفر نمی تواند در یک رشته ثابت باشد.

4. 1. 2. 3. ثابت های رشته ای با فرار یونیکد

PostgreSQL همچنین از نوع دیگری از نحو فرار برای رشته ها پشتیبانی می کند که امکان مشخص کردن کاراکترهای خودسرانه یونیکد را توسط کد کد فراهم می کند. ثابت رشته Unicode Escape با U & (حرف بالا یا پایین پرونده U و به دنبال آن Ampersand) بلافاصله قبل از نقل قول آغاز می شود ، بدون هیچ فضایی بین ، به عنوان مثال U & "Foo".:از طرف دیگر ، یک پشتی به دنبال یک علامت به علاوه به دنبال یک شماره کد شش رقمی شش رقمی. به عنوان مثال ، "داده" رشته می تواند به صورت نوشته شود

مثال کمتر بی اهمیت زیر کلمه روسی "Slon" (فیل) را با حروف سیریلیک می نویسد:

اگر یک شخصیت فرار متفاوت از Backslash مورد نظر باشد ، می توان با استفاده از بند Uescape پس از رشته مشخص شد ، به عنوان مثال:

شخصیت فرار می تواند هر شخصیت واحد دیگری به غیر از رقم شش ضلعی ، علامت به علاوه ، یک نقل قول واحد ، یک نقل قول مضاعف یا شخصیت Whitespace باشد.

برای گنجاندن شخصیت فرار در رشته به معنای واقعی کلمه ، آن را دو بار بنویسید.

یا از فرم فرار 4 رقمی یا 6 رقمی می توان برای مشخص کردن جفت های جانشین UTF-16 برای آهنگسازی کاراکترها با نقاط کد بزرگتر از U+FFFF استفاده کرد ، اگرچه در دسترس بودن فرم 6 رقمی از نظر فنی این امر را غیر ضروری می کند.(جفت های جانشین مستقیماً ذخیره نمی شوند ، اما در یک نقطه کد واحد ترکیب می شوند.)

اگر رمزگذاری سرور UTF-8 نباشد ، نقطه کد یونیکد که توسط یکی از این توالی های فرار مشخص شده است به رمزگذاری سرور واقعی تبدیل می شود. در صورت امکان خطایی گزارش می شود.

همچنین ، نحو فرار یونیکد برای ثابت های رشته ای فقط هنگامی کار می کند که پارامتر پیکربندی استاندارد_ conforming_strings روشن شود. این امر به این دلیل است که در غیر این صورت این نحو می تواند مشتریانی را که بیانیه های SQL را تجزیه می کنند اشتباه بگیرند تا جایی که می تواند منجر به تزریق SQL و مسائل امنیتی مشابه شود. اگر پارامتر خاموش باشد ، این نحو با یک پیام خطا رد می شود.

4. 1. 2. 4. ثابت های رشته ای

در حالی که نحو استاندارد برای مشخص کردن ثابت های رشته ای معمولاً راحت است ، درک این مسئله که رشته مورد نظر شامل بسیاری از نقل قول ها یا پشتی های مجرد است ، دشوار است ، زیرا هر یک از این موارد باید دو برابر شود. برای اجازه دادن به نمایش داده های قابل خواندن در چنین شرایطی ، PostgreSQL راه دیگری به نام "نقل قول دلار" را برای نوشتن ثابت های رشته ای فراهم می کند. ثابت یک دلار به نقل از دلار از یک علامت دلار ($) ، یک "برچسب" اختیاری از شخصیت های صفر یا بیشتر ، علامت دلار دیگر ، یک دنباله دلخواه از شخصیت ها که محتوای رشته ، یک علامت دلار ، همان برچسب را تشکیل می دهد ، تشکیل شده است. این نقل قول دلار و یک علامت دلار را آغاز کرد. به عنوان مثال ، در اینجا دو روش مختلف برای مشخص کردن رشته "اسب دایان" با استفاده از دلار به نقل از دلار وجود دارد:

توجه کنید که در داخل رشته به نقل از دلار ، از نقل قول های منفرد بدون نیاز به فرار می توان استفاده کرد. در واقع ، هیچ شخصیت داخل یک رشته با دلار فروخته نمی شود: محتوای رشته همیشه به معنای واقعی کلمه نوشته شده است. backslashes خاص نیست و علائم دلار نیز وجود ندارد ، مگر اینکه بخشی از دنباله ای باشد که با برچسب باز مطابقت دارد.

با انتخاب برچسب های مختلف در هر سطح لانه سازی ، می توان ثابت های رشته ای را که در آن قرار دارد لانه کنید. این بیشتر در تعاریف عملکرد نوشتن استفاده می شود. مثلا:

در اینجا ، دنباله $ q $ [ t r n v \] $ q $ نمایانگر یک رشته تحت اللفظی دلار است [ t r n v \] ، که وقتی بدنه عملکرد تشخیص داده می شودتوسط PostgreSQL اجرا می شود. اما از آنجا که این دنباله با دلار بیرونی به نقل از Delimiter $ $ مطابقت ندارد ، فقط تا آنجا که به رشته بیرونی مربوط می شود ، شخصیت های دیگری در حالت ثابت هستند.

برچسب ، در صورت وجود ، از یک رشته به فروش دلار ، همان قوانین را به عنوان یک شناسه غیرقابل توصیف دنبال می کند ، به جز اینکه نمی تواند دارای یک علامت دلار باشد. برچسب ها حساس به پرونده هستند ، بنابراین $ برچسب $ محتوای $ برچسب $ صحیح است ، اما $ برچسب $ محتوای $ برچسب $ $ نیست.

یک رشته به نقل از دلار که از یک کلمه کلیدی یا شناسه پیروی می کند ، باید توسط Whitespace از آن جدا شود. در غیر این صورت ، دلار تعیین کننده به عنوان بخشی از شناسه قبلی گرفته می شود.

نقل قول دلار بخشی از استاندارد SQL نیست ، اما اغلب یک روش راحت تر برای نوشتن به معنای واقعی کلمه رشته های پیچیده نسبت به نحو نقل قول یکنواخت است. این امر به ویژه در هنگام نمایندگی ثابت های رشته ای در سایر ثابت ها مفید است ، همانطور که اغلب در تعاریف عملکرد رویه مورد نیاز است. با نحو تک حرکتی ، هر یک از پشتی ها در مثال بالا باید به عنوان چهار پشتی نوشته شود ، که در تجزیه ثابت رشته اصلی به دو پشتی کاهش می یابد ، و سپس به یکی از آنها که ثابت رشته داخلی در طول عملکرد دوباره جدا می شوداجرا.

4. 1. 2. 5. ثبات رشته ای

ثابت های بیت ، بلافاصله قبل از نقل قول (بدون فضای سفید مداخله) ، مانند ثابت های رشته ای معمولی با B (بالا یا پایین) به نظر می رسند ، به عنوان مثال ، B'1001. تنها شخصیت های مجاز در ثابت رشته بیت 0 و 1 هستند.

از طرف دیگر ، ثابت های رشته بیت را می توان در نماد شش ضلعی ، با استفاده از یک X پیشرو (مورد بالا یا پایین) ، به عنوان مثال ، X'1ff "مشخص کرد. این نماد معادل یک رشته بیت با چهار رقم باینری برای هر رقم شش ضلعی است.

هر دو شکل از ثابت بیت می توانند در خطوط به همان روشی که ثابت های رشته معمولی ادامه دارند ، ادامه یابد. نقل قول دلار را نمی توان در یک رشته ثابت استفاده کرد.

4. 1. 2. 6. ثبات عددی

ثابت های عددی در این اشکال کلی پذیرفته می شوند:

جایی که رقم یک یا چند رقم اعشاری است (0 تا 9). در صورت استفاده از یک رقم حداقل باید قبل یا بعد از نقطه اعشاری باشد. حداقل یک رقم در صورت وجود باید از نشانگر نمایشگر (E) پیروی کند. هیچ فضایی یا شخصیت های دیگر تعبیه شده در ثابت وجود ندارد. توجه داشته باشید که هر علامت پیشرو به علاوه یا منهای در واقع بخشی از ثابت محسوب نمی شود. این یک اپراتور است که به ثابت اعمال می شود.

اینها چند نمونه از ثابت های عددی معتبر است:

اگر مقدار آن در عدد صحیح باشد (32 بیت) در ابتدا یک عدد اعداد و اعداد حاوی یک نقطه اعشاری و نه نماینده باشد ، در ابتدا فرض می شود که عدد صحیح باشد. در غیر این صورت فرض می شود اگر مقدار آن در نوع Bigint (64 بیت) باشد ، نوع Bigint باشد. در غیر این صورت از نوع عددی استفاده می شود. ثابت هایی که حاوی نقاط اعشاری و/یا نمایندگان هستند ، همیشه در ابتدا فرض می شوند که از نوع عددی هستند.

نوع داده در ابتدا اختصاص داده شده از ثابت عددی فقط یک نقطه شروع برای الگوریتم های وضوح نوع است. در بیشتر موارد ، بسته به متن ، ثابت به طور خودکار به مناسب ترین نوع اجبار می شود. در صورت لزوم ، می توانید یک مقدار عددی را مجبور کنید که با ریخته گری آن به عنوان یک نوع داده خاص تفسیر شود. به عنوان مثال ، می توانید با نوشتن یک مقدار عددی را به عنوان نوع واقعی (float4) تحت درمان قرار دهید:

اینها در واقع فقط موارد خاصی از نمادهای ریخته گری عمومی است که در ادامه مورد بحث قرار می گیرد.

4. 1. 2. 7. ثابت در انواع دیگر

ثابت از نوع دلخواه با استفاده از هر یک از نمادهای زیر می تواند وارد شود:

متن ثابت String برای نوع به نام نوع به روال تبدیل ورودی منتقل می شود. نتیجه ثابت از نوع مشخص شده است. اگر هیچ ابهام در مورد نوع ثابت وجود نداشته باشد ، می توان بازیگران نوع صریح را حذف کرد (برای مثال ، هنگامی که مستقیماً به یک ستون جدول اختصاص داده می شود) ، در این صورت به طور خودکار اجبار می شود.

ثابت رشته را می توان با استفاده از نماد معمولی SQL یا نقل قول دلار نوشت.

همچنین می توان با استفاده از یک نحو شبیه به عملکرد ، یک اجبار نوع را مشخص کرد:

اما از همه نام ها نمی توان از این طریق استفاده کرد. برای جزئیات بیشتر به بخش 4. 2. 9 مراجعه کنید.

از نحوهای :: ، بازیگران () و عملکرد تماس می توان برای مشخص کردن تبدیل نوع زمان اجرا از عبارات دلخواه استفاده کرد ، همانطور که در بخش 4. 2. 9 بحث شده است. برای جلوگیری از ابهام نحوی ، از نحو نوع "رشته" فقط می توان برای مشخص کردن نوع یک ثابت تحت اللفظی ساده استفاده کرد. محدودیت دیگر در نحو نوع "رشته" این است که برای انواع آرایه کار نمی کند. برای مشخص کردن نوع ثابت آرایه از :: یا بازیگران () استفاده کنید.

بازیگران () نحو مطابق با SQL است. نحو نوع "رشته" یک تعمیم استاندارد است: SQL این نحو را فقط برای چند نوع داده مشخص می کند ، اما PostgreSQL آن را برای همه نوع اجازه می دهد. نحو با :: استفاده تاریخی postgreSQL است ، همانطور که نحو عملکرد تماس.

4. 1. 3. عملگر

یک نام اپراتور دنباله ای از شخصیت های نامگذار ی-1 -1 (63 به طور پیش فرض) از لیست زیر است:

چند محدودیت در نام اپراتور وجود دارد ، با این حال:

- و /* نمی تواند در هر جایی به نام اپراتور ظاهر شود ، زیرا آنها به عنوان شروع یک نظر گرفته می شوند.

یک نام اپراتور چند کاراکتر نمی تواند به + یا - پایان یابد ، مگر اینکه این نام نیز حداقل یکی از این شخصیت ها را شامل شود:

به عنوان مثال ، @- یک نام اپراتور مجاز است ، اما *- اینگونه نیست. این محدودیت به PostgreSQL اجازه می دهد تا بدون نیاز به فاصله بین نشانه ها ، نمایش داده های سازگار با SQL را تجزیه کند.

هنگام کار با نام های اپراتور استاندارد غیر SQL ، برای جلوگیری از ابهام ، معمولاً باید اپراتورهای مجاور را با فضاها جدا کنید. به عنوان مثال ، اگر یک اپراتور پیشوند به نام @ را تعریف کرده اید ، نمی توانید x* @ y را بنویسید. شما باید x** را بنویسید تا اطمینان حاصل کنید که postgresql آن را به عنوان دو نام اپراتور و نه یکی می خواند.

4. 1. 4. شخصیت های خاص

برخی از شخصیت هایی که الفبایی نیستند معنای خاصی دارند که با اپراتور بودن متفاوت است. جزئیات مربوط به استفاده را می توان در محلی که عنصر نحوی مربوطه در آن شرح داده شده است ، یافت. این بخش فقط برای مشاوره در مورد وجود و خلاصه کردن اهداف این شخصیت ها وجود دارد.

یک علامت دلار ($) و به دنبال آن رقم ها برای نشان دادن یک پارامتر موقعیتی در بدنه تعریف عملکرد یا یک بیانیه آماده استفاده می شود. در زمینه های دیگر ، علامت دلار می تواند بخشی از شناسه یا یک رشته ثابت به دلار باشد.

پرانتز (()) معنای معمول خود را برای گروه بندی بیان و اجرای تقدم دارد. در بعضی موارد پرانتز به عنوان بخشی از نحو ثابت یک دستور SQL خاص مورد نیاز است.

براکت ([]) برای انتخاب عناصر یک آرایه استفاده می شود. برای اطلاعات بیشتر در مورد آرایه ها به بخش 8. 15 مراجعه کنید.

کاما (،) در برخی از سازه های نحوی برای جدا کردن عناصر یک لیست استفاده می شود.

نیمه رنگ (؛) یک دستور SQL را خاتمه می دهد. نمی تواند در هیچ کجا در یک دستور ظاهر شود ، به جز در یک رشته ثابت یا شناسه نقل شده.

Colon (:) برای انتخاب "برش" از آرایه ها استفاده می شود.(به بخش 8. 15 مراجعه کنید.) در برخی از گویش های SQL (مانند SQL تعبیه شده) ، از روده بزرگ برای پیشوند نام های متغیر استفاده می شود.

ستاره ( *) در برخی زمینه ها برای نشان دادن تمام زمینه های یک ردیف جدول یا مقدار کامپوزیت استفاده می شود. همچنین در صورت استفاده به عنوان استدلال یک عملکرد کل ، معنای خاصی دارد ، یعنی اینکه کل به هیچ پارامتر صریح احتیاج ندارد.

دوره (.) در ثابت های عددی و برای جدا کردن طرح ، جدول و نام ستون استفاده می شود.

4. 1. 5. نظرات

نظر دنباله ای از شخصیت ها است که با دو برابر دوتایی شروع می شود و تا انتهای خط گسترش می یابد ، به عنوان مثال:

از طرف دیگر ، می توان از نظرات بلوک به سبک C استفاده کرد:

جایی که نظر با / * شروع می شود و به وقوع تطبیق * / /. این نظرات بلوک ، همانطور که در استاندارد SQL مشخص شده است اما برخلاف C ، لانه می کند ، به طوری که می توان بلوک های بزرگتر کد را که ممکن است حاوی نظرات بلوک موجود باشد ، اظهار نظر کند.

یک نظر از جریان ورودی قبل از تجزیه و تحلیل نحو بیشتر حذف می شود و به طور مؤثر توسط فضای سفید جایگزین می شود.

4. 1. 6. تقدم اپراتور

جدول 4. 2 تقدم و همبستگی اپراتورها در PostgresQL را نشان می دهد. بیشتر اپراتورها دارای همان تقدم هستند و از نظر چپ نیز هستند. تقدم و همبستگی اپراتورها به سختی به تجزیه کننده می پردازد. اگر می خواهید یک عبارت با چندین اپراتور به روش دیگری تجزیه شود ، به پرانتز اضافه کنید.

جدول 4. 2. برتری اپراتور (بالاترین تا پایین ترین)

عملگر/عنصروابسته بودنشرح
.ترک کردجداکننده جدول/نام ستون
::ترک کردtypecast postgresq l-style
[ ]ترک کردانتخاب عنصر آرایه
+ -درستUnary Plus ، unary minus
^ترک کردمفهوم
* / %ترک کردضرب ، تقسیم ، مدول
+ -ترک کردعلاوه بر این ، تفریق
(هر اپراتور دیگر)ترک کردتمام اپراتورهای دیگر بومی و تعریف شده توسط کاربر
بین Ilike مشابهمهار محدوده ، عضویت در تنظیم ، تطبیق رشته
< >= = <>اپراتورهای مقایسه
isnull notnull استدرست است ، نادرست است ، تهی است ، از و غیره متمایز است.
نهدرستنفی منطقی
وتترک کردپیوستگی منطقی
ORترک کردتفکیک منطقی

توجه داشته باشید که قوانین اولویت اپراتور همچنین در مورد اپراتورهای تعریف شده توسط کاربر که دارای نام های مشابه اپراتورهای داخلی است که در بالا ذکر شد ، اعمال می شود. به عنوان مثال ، اگر یک اپراتور " +" را برای برخی از نوع داده های سفارشی تعریف کنید ، همان برتری با اپراتور داخلی " +" خواهد بود ، مهم نیست که شما چه کاری انجام می دهد.

هنگامی که از یک نام اپراتور با صلاحیت شمای در نحو اپراتور استفاده می شود ، به عنوان مثال در:

ساختار اپراتور در نظر گرفته شده است که پیش فرض پیش فرض در جدول 4. 2 برای "هر اپراتور دیگر" نشان داده شده است. این درست است که کدام اپراتور خاص در داخل اپراتور ظاهر می شود ().

نسخه های PostgreSQL قبل از 9. 5 از قوانین مقدماتی کمی متفاوت استفاده می شود. به طور خاص ، = و<>قبلاً به عنوان اپراتورهای عمومی مورد استفاده قرار می گرفت. آزمایشات IS برای اولویت بالاتری استفاده می شود. و نه بین سازه های مرتبط با آن متناقض عمل می کردند ، در بعضی موارد به دلیل تقدم به جای بین نیست. این قوانین برای رعایت بهتر با استاندارد SQL و برای کاهش سردرگمی از درمان متناقض سازه های منطقی معادل تغییر یافته است. در بیشتر موارد ، این تغییرات منجر به تغییر رفتاری یا شاید در شکست های "چنین اپراتور" نمی شود که با افزودن پرانتز قابل حل است. با این حال موارد گوشه ای وجود دارد که در آن یک پرس و جو ممکن است رفتار را بدون هیچ گونه خطای تجزیه و تحلیل تغییر دهد.

سعادتUpبعد
فصل 4. نحو SQLخانه4. 2بیان ارزش

تصحیح

اگر در اسناد و مدارک صحیح مشاهده می کنید ، تجربه شما را با ویژگی خاص مطابقت ندارد یا نیاز به توضیح بیشتر دارد ، لطفاً از این فرم برای گزارش یک موضوع مستند استفاده کنید.

کتاب آموزش بورس...
ما را در سایت کتاب آموزش بورس دنبال می کنید

برچسب : نویسنده : ژیلا توفیقی بازدید : 71 تاريخ : دوشنبه 29 اسفند 1401 ساعت: 22:47