ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql

ΠžΡΠ½ΠΎΠ²Ρ‹ PL SQL: структура, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, записи

ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql

PL/SQL (Programming Language for SQL) β€” язык программирования ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Oracle, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ срСдства для слоТной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим основы PL/SQL. Начнём с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… Π΅Π΄ΠΈΠ½ΠΈΡ†.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ PL/SQL

К ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ Π΅Π΄ΠΈΠ½ΠΈΡ†Π°ΠΌ Π² PL/SQL относят: 1. ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ β€” ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΡƒΡŽ спСцифичСскоС дСйствиС (CREATE PROCEDURE); 2. Π€ΡƒΠ½ΠΊΡ†ΠΈΡŽ β€” ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰ΡƒΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (CREATE FUNCTION). 3. PL/SQL-ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π‘Π”, Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ логичСски связанныС Ρ‚ΠΈΠΏΡ‹, ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ PL/SQL. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ состоят ΠΈΠ· 2 частСй β€” Ρ‚Π΅Π»Π° ΠΈ спСцификации. БпСцификация прСдставляСт собой интСрфСйс с вашими прилоТСниями (ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ Ρ‚ΠΈΠΏΡ‹, константы, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, курсоры β€” всё, Ρ‡Ρ‚ΠΎ доступно для использования Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅). Вторая Ρ‡Π°ΡΡ‚ΡŒ β€” это Ρ‚Π΅Π»ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ курсоры, рСализуя Ρ‚Π΅ΠΌ самым ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΏΠ°ΠΊΠ΅Ρ‚Π°. 4. ДинамичСский SQL: a. Native Dynamic SQL (NDS); b. DBMS_SQL. 5. ΠžΠΏΡ†ΠΈΠΈ компилятора. 6. Π’Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹ β€” Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ особого Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡŽΠ·Π΅Ρ€ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ нСпосрСдствСнно, Ρ‚. ΠΊ. ΠΈΡ… исполнСниС обусловлСно дСйствиями ΠΏΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π’Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹ Π±Ρ‹Π²Π°ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅: BEFORE INSERT, BEFORE UPDATE, AFTER INSERT ΠΈ ΠΏΡ€. 7. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ зависимостями. 8. Π₯ΠΈΠ½Ρ‚Ρ‹ Π»ΠΈΠ±ΠΎ подсказки (Oracle Hints) β€” срСдства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ явноС влияниС Π½Π° ΠΏΠ»Π°Π½ запроса. Подсказки ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΈ Ρ†Π΅Π»ΠΈ, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ»Π°Π½ исполнСния запроса, Π² Ρ‚ΠΎΠΌ числС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ порядка соСдинСния Ρ‚Π°Π±Π»ΠΈΡ†, индСкса для доступа ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π΅).

Блочная структура PL/SQL

Π’ Π±Π»ΠΎΠΊΠ΅ PL/SQL ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ Π΄ΠΎ 4-Ρ… Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ², Π½ΠΎ лишь ΠΎΠ΄ΠΈΠ½ считаСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. 1. Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ. ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚ΡΡ лишь Π² ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠ°Ρ…, слуТит для опрСдСлСния способа Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π»ΠΈΠ±ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°. 2. Π Π°Π·Π΄Π΅Π» объявлСний. Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ описания ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² ΠΈ курсоров. 3. Π Π°Π·Π΄Π΅Π» ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Π‘Π»ΡƒΠΆΠΈΡ‚ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ (ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΈ ошибок). 4. Π˜ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π». Π Π΅Ρ‡ΡŒ ΠΈΠ΄Ρ‘Ρ‚ ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ядром PL/SQL Π² процСссС Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ это ΠžΠ‘Π―Π—ΠΠ’Π•Π›Π¬ΠΠ«Π™ Ρ€Π°Π·Π΄Π΅Π».

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° структуру PL/SQL-Π±Π»ΠΎΠΊΠ° для ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹:

ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ β€” это ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, содСрТащСй всС 4 Ρ€Π°Π·Π΄Π΅Π»Π°:

ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql

Π₯ранимая ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°

Под Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ инструкций, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ написаны Π½Π° PL/SQL. Π’Ρ‹Π·ΠΎΠ² Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ обСспСчиваСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ содСрТащихся Π² этой ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ инструкций. Π‘Π°ΠΌΠ° ΠΎΠ½Π° хранится Π² Π‘Π”, поэтому ΠΈ считаСтся Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠΉ. Бостоит ΠΈΠ· Ρ‚Π΅Π»Π° ΠΈ спСцификации.

БпСцификация содСрТит имя ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ описаниС Π΅Ρ‘ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΈ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Π»ΠΈΠ±ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ. Когда ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки Π»ΠΈΠ±ΠΎ ΠΈΠ½Ρ‹Π΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ значСния Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ фактичСскими ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ/фактичСскими Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ спСцификации:

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°ΠΌΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° с 3-мя Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ. IN послС ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π² процСссС Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ· Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. OUT Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π² цСлях Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° значСния Π² Ρ‚Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½Π° Π²Ρ‹Π·Ρ‹Π²Π°Π»Π°ΡΡŒ. ΠšΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡ IN OUT Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² качСствС ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ значСния ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² цСлях Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° значСния.

Π§Ρ‚ΠΎ касаСтся Ρ‚Π΅Π»Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, Ρ‚ΠΎ это Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° PL/SQL.

Π₯Ρ€Π°Π½ΠΈΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Ѐункция PL/SQL Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ PL/SQL: Ρƒ Π½Π΅Ρ‘ Ρ‚ΠΎΠΆΠ΅ Π΅ΡΡ‚ΡŒ Ρ‚Π΅Π»ΠΎ ΠΈ спСцификация. ОсновноС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ β€” функция Π½ΡƒΠΆΠ½Π° для Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° значСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π² Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ SQL.

Π’Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹

Π’Ρ€ΠΈΠ³Π³Π΅Ρ€ΠΎΠΌ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ PL/SQL, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡƒΡŽ автоматичСски, ΠΊΠΎΠ³Π΄Π° происходит Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ событиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ называСтся Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π½Ρ‹ΠΌ событиСм.

К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ Π² процСссС выполнСния Π½Π°Π΄ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ UPDATE, INSERT Π»ΠΈΠ±ΠΎ DELETE; Π²ΠΎ врСмя Π²Ρ‹Π΄Π°Ρ‡ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ DDL; Π²ΠΎ врСмя Π²Ρ…ΠΎΠ΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² систСму Π»ΠΈΠ±ΠΎ Π΅Π³ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π°; Π²ΠΎ врСмя запуска Π»ΠΈΠ±ΠΎ остановки Π‘Π”; Π²ΠΎ врСмя возникновСния ошибок.

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ 3 различия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°ΠΌΠΈ PL/SQL ΠΈ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π°ΠΌΠΈ: 1. Π’Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΈΠ· ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Они Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ автоматичСски ΠΊΠ°ΠΊ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ событиС. 2. Π£ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ΠΎΠ² Π½Π΅Ρ‚ списка ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². 3. Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π° ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² PL/SQL

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹. Они способны ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Ρ€Π°Π·Π½Ρ‹Ρ… Π²ΠΈΠ΄ΠΎΠ². Π‘ ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒ эти Π΄Π°Π½Π½Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°, ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π°. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, числа Π² PL/SQL хранятся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° NUMBER, тСкст β€” Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… CHAR Π»ΠΈΠ±ΠΎ VARCHAR2. Π§Ρ‚ΠΎ касаСтся синтаксиса объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‚ΠΎ Π² PL/SQL ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΡŽΠ±ΡƒΡŽ ΠΈΠ· ниТСпСрСчислСнных Ρ„ΠΎΡ€ΠΌ записи:

Π—Π΄Π΅ΡΡŒ имя_ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ β€” любой ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ PL/SQL ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€. Π’Π°ΠΊΠΎΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½: 1. Π˜ΠΌΠ΅Ρ‚ΡŒ Π² Π΄Π»ΠΈΠ½Ρƒ Π½Π΅ большС 30 символов, ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² записи ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² ΠΈ Π·Π½Π°ΠΊΠΎΠ² табуляции. 2. ΠΠ°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с Π±ΡƒΠΊΠ²Ρ‹. 3. Π‘ΠΎΡΡ‚ΠΎΡΡ‚ΡŒ лишь ΠΈΠ· Π±ΡƒΠΊΠ², Ρ†ΠΈΡ„Ρ€ 0-9, символа подчСркивания, Π·Π½Π°ΠΊΠ° Π΄ΠΎΠ»Π»Π°Ρ€Π° ΠΈ Π·Π½Π°ΠΊΠ° Ρ„ΡƒΠ½Ρ‚Π°. 4. НС ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ словами SQL ΠΈ PL/SQL, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΠΈ спСцзначСниС. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ записи для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ β€” слово BEGIN, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰Π΅Π΅ Π½Π°Ρ‡Π°Π»ΠΎ выполняСмой сСкции основного PL/SQL-Π±Π»ΠΎΠΊΠ°.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅, это Ρ‚ΠΈΠΏ_Π΄Π°Π½Π½Ρ‹Ρ… β€” любой допустимый Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Π² SQL Π»ΠΈΠ±ΠΎ PL/SQL. Π—Π΄Π΅ΡΡŒ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ NOT NULL трСбуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ пСрСмСнная ΠΈΠΌΠ΅Π»Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. И Ссли ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΡƒΠΊΠ°Π·Π°Π½, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

ОбъявляСм константы PL/SQL

Π—Π°ΠΏΠΈΡΡŒ объявлСния константы выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅, скаТСм, ΠΎΡ‚ Ρ‚Π΅Ρ… ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, константам ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ нСльзя Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ всСго срока ΠΆΠΈΠ·Π½ΠΈ константы. ΠŸΡ€ΠΈ этом константы вСсьма ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠΈ бСзопасности ΠΈ дисциплины Π²ΠΎ врСмя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½ΠΎΠΉ слоТности. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Ссли Π²Ρ‹ ΠΆΠ΅Π»Π°Π΅Ρ‚Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ PL/SQL-ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ Π΅ΠΉ, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΈΡ… константами. А Ссли ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° всё-Ρ‚Π°ΠΊΠΈ попытаСтся ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эти Π΄Π°Π½Π½Ρ‹Π΅, PL/SQL Π²ΠΎΠ·Π±ΡƒΠ΄ΠΈΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

Записи Π² PL/SQL

Record PL/SQL

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ спСцификатор записи Record Π² PL/SQL с синтаксисом.

Record (запись) β€” это Π³Ρ€ΡƒΠΏΠΏΠ° связанных элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хранятся Π² полях, ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ каТдая ΠΈΠΌΠ΅Π΅Ρ‚ своё имя ΠΈ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈ этом ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Record ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΡΠΏΠΎΡΠΎΠ±Π½ΡƒΡŽ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ строку Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π»ΠΈΠ±ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ столбцы ΠΈΠ· строки Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΈ объявляСм Record Π² PL/SQL

ΠžΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ запись ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ %ROWTYPE, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ строку Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π‘Π” Π±Π΅Π· нСпосрСдствСнного пСрСчислСния всСх столбцов. ΠŸΡ€ΠΈ этом ваш ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°ΠΆΠ΅ послС добавлСния Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ столбцов. Но Ссли Π²Ρ‹ ΠΆΠ΅Π»Π°Π΅Ρ‚Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ подмноТСство столбцов Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π»ΠΈΠ±ΠΎ столбцы ΠΈΠ· Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ VIEW Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ CURSOR Π² цСлях Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… столбцов ΠΈ Π»ΡŽΠ±Ρ‹Ρ… Π½ΡƒΠΆΠ½Ρ‹Ρ… объСдинСний, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ %ROWTYPE ΠΊ CURSOR Π»ΠΈΠ±ΠΎ VIEW.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° синтаксис объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² PL/SQL ΠΈ опрСдСлСния Ρ‚ΠΈΠΏΠ° Record:

ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹: 1) type_rec_name – имя ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Record; 2) var_rec – имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Record-Ρ‚ΠΈΠΏΠ°; 3) field_1, field_2,… field_n – поля Record-Ρ‚ΠΈΠΏΠ°; 4) datatype – Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… для ΠΏΠΎΠ»Π΅ΠΉ Record-Ρ‚ΠΈΠΏΠ°. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ любой ΠΈΠ· списка:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠžΠ±Π·ΠΎΡ€ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… PL/SQL

ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sqlΠŸΡ€ΠΈ объявлСнии ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ константы Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Π΅Π΅ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… (PL/SQL, Π·Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ, относится ΠΊ языкам со статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ β€” см. Π½ΠΈΠΆΠ΅ Π²Ρ€Π΅Π·ΠΊΡƒ). Π’ PL/SQL ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ Π½Π°Π±ΠΎΡ€ скалярных ΠΈ составных Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…; ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…. МногиС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… PL/SQL (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, BOOLEAN ΠΈ NATURAL ) Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ столбцами Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ Π² ΠΊΠΎΠ΄Π΅ PL/SQL эти Ρ‚ΠΈΠΏΡ‹ вСсьма ΠΏΠΎΠ»Π΅Π·Π½Ρ‹.

PL/SQL ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ распространСнный Β«Π΄ΠΆΠ΅Π½Ρ‚Π»ΡŒΠΌΠ΅Π½ΡΠΊΠΈΠΉ Π½Π°Π±ΠΎΡ€Β» Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊ-ΠΆΠ΅ ряд Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ². Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ приводится ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ….

ЧВО Π’ΠΠšΠžΠ• Β«Π‘Π’ΠΠ’Π˜Π§Π•Π‘ΠšΠΠ― Π’Π˜ΠŸΠ˜Π—ΠΠ¦Π˜Π― Β»?

БтатичСской (ΠΈΠ»ΠΈ сильной) Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ называСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ² Π²ΠΎ врСмя компиляции (Π° Π½Π΅ Π½Π° стадии выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹). К числу языков программирования, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… ΡΠΈΠ»ΡŒΠ½ΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ, относятся PL/SQL, Ada, C ΠΈ Pascal. Π―Π·Ρ‹ΠΊΠΈ с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ (Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ JavaScript, Perl ΠΈΠ»ΠΈ Ruby) Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ Ρ‚ΠΈΠΏΠΎΠ² Π²ΠΎ врСмя выполнСния. БтатичСская типизация позволяСт Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ ошибки Π²ΠΎ врСмя компиляции, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠΌ статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ являСтся ΠΈ ускорСниС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ компилятор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π½Π°Π΅Ρ‚ Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄Π±ΠΈΡ€Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ эффСктивныС ассСмблСрныС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ высокооптимизированный ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ДинамичСская типизация Ρ‚ΠΎΠΆΠ΅ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ своими прСимущСствами: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, мСтаклассы ΠΈ интроспСкция ΠΏΡ€ΠΎΡ‰Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Π½Π° Π±Π°Π·Π΅ динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π‘ΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Для ΠΎΡ‡Π΅Π½ΡŒ Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… строк Π² PL/SQL прСдусмотрСны Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… CLOB (Character Large Object) ΠΈ NCLOB (NLS Character Large Object). По сообраТСниям совмСстимости PL/SQL Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… LONG. Π­Ρ‚ΠΈ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ большиС ΠΎΠ±ΡŠΠ΅ΠΌΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…; Ρ‚Π°ΠΊ, Π² Oracle11g Ρ‚ΠΈΠΏ LOB способСн Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄ΠΎ 128 Ρ‚Π΅Ρ€Π°Π±Π°ΠΉΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

ИспользованиС Ρ‚ΠΈΠΏΠ° LONG ограничиваСтся мноТСством ΠΏΡ€Π°Π²ΠΈΠ». ΠœΡ‹ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ Π² Oracle8 ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… вСрсиях.

ЧисловыС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Π’ PL/SQL ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ вСщСствСнныС, Ρ‚Π°ΠΊ ΠΈ цСлочислСнныС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ΠΈΠΏ NUMBER Π΄Π°Π²Π½ΠΎ Π±Ρ‹Π» основным Ρ‚ΠΈΠΏΠΎΠΌ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с числовыми Π΄Π°Π½Π½Ρ‹ΠΌΠΈ; ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ†Π΅Π»Ρ‹ΠΌΠΈ ΠΈ вСщСствСнными Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΊΠ°ΠΊ с фиксированной, Ρ‚Π°ΠΊ ΠΈ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠ³ΠΎ объявлСния NUMBER :

Из-Π·Π° своСй Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ дСсятичной ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρ‹ Ρ‚ΠΈΠΏ NUMBER особСнно ΡƒΠ΄ΠΎΠ±Π΅Π½ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹ΠΌΠΈ суммами. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ прСдставлСния, Π΅ΠΌΡƒ Π½Π΅ присущи ошибки округлСния. НапримСр, Ссли ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Π½Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0.95, ΠΏΠΎΠ·Π΄Π½Π΅Π΅ Π²Ρ‹ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ эту Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ, Π° Π½Π΅ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½Π½ΡƒΡŽ (скаТСм, 0.949999968).

ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql

Π”Π°Ρ‚Π°, врСмя ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹

ЛогичСскиС Π΄Π°Π½Π½Ρ‹Π΅

ЛогичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ понятный, Π»Π΅Π³ΠΊΠΎ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄ Π΄Π°ΠΆΠ΅ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ содСрТит ΠΎΡ‡Π΅Π½ΡŒ слоТныС логичСскиС выраТСния. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ объявлСния логичСской ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с присваиваниСм Π΅ΠΉ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ:

Π”Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅

Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ROWID ΠΈ UROWID

Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… REF CURSOR

Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… REF CURSOR позволяСт ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ курсорныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ со статичСскими ΠΈ динамичСскими SQL-ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ гибкости ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π’ΠΈΠΏ REF CURSOR сущСствуСт Π² Π΄Π²ΡƒΡ… Ρ„ΠΎΡ€ΠΌΠ°Ρ…: сильной ΠΈ слабой. PL/SQL относится ΠΊ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ языков со статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, Π° слабый Ρ‚ΠΈΠΏ REF CURSOR являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· нСмногочислСнных конструкций с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ объявлСния сильной Ρ„ΠΎΡ€ΠΌΡ‹ REF CURSOR курсорная пСрСмСнная связываСтся с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ структурой записи с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° %ROWTYPE :

Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ

Π’ Oracle9i появилась встроСнная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ряда Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΈ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, связанных с Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ΠΎΠΌ, Π² частности XML (eXtensible Markup Language) ΠΈ URI (Universal Resource Identifier). Π’ Oracle ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ спСциализированныС Ρ‚ΠΈΠΏΡ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ XML ΠΈ URI, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ класс ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² URI ( DBUri-REF ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для доступа ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² Oracle появился Π½ΠΎΠ²Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… URI ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π½ΠΈΠΌ ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… Β«AnyΒ»

Π­Ρ‚Π° Π³Ρ€ΡƒΠΏΠΏΠ° Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, появившаяся Π² Oracle9i, Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ отличаСтся ΠΎΡ‚ Π»ΡŽΠ±Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Oracle. Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… Any ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ динамичСски ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ описания Ρ‚ΠΈΠΏΠΎΠ², экзСмпляры Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π½Π°Π±ΠΎΡ€Ρ‹ экзСмпляров Π΄Π°Π½Π½Ρ‹Ρ… любого Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° SQL. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² (ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… для Π½ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²) ΠΌΠΎΠΆΠ½ΠΎ, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅, Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ объявлСнию Ρ‚ΠΈΠΏΠ° этой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹!

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Из встроСнных Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Oracle ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ слоТности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ с большой Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ структуру ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… систСмах. Π’ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Oracle ΠΎΠ½ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π΅Ρ‰Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ абстрактных Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ….

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠžΡΠ½ΠΎΠ²Ρ‹ языка PL/SQL

ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sqlΠ₯отя язык SQL ΠΈ являСтся Π»Π΅Π³ΠΊΠΈΠΌ Π² ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΈ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ массой ΠΌΠΎΡ‰Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… возмоТностСй, ΠΎΠ½ Π½Π΅ позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹Π΅ конструкции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Π² языках Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ поколСния Π²Ρ€ΠΎΠ΄Π΅ C. Π―Π·Ρ‹ΠΊ PL/SQL являСтся собствСнным Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ языка SQL ΠΎΡ‚ Oracle ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠ³ΠΎ языка программирования. Одно ΠΈΠ· Π³Π»Π°Π²Π½Ρ‹Ρ… Π΅Π³ΠΎ прСимущСств состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, ΠΈ Ρ‚Π΅ΠΌ самым ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования ΠΊΠΎΠ΄Π° ΠΈ Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ Π±Π»ΠΎΠΊ PL/SQL

Π‘Π»ΠΎΠΊΠΎΠΌ Π² PL/SQL называСтся исполняСмая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. Π‘Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° PL/SQL, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, инкапсулируСтся ΠΎΠ½ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ задаСтся Π² Π²ΠΈΠ΄Π΅ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Π² свободной Ρ„ΠΎΡ€ΠΌΠ΅, состоит ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… структур, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π° ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ простого Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π° PL/SQL:

ОбъявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² PL/SQL

Π’ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ DECLARE ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρ‚Π°ΠΊ ΠΈ константы. ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π΅Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Π² PL/SQL ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ встроСнного Ρ‚ΠΈΠΏΠ°, Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ DATE, NUMBER, VARCHAR2 ΠΈΠ»ΠΈ CHAR, Ρ‚Π°ΠΊ ΠΈ составного Π²Ρ€ΠΎΠ΄Π΅ VARRAY. Помимо этого, Π² PL/SQL Π΅Ρ‰Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΊ BINARY_INTEGER ΠΈ BOOLEAN.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² PL/SQL:

Помимо ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΈ константы, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

Π•Ρ‰Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ %TYPE ΠΈ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ объявлСнии ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‡Ρ‚ΠΎ Π΅Π΅ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ столбца Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹:

ΠŸΠΎΡΡ€Π΅Π΄ΡΡ‚Π²ΠΎΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° %ROWTYPE ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… записи (строки) Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ запись DeptRecord Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ всС Ρ‚Π΅ ΠΆΠ΅ столбцы, Ρ‡Ρ‚ΠΎ ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π° department, Π° Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π΄Π»ΠΈΠ½Π° этих столбцов Π² Π½Π΅ΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎ:

НаписаниС исполняСмых ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² PL/SQL

ПослС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° BEGIN ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ всС свои ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹Π΅ SQL-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹. Π’Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ эти ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ SQL. ΠŸΡ€ΠΈ использовании ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² SELECT ΠΈ INSERT Π² PL/SQL, ΠΏΡ€Π°Π²Π΄Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΎΠ± особСнностях, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ….

ИспользованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° SELECT Π² PL/SQL

ΠŸΡ€ΠΈ использовании ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° SELECT Π² PL/SQL Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌΡ‹Π΅ значСния Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

ИспользованиС DML-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² PL/SQL

Π›ΡŽΠ±Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ INSERT, DELETE ΠΈΠ»ΠΈ UPDATE Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² PL/SQL Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ SQL. Однако Π² PL/SQL послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ COMMIT, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок

Π’ PL/SQL любая ошибка ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ называСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ (exception). Π’ PL/SQL Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ΅-ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ ошибки, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ допускаСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈ свои собствСнныС. ΠŸΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ любой ошибки инициируСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ PL/SQL. Π’ случаС опрСдСлСния своих собствСнных ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Ρ… ситуаций Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π·Π° счСт примСнСния ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° RAISE.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° RAISE для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ:

Π£ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ структуры Π² PL/SQL

Π’ PL/SQL прСдлагаСтся нСсколько Π²ΠΈΠ΄ΠΎΠ² ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… структур (control structures), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ условноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ². ВсС ΠΎΠ½ΠΈ ΠΊΡ€Π°Ρ‚ΠΊΠΎ описаны Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… ΠΌΠΎΠ΅Π³ΠΎ Π±Π»ΠΎΠ³Π°.

УсловноС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅

Π“Π»Π°Π²Π½ΠΎΠΉ Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒΡŽ условной ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ структуры Π² PL/SQL являСтся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ IF, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обСспСчиваСт условноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ². Он ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ„ΠΎΡ€ΠΌ: IF-THEN, IF-THEN-ELSE ΠΈ IF-THEN-ELSEIF. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ простого ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° IF-THEN-ELSEIF:

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ² Π² PL/SQL

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ² Π² PL/SQL ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π»ΠΈΠ±ΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ количСство Ρ€Π°Π·, Π»ΠΈΠ±ΠΎ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ условиС Π½Π΅ станСт истинным ΠΈΠ»ΠΈ Π»ΠΎΠΆΠ½Ρ‹ΠΌ. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ основныС Π²ΠΈΠ΄Ρ‹ этих конструкций.

ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ Ρ†ΠΈΠΊΠ»

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ простого Ρ†ΠΈΠΊΠ»Π° ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π½Π°Π±ΠΎΡ€Π° SQL-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ словами LOOP ΠΈ END LOOP. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ EXIT Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ†ΠΈΠΊΠ». ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ простого Ρ†ΠΈΠΊΠ»Π° примСняСтся Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΎΡ‡Π½ΠΎ нСизвСстно, сколько Ρ€Π°Π· Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ†ΠΈΠΊΠ». Π’ случаС Π΅Π΅ примСнСния Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° Ρ†ΠΈΠΊΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒΡΡ, принимаСтся Π½Π° основании содСрТащСйся ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ LOOP ΠΈ END LOOP Π»ΠΎΠ³ΠΈΠΊΠΈ.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ†ΠΈΠΊΠ» Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ quality_grade Π½Π΅ достигнСт 6:

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ простой Π²ΠΈΠ΄ Ρ†ΠΈΠΊΠ»Π° позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ конструкция LOOP. EXIT. WHEN, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ†ΠΈΠΊΠ»Π° рСгулируСтся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ WHEN. Π’Π½ΡƒΡ‚Ρ€ΠΈ WHEN указываСтся условиС, ΠΈ ΠΊΠΎΠ³Π΄Π° это условиС становится истинным, Ρ†ΠΈΠΊΠ» Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ. НиТС ΠΏΠΎΠΊΠ°Π·Π°Π½ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π¦ΠΈΠΊΠ» WHILE

Π¦ΠΈΠΊΠ» WHILE ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ условиС остаСтся истинным. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ условиС вычисляСтся Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Ρ†ΠΈΠΊΠ»Π°, ΠΈ вычисляСтся ΠΎΠ½ΠΎ всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ LOOP ΠΈ END LOOP. Когда условиС пСрСстаСт Π±Ρ‹Ρ‚ΡŒ истинным, происходит Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π°. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ†ΠΈΠΊΠ»Π° WHILE:

Π¦ΠΈΠΊΠ» FOR

Π¦ΠΈΠΊΠ» FOR примСняСтся Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° трСбуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ выполнялся ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ количСство Ρ€Π°Π·. Он ΠΈΠΌΠΈΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ классичСский Ρ†ΠΈΠΊΠ» do, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сущСствуСт Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ языков программирования. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ†ΠΈΠΊΠ»Π° FOR:

Записи Π² PL/SQL

Записи (records) Π² PL/SQL ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ взаимосвязанныС Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎ Ρ†Π΅Π»ΠΎΠ΅. Они ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ поля, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ROW%TYPE ΠΈ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ записью столбцы ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² качСствС шаблона курсора, Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ свои собствСнныС записи. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ записи:

Для ссылки Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ записи примСняСтся Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΠΎΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

ИспользованиС курсоров

ΠšΡƒΡ€ΡΠΎΡ€ΠΎΠΌ (cursor) Π² Oracle называСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π² памяти, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ содСрТится Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π½Π°Π±ΠΎΡ€ SQL-запроса, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ содСрТащиСся Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ Π½Π°Π±ΠΎΡ€Π΅ строки. ΠšΡƒΡ€ΡΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Oracle ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ DML-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ нСявными, Π° курсоры, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ β€” явными.

НСявныС курсоры

НСявныС курсоры автоматичСски ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Oracle всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π² ΠΊΠΎΠ΄Π΅ PL/SQL ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ SELECT. Они ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ лишь Π² Ρ‚Π΅Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΎΠ΄Π½Ρƒ строку. Π’ случаС Ссли SQL-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ строки, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒΡΡ сообщСниС ΠΎΠ± ошибкС.

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ Π±Π»ΠΎΠΊΠ΅ ΠΊΠΎΠ΄Π° PL/SQL ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ SELECT, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, прСдусматриваСт ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ нСявного курсора:

Π―Π²Π½Ρ‹Π΅ курсоры

Π―Π²Π½Ρ‹Π΅ курсоры ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ прилоТСния ΠΈ ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Π½Π°Π±ΠΎΡ€ΠΎΠΌ строк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Они ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ всСгда, ΠΊΠΎΠ³Π΄Π° извСстно, Ρ‡Ρ‚ΠΎ SQL-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ строки. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ явный курсор Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ всСгда ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Π² Π½Π°Ρ‡Π°Π»Π΅ Π±Π»ΠΎΠΊΠ° PL/SQL Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π° DECLARE, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ нСявного курсора, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π² ΠΊΠΎΠ΄Π΅.

ПослС объявлСния явного курсора ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ этапы ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π’ листингС А.4 ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ создания курсора ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π΅Π³ΠΎ использования Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°.

Атрибуты курсоров

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π² листингС А.4, для указания Ρ‚ΠΎΠ³ΠΎ, ΠΊΠΎΠ³Π΄Π° Ρ†ΠΈΠΊΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒΡΡ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ курсора %NOTFOUND. Атрибуты курсоров ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с явными курсорами. НаиболСС Π²Π°ΠΆΠ½Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… пСрСчислСны Π½ΠΈΠΆΠ΅.

ΠšΡƒΡ€ΡΠΎΡ€Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» FOR

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈ использовании явных курсоров трСбуСтся ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ курсор, ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΏΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ курсор. ΠšΡƒΡ€ΡΠΎΡ€Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» FOR позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ эти ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΏΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΡŽ, ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΡŽ ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΡŽ автоматичСски, Ρ‡Π΅ΠΌ ΠΎΡ‡Π΅Π½ΡŒ сильно ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Π΄Π΅Π»ΠΎ. Π’ листингС А.5 ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ примСнСния конструкции курсорного Ρ†ΠΈΠΊΠ»Π° FOR.

ΠšΡƒΡ€ΡΠΎΡ€Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

ΠšΡƒΡ€ΡΠΎΡ€Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ строку Π² многострочном Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ Π½Π°Π±ΠΎΡ€Π΅. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ курсора, ΠΎΠ΄Π½Π°ΠΊΠΎ, курсорная пСрСмСнная являСтся динамичСской, Ρ‡Ρ‚ΠΎ позволяСт ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ Π΅ΠΉ Π½ΠΎΠ²Ρ‹Π΅ значСния ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΅Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°ΠΌΠΈ ΠΈ функциям. Π‘ΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ курсорныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² PL/SQL ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

Π‘Π½Π°Ρ‡Π°Π»Π° опрСдСляСтся Ρ‚ΠΈΠΏ REF CURSOR, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ сами курсорныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° EmpCurType Π² Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ ΠΊΠΎΠ΄Π° PL/SQL Π»ΠΈΠ±ΠΎ Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ (ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ):

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π² PL/SQL ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ для выполнСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… DML-ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ простой ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Oracle:

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² PL/SQL Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

ΠŸΠ°ΠΊΠ΅Ρ‚Ρ‹ (packages) Π² Oracle ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ состоят ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… взаимосвязанных ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ для выполнСния ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ прилоТСния ΠΏΡƒΡ‚Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π° всСх находящихся Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° взаимосвязанных ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠŸΠ°ΠΊΠ΅Ρ‚Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ ΠΌΠΎΡ‰Π½Ρ‹ΠΌ срСдством, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ большиС ΠΎΠ±ΡŠΠ΅ΠΌΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ нСсколькими ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ состоит ΠΈΠ· Π΄Π²ΡƒΡ… частСй: спСцификации ΠΈ Ρ‚Π΅Π»Π°. Π’ спСцификации ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ всС входящиС Π² Π΅Π³ΠΎ состав ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, курсоры ΠΈ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ), Π° Π² Ρ‚Π΅Π»Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π° содСрТится фактичСский ΠΊΠΎΠ΄ этих курсоров ΠΈ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

Π’ листингС А.6 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ простого ΠΏΠ°ΠΊΠ΅Ρ‚Π° Oracle.

ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ emp_pkg для награТдСния ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ сотрудника Π½Π°Π΄Π±Π°Π²ΠΊΠΎΠΉ ΠΊ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π΅, всС, Ρ‡Ρ‚ΠΎ потрСбуСтся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ β€” Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠžΡΠ½ΠΎΠ²Ρ‹ языка PL/SQL: структура Π±Π»ΠΎΠΊΠ° PL/SQL ΠΈ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости

ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sqlΠšΠ°ΠΆΠ΄Ρ‹ΠΉ язык, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ СстСствСнный ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹ΠΉ, ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ синтаксис, лСксикон ΠΈ Π½Π°Π±ΠΎΡ€ символов. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ‰Π°Ρ‚ΡŒΡΡ Π½Π° этом языкС, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π΅Π³ΠΎ использования. МногиС с опаской ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ ΠΊ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… языков, Π½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ΠΈ ΠΎΡ‡Π΅Π½ΡŒ просты, ΠΈ PL/SQL Π½Π΅ являСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ. Врудности общСния Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… языках связаны Π½Π΅ с самим языком, Π° с компилятором ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠΌ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ «общаСмся». ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρ‹ Π½Π΅ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ творчСским, Π³ΠΈΠ±ΠΊΠΈΠΌ ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠ΅ΠΌ, Π° ΠΈΡ… лСксикон ΠΊΡ€Π°ΠΉΠ½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½. Π Π°Π·Π²Π΅ Ρ‡Ρ‚ΠΎ ΡΠΎΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ ΠΎΠ½ΠΈ ΠΎΡ‡Π΅Π½ΡŒ, ΠΎΡ‡Π΅Π½ΡŒ быстро. Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€Π°Π²ΠΈΠ».

Если ΠΏΡ€ΠΈΠΊΠ°Π·Π°Ρ‚ΡŒ PL/SQL «подкинь-ΠΊΠ° ΠΌΠ½Π΅ Π΅Ρ‰Π΅ с ΠΏΠΎΠ»Π΄ΡŽΠΆΠΈΠ½Ρ‹ записСй», Π΅Π΄Π²Π° Π»ΠΈ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ΅. Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния синтаксиса, для использования PL/SQL Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°ΡΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ всС Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π°Π΄ Β«iΒ». ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π±Π»ΠΎΠ³Π° ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Ρ‹ основныС ΠΏΡ€Π°Π²ΠΈΠ»Π° языка, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ ΠΎΠ±Ρ‰Π°Ρ‚ΡŒΡΡ с компилятором PL/SQL β€” структура Π±Π»ΠΎΠΊΠΎΠ² PL/SQL.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π±Π»ΠΎΠΊΠ° PL/SQL

Π’ PL/SQL, ΠΊΠ°ΠΊ ΠΈ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹Ρ… языков, наимСньшСй Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ΠΉ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΊΠΎΠ΄Π° являСтся Π±Π»ΠΎΠΊ. Он прСдставляСт собой Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ выполнСния ΠΈ области видимости для объявлСний ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. PL/SQL позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅, Ρ‚Π°ΠΊ ΠΈ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈ, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹ ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹.

Π‘Π»ΠΎΠΊ PL/SQL ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΄ΠΎ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ², ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ… являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π±Π»ΠΎΠΊΠ° PL/SQL для ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π½Π° рис. 1.

ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql

Рис. 1. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π±Π»ΠΎΠΊΠ° PL/SQL

На рис. 2 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°, содСрТащая всС Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ€Π°Π·Π΄Π΅Π»Π°. Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ начинаСтся с ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова PROCEDURE ΠΈ, ΠΊΠ°ΠΊ ΠΈ всС Π±Π»ΠΎΠΊΠΈ, Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом END.

ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql

Рис. 2. ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°, содСрТащая всС Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ€Π°Π·Π΄Π΅Π»Π°

АнонимныС Π±Π»ΠΎΠΊΠΈ PL/SQL

Когда ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΎΡΡ‚Π°Ρ‚ΡŒΡΡ нСизвСстным, ΠΎΠ½ Π½Π΅ Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ своСго ΠΈΠΌΠ΅Π½ΠΈ. Π’ΠΎ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈ ΠΎΠ± Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ PL/SQL, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Π½Π° рис. 3: Π² Π½Π΅ΠΌ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅Ρ‚ Ρ€Π°Π·Π΄Π΅Π»Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, Π±Π»ΠΎΠΊ начинаСтся ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом DECLARE (ΠΈΠ»ΠΈ BEGIN ). Анонимный Π±Π»ΠΎΠΊ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΊ Π½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ прСдставляСт собой ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ для хранСния ΠΊΠΎΠΌΠ°Π½Π΄ PL/SQL β€” ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ с Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ собствСнныС Ρ€Π°Π·Π΄Π΅Π»Ρ‹ объявлСний ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π²Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² для ограничСния области видимости ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ….

ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql

Рис. 3. Анонимный Π±Π»ΠΎΠΊ Π±Π΅Π· Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² объявлСний ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

ΠžΠ±Ρ‰ΠΈΠΉ синтаксис Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° PL/SQL:

ΠšΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ скобками ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ синтаксиса. Анонимный Π±Π»ΠΎΠΊ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ содСрТит ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова BEGIN ΠΈ END, ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄Π½Π° исполняСмая ΠΊΠΎΠΌΠ°Π½Π΄Π°. НСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²:

Анонимный Π±Π»ΠΎΠΊ выполняСт ΡΠ΅Ρ€ΠΈΡŽ ΠΊΠΎΠΌΠ°Π½Π΄, Π° Π·Π°Ρ‚Π΅ΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎ сути являСтся Π°Π½Π°Π»ΠΎΠ³ΠΎΠΌ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹. ЀактичСски ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ являСтся Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ. Они ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ситуациях, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠ΄ PL/SQL выполняСтся Π»ΠΈΠ±ΠΎ нСпосрСдствСнно, Π»ΠΈΠ±ΠΎ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

Π’ΠΎ всСх случаях контСкст β€” ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ присваивания ΠΈΠΌΠ΅Π½ΠΈ β€” прСдоставляСтся внСшним ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ (Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈΠ»ΠΈ откомпилированная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°).

Π˜ΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ PL/SQL

Π₯отя Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ PL/SQL ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… прилоТСниях Oracle, вСроятно, большая Ρ‡Π°ΡΡ‚ΡŒ написанного Π²Π°ΠΌΠΈ ΠΊΠΎΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π° Π² Π²ΠΈΠ΄Π΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ². Π Π°Π½Π΅Π΅ Π²Ρ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ (см. рис. 1) ΠΈ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΈΡ… Π³Π»Π°Π²Π½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ являСтся Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°. Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ выглядит Ρ‚Π°ΠΊ:

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Ρ†Π΅Π»ΠΎΠΌ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Π½Π΅Π³ΠΎ, Π½ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ содСрТит ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово RETURN:

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Oracle позволяСт Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· SQL-ΠΊΠΎΠΌΠ°Π½Π΄, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ содСрТит большС Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Ρ‡Π΅ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ (Π² зависимости ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ срСды SQL).

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ PL/SQL

PL/SQL, ΠΊΠ°ΠΊ ΠΈ языки Ada ΠΈ Pascal, относится ΠΊ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ языков с Π±Π»ΠΎΡ‡Π½ΠΎΠΉ структурой, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈ PL/SQL ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈ. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, язык C Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈ, Π½ΠΎ стандартный C Π½Π΅ являСтся строго Π±Π»ΠΎΡ‡Π½ΠΎ-структурированным языком, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² Π½Π΅ΠΌ Π½Π΅ допускаСтся.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ PL/SQL ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°, содСрТащая Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹ΠΉ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ:

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΠΈ /* ΠΈ */ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ Π½Π°Ρ‡Π°Π»ΠΎ ΠΈ ΠΊΠΎΠ½Π΅Ρ† ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π². АнонимныС Π±Π»ΠΎΠΊΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π½Π° ΠΎΠ΄ΠΈΠ½ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ (рис. 4).

ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql

Рис. 4. Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ

Π“Π»Π°Π²Π½ΠΎΠ΅ прСимущСство Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ области видимости ΠΈ дСйствия синтаксичСских элСмСнтов ΠΊΠΎΠ΄Π°.

ΠžΠ±Π»Π°ΡΡ‚ΡŒ дСйствия Π² PL/SQL

Π’ PL/SQL ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ структуры ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ для Π±Π»ΠΎΠΊΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹. Когда Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ, всС эти структуры становятся нСдоступными. НапримСр, Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ calc_totals ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ элСмСнтам внСшнСго Π±Π»ΠΎΠΊΠ° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ year_total), Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ элСмСнты, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ Π±Π»ΠΎΠΊΠ΅, для внСшнСго Π±Π»ΠΎΠΊΠ° нСдоступны.

Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ PL/SQL имССтся нСкоторая ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия β€” участок ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Π±Π»ΠΎΠΊ, ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠ»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° эту ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°:

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ scope_demo.g_global ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² любом Π±Π»ΠΎΠΊΠ΅ любой схСмы, ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠ΅ΠΉ EXECUTE для scope_demo.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ l_salary ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ set_global.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ l_inner ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² локальном ΠΈΠ»ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅; ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° использованиС ΠΌΠ΅Ρ‚ΠΊΠΈ local_block для присваивания ΠΈΠΌΠ΅Π½ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌΡƒ Π±Π»ΠΎΠΊΡƒ.

ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pl sql

Π£Ρ‚ΠΎΡ‡Π½Π΅Π½ΠΈΠ΅ ссылок Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ столбцы Π² ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ… SQL

Бсылки Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ столбцы Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½Π΅ ΡƒΡ‚ΠΎΡ‡Π½ΡΠ»ΠΈΡΡŒ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ области дСйствия. Π”Π°Π»Π΅Π΅ приводится другая вСрсия Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π½ΠΎ Π½Π° этот Ρ€Π°Π· с ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½ΠΈΠ΅ΠΌ ссылок (Π²Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹ ΠΏΠΎΠ»ΡƒΠΆΠΈΡ€Π½Ρ‹ΠΌ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ):

Π’ Π½ΠΎΠ²ΠΎΠΉ вСрсии каТдая ссылка Π½Π° столбСц ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ уточняСтся псСвдонимом Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°.

Π˜Ρ‚Π°ΠΊ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ ΠΎΠ± этой возмоТности β€” Π½ΠΎ Π·Π°Ρ‡Π΅ΠΌ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя Π½Π° ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½? Для этого Π΅ΡΡ‚ΡŒ нСсколько ΠΎΡ‡Π΅Π½ΡŒ вСских ΠΏΡ€ΠΈΡ‡ΠΈΠ½:

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ±Π»ΠΈΠΆΠ΅ рассмотрим ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π΅ ΠΈΠ· этих ΠΏΡ€ΠΈΡ‡ΠΈΠ½.

Удобство чтСния

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ любая ΠΊΠΎΠΌΠ°Π½Π΄Π° SQL, встроСнная Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ PL/SQL, содСрТит ссылки Π½Π° столбцы ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. Π’ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ…, простых ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ… SQL Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒ эти ссылки ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ просто. Однако Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… прилоТСниях ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΡ‡Π΅Π½ΡŒ Π΄Π»ΠΈΠ½Π½Ρ‹Π΅, ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ слоТныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ SQL с дСсятками ΠΈ Π΄Π°ΠΆΠ΅ сотнями ссылок Π½Π° столбцы ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

Π‘Π΅Π· уточнСния ссылок Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ слоТнСС Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ столбцы. Π‘ уточнСниями сразу Π²ΠΈΠ΄Π½ΠΎ, ΠΊ Ρ‡Π΅ΠΌΡƒ относится Ρ‚Π° ΠΈΠ»ΠΈ иная ссылка.

«Один момСнт… ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ схСмы назначСния ΠΈΠΌΠ΅Π½, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π°Π΅ΠΌ строки ΠΈ столбцы. ИмСна всСх Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с β€žl_β€œ, поэтому ΠΌΡ‹ сразу Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ прСдставляСт Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽΒ».

Π”Π°, всС ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ; всС ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ (ΠΈ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ) ΠΏΡ€Π°Π²ΠΈΠ»Π° назначСния ΠΈΠΌΠ΅Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Π½Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² содСрТали Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½ΠΈΡ… (Ρ‡Ρ‚ΠΎ это β€” ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, пСрСмСнная? К ΠΊΠ°ΠΊΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ½Π° относится?).

БСзусловно, ΠΏΡ€Π°Π²ΠΈΠ»Π° назначСния ΠΈΠΌΠ΅Π½ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹, Π½ΠΎ ΠΎΠ½ΠΈ Π΅Ρ‰Π΅ Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎ компилятор PL/SQL всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ваши ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π²Ρ‹ Π·Π°Π΄ΡƒΠΌΠ°Π»ΠΈ.

ΠŸΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ошибок

Если Π½Π΅ ΡƒΡ‚ΠΎΡ‡Π½ΡΡ‚ΡŒ ссылки Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ PL/SQL Π²ΠΎ встроСнных ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ… SQL, ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ сСгодня, ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ ΡƒΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ. И Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ пошло Π½Π΅ Ρ‚Π°ΠΊ.

ВСрнСмся ΠΊ встроСнной ΠΊΠΎΠΌΠ°Π½Π΄Π΅ SQL Π±Π΅Π· уточнСния ссылок:

БСгодня ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ l_salary ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ прСдставляСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ l_salary, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½ΡƒΡŽ Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ set_global. Π― Ρ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΡŽ свою ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ β€” ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚! ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° поставляСтся ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ, всС Π΄ΠΎΠ²ΠΎΠ»ΡŒΠ½Ρ‹.

А Ρ‡Π΅Ρ€Π΅Π· Π΄Π²Π° Π³ΠΎΠ΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ просят своСго администратора Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ employees столбСц, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΠΎ случайности присваиваСтся имя Β«l_salaryΒ». Π’ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ?

Π’ΠΎ встроСнной ΠΊΠΎΠΌΠ°Π½Π΄Π΅ SQL Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Oracle всСгда Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ поиск соотвСтствия для Π½Π΅ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½Π½Ρ‹Ρ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² со столбцов Ρ‚Π°Π±Π»ΠΈΡ†. Если Π½Π°ΠΉΡ‚ΠΈ столбСц с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ, Oracle ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ поиску срСди ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… PL/SQL Π² области дСйствия. ПослС добавлСния Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ employee столбца l_salary ΠΌΠΎΠ΅ΠΉ Π½Π΅ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½Π½ΠΎΠΉ ссылкС l_salary Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ SELECT ставится Π² соотвСтствиС Π½Π΅ пСрСмСнная PL/SQL, Π° столбСц Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚?

ΠŸΠ°ΠΊΠ΅Ρ‚ scope_demo ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ компилируСтся Π±Π΅Π· ошибок, Π½ΠΎ сСкция WHERE запроса Π²Π΅Π΄Π΅Ρ‚ сСбя Π½Π΅ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ оТидалось. Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ l_salary, Π° сравниваСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ столбца salary Π² строкС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ employees со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ столбца l_salary Ρ‚ΠΎΠΉ ΠΆΠ΅ строки. ΠžΡ‚Ρ‹ΡΠΊΠ°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ нСпросто!

НС ΠΏΠΎΠ»Π°Π³Π°ΠΉΡ‚Π΅ΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π° назначСния ΠΈΠΌΠ΅Π½ для прСдотвращСния Β«ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉΒ» ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ; уточняйтС ссылки Π½Π° всС ΠΈΠΌΠ΅Π½Π° столбцов ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π²ΠΎ встроСнных ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ… SQL. Π­Ρ‚ΠΎ сущСствСнно снизит риск нСпрСдсказуСмого повСдСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… модификациях Ρ‚Π°Π±Π»ΠΈΡ†.

Π’ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… PL/SQL

Π’Π°ΠΆΠ½Ρ‹ΠΌ свойством ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, связанным с ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ Π΅Π΅ дСйствия, являСтся Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ. Π”Π°Π½Π½ΠΎΠ΅ свойство опрСдСляСт, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ Π΅Π΅ ΠΈΠΌΠ΅Π½ΠΈ, ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΊ ΠΈΠΌΠ΅Π½ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ прСфикс.

Β«Π’ΠΈΠ΄ΠΈΠΌΡ‹Π΅Β» ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹

НачнСм с Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ случая:

ОбС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ first_day ΠΈ last_day ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ Π±Π»ΠΎΠΊΠ΅, Π³Π΄Π΅ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, поэтому ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ Π½ΠΈΠΌ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠΌΠ΅Π½Π° Π±Π΅Π· ΡƒΡ‚ΠΎΡ‡Π½ΡΡŽΡ‰ΠΈΡ… прСфиксов. Π’Π°ΠΊΠΈΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ:

Π£Ρ‚ΠΎΡ‡Π½Π΅Π½Π½Ρ‹Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ², Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹Ρ… Π² области ΠΊΠΎΠ΄Π°, Π³Π΄Π΅ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π² спСцификации ΠΏΠ°ΠΊΠ΅Ρ‚Π° (ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΠΌΠ΅Π½Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ). Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Ρ‚Π°ΠΊΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½Π΅ΠΌ прСфикс ΠΈ Ρ‚ΠΎΡ‡ΠΊΡƒ (Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ имя столбца уточняСтся ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ содСрТится). НапримСр:

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. НапримСр, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ compute_means ΠΏΠ°ΠΊΠ΅Ρ‚Π° price_util, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Oracle с ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записью scott.

Π£Ρ‚ΠΎΡ‡Π½Π΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ

PL/SQL прСдоставляСт нСсколько способов уточнСния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² для логичСского Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ссылок. Π’Π°ΠΊ, использованиС ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ с глобальной ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ дСйствия. Допустим, имССтся ΠΏΠ°ΠΊΠ΅Ρ‚ company_pkg ΠΈ Π² спСцификации ΠΏΠ°ΠΊΠ΅Ρ‚Π° объявлСна пСрСмСнная с ΠΈΠΌΠ΅Π½Π΅ΠΌ last_company_id:

На ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° β€” Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ лишь ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ имя ΠΏΠ°ΠΊΠ΅Ρ‚Π°:

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, присвоСнноС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠ³ΠΎ уровня, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° протяТСнии Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ сСанса Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…; ΠΎΠ½ΠΎ Π½Π΅ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈΠ· области дСйствия Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ Ρ€Π°Π·Ρ€Ρ‹Π²Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π΅ΠΌ модуля, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½:

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ объявлСнии создаСтся пСрСмСнная salary, ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ дСйствия ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ являСтся вся ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°. Однако Π·Π°Ρ‚Π΅ΠΌ Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ссылка Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ salary Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ Π±Π»ΠΎΠΊΠ΅ всСгда сначала Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΠΎ объявлСнию Π² этом Π±Π»ΠΎΠΊΠ΅, Π³Π΄Π΅ пСрСмСнная Π²ΠΈΠ΄ΠΈΠΌΠ° Π±Π΅Π·ΠΎ всяких ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½ΠΈΠΉ. Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ Π±Π»ΠΎΠΊΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ salary, объявлСнной Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ Π΅Π΅ имя ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ (cal_totals.salary).

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ уточнСния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… контСкстах. Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ (order_id β€” ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ orders):

Π­Ρ‚ΠΎΡ‚ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΡƒΠ΄Π°Π»ΠΈΡ‚ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ orders всС записи нСзависимо ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ значСния order_id. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ SQL сначала провСряСт ΠΈΠΌΠ΅Π½Π° столбцов ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌ PL/SQL. УсловиС WHERE (order_id = order_id) всСгда истинно, поэтому всС Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠΏΠ°Π΄Π°ΡŽΡ‚.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ выглядит Ρ‚Π°ΠΊ:

Π’ этом случаС ΠΏΡ€ΠΈ Ρ€Π°Π·Π±ΠΎΡ€Π΅ имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. (РСшСниС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΈΠΌΠ΅Π½Π΅ΠΌ remove_order.order_id.)

Π’ PL/SQL установлСн Ρ†Π΅Π»Ρ‹ΠΉ ряд ΠΏΡ€Π°Π²ΠΈΠ» Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΈΠΌΠ΅Π½, Π° этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ удСляСтся ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅. И хотя Π·Π½Π°Ρ‚ΡŒ эти ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ². Π‘Ρ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄! Если ΠΆΠ΅ Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΡ‚ΠΎΡ‡Π½ΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π΅Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π²Π°ΠΌ придСтся Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ схСму назначСния ΠΈΠΌΠ΅Π½ для прСдотвращСния ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ².

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π—Π°Π²Π΅Ρ€ΡˆΠ°Ρ Ρ‚Π΅ΠΌΡƒ влоТСния, области дСйствия ΠΈ видимости, стоит ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ возмоТности PL/SQL, ΠΊΠ°ΠΊ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (nested programs). ВлоТСнная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° прСдставляСт собой ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ размСщаСтся Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ объявлСний внСшнСго Π±Π»ΠΎΠΊΠ°. ВлоТСнная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊΠΎ всСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΌ Ρ€Π°Π½Π΅Π΅ Π²ΠΎ внСшнСм Π±Π»ΠΎΠΊΠ΅, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ сопровоТдСниС ΠΊΠΎΠ΄Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ, Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… мСстах Π±Π»ΠΎΠΊΠ°.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *