විවිධ දත්ත වර්ග සඳහා NVL පරිවර්තනය. SELECT විධානය තුළ ශාඛා ප්රකාශයන් Oracle nvl විස්තරය

අපි මඳ වේලාවකට පෙර කැදැලි කාර්යයන් ස්පර්ශ කළෙමු, දැන් අපි ඒවා තව ටිකක් විස්තරාත්මකව බලමු. අපි NULL අගය සමඟ වැඩ කිරීම සඳහා වන කාර්යයන් සහ විමසුමක ශාඛා කිරීමේ මෙහෙයුම ක්‍රියාත්මක කිරීමට උපකාරී වන කාර්යයන් සලකා බලමු.

කැදලි කාර්යයන්

නෙස්ටඩ් ශ්‍රිතයන් එක් ශ්‍රිතයක ප්‍රතිලාභ අගය තවත් ශ්‍රිතයකට ආදාන පරාමිතියක් ලෙස භාවිතා කරයි. කාර්යයන් සෑම විටම එක් අගයක් පමණක් ලබා දෙයි. එමනිසා, ඔබට ශ්‍රිත ඇමතුමක ප්‍රතිඵලය වෙනත් ශ්‍රිත ඇමතුමකට පරාමිතියක් ලෙස භාවිතා කරන විට එය වචනාර්ථයෙන් අගයක් ලෙස සැලකිය හැකිය. තන්තු ශ්‍රිත ඕනෑම කැදලි මට්ටමකට කැදලි කළ හැක. එක් කාර්යය ඇමතුමක් මේ වගේ

Function1(parameter1, parameter2, …) = result

ශ්‍රිත පරාමිතියක් වෙනත් ශ්‍රිතයකට ඇමතුමක් සමඟ ප්‍රතිස්ථාපනය කිරීම වැනි ප්‍රකාශන ඇති විය හැක

F1(param1.1, F2(param2.1, param2.2, F3(param3.1)), param1.3)

එහි ප්‍රතිඵල වෙනත් ශ්‍රිත සඳහා ආදාන අගයන් ලෙස භාවිතා කිරීමට පෙර නෙස්ටඩ් ශ්‍රිතයන් පළමුව ඇගයීමට ලක් කෙරේ. කාර්යයන් ගැඹුරුම කැදලි මට්ටමේ සිට ඉහළට වමේ සිට දකුණට ඇගයීමට ලක් කෙරේ. පෙර ප්‍රකාශනය පහත පරිදි ක්‍රියාත්මක වේ

  1. F3(param1) ශ්‍රිතය ඇගයීමට ලක් කර ඇති අතර ප්‍රතිලාභ අගය 2 ශ්‍රිතය සඳහා තුන්වන පරාමිතිය ලෙස භාවිතා කරයි, අපි එය param2.3 ලෙස හඳුන්වමු.
  2. එවිට F2(param1, param2.2, param2.3) ශ්‍රිතය ඇගයීමට ලක් කර ආපසු ලැබෙන අගය F1 - param1.2 ශ්‍රිතයේ දෙවන පරාමිතිය ලෙස භාවිතා කරයි.
  3. අවසාන වශයෙන්, F1(param1, param2, param1.3) ශ්‍රිතය ඇගයීමට ලක් කර ප්‍රතිඵලය නැවත ඇමතුම් වැඩසටහන වෙත ලබාදේ.

මේ අනුව, F3 ශ්‍රිතය තුන්වන කූඩු මට්ටමේ පවතී.

අපි ඉල්ලීම සලකා බලමු

dual වෙතින් next_day(last_day(sysdate)-7, ‘tue’) තෝරන්න;

  1. මෙම විමසුමේ පහළ මට්ටමේ සිට ඉහළ මට්ටම දක්වා ශ්‍රිත තුනක් ඇත - SYSDATE, LAST_DAY, NEXT_DAY. ඉල්ලීම පහත පරිදි සිදු කෙරේ
  2. කැදැලි SYSDATE ශ්‍රිතය ක්‍රියාත්මක වේ. එය වත්මන් පද්ධති කාලය ආපසු ලබා දෙයි. වර්තමාන දිනය 2009 ඔක්තෝබර් 28 යැයි කියමු
  3. ඊළඟට, LAST_DAY දෙවන මට්ටමේ ශ්‍රිතයේ ප්‍රතිඵලය ගණනය කෙරේ. LAST_DATE('28-OCT-2009') 2009 ඔක්තෝම්බර් මාසයේ අවසාන දිනය, එනම් 2009 ඔක්තෝම්බර් 31 වෙනිදා ආපසු එයි.
  4. මෙම දිනයෙන් දින හතක් අඩු කරනු ලැබේ - එය ඔක්තෝබර් 24 බවට හැරේ.
  5. අවසාන වශයෙන්, NEXT_DAY('24-OCT-2009', 'tue') ශ්‍රිතය ඇගයීමට ලක් කරන අතර, විමසුම ඔක්තෝබර් මාසයේ අවසාන අඟහරුවාදා ආපසු ලබා දෙයි - එය අපගේ උදාහරණයේ 27-OCT-2009 වේ.

බොහෝ කැදලි ශ්‍රිත ඇමතුම් භාවිතයෙන් සංකීර්ණ ප්‍රකාශන තේරුම් ගැනීම සහ ගොඩ නැගීම තරමක් අපහසුය, නමුත් මෙය කාලය සහ පුහුණුව සමඟ පැමිණේ. ඔබට එවැනි ප්‍රකාශන කොටස් වලට කඩා ඒවා වෙන වෙනම පරීක්ෂා කළ හැකිය. විමසීම් සහ ක්‍රියාකාරී ඇමතුම් ප්‍රතිඵල පරීක්ෂා කිරීම සඳහා DUAL වගුව ඉතා ප්‍රයෝජනවත් වේ. ඔබට කුඩා සංරචක පරීක්ෂා කර දෝෂහරණය කළ හැකි අතර, ඒවා එක් විශාල අපේක්ෂිත ප්‍රකාශනයකට ඒකාබද්ධ කෙරේ.

ශාඛා කාර්යයන්

ශාඛා ශ්‍රිත, IF-THEN-ELSE ලෙසද හැඳින්වේ, සමහර තත්වයන් අනුව ක්‍රියාත්මක වීමේ මාර්ගය තීරණය කිරීමට භාවිතා කරයි. ශාඛා ශ්‍රිතයන් තත්ත්ව ඇගයීමේ ප්‍රතිඵලය මත පදනම්ව විවිධ ප්‍රතිඵල ලබා දෙයි. එවැනි කාර්යයන් සමූහයට NULL අගය සමඟ වැඩ කිරීම සඳහා කාර්යයන් ඇතුළත් වේ: NVL, NVL2, NULLIF සහ COALESCE. තවද DECODE ශ්‍රිතය සහ CASE ප්‍රකාශනය මගින් නිරූපණය වන පොදු ශ්‍රිත. DECODE ශ්‍රිතය Oracle ශ්‍රිතයක් වන අතර, CASE ප්‍රකාශනය ANSI SQL ප්‍රමිතියේ පවතී.

NVL කාර්යය

NVL ශ්‍රිතය NULL ට එරෙහිව ඕනෑම දත්ත වර්ගයක තීරුවක හෝ ප්‍රකාශනයේ අගය පරීක්ෂා කරයි. අගය NULL නම්, එය විකල්ප NULL නොවන පෙරනිමි අගයක් ලබා දෙයි, එසේ නොමැතිනම් එය මුල් අගය ලබා දෙයි.

NVL ශ්‍රිතයට අවශ්‍ය පරාමිති දෙකක් ඇති අතර වාක්‍ය ඛණ්ඩය NVL(මුල්, ifnull) වන අතර එහිදී මුල් යනු පරීක්ෂා කිරීමට ඇති මුල් අගය වන අතර ifnull යනු මුල් අගය NULL නම් ශ්‍රිතයෙන් ලැබෙන ප්‍රතිඵලය වේ. ifnull සහ මුල් පරාමිතිවල දත්ත වර්ගය අනුකූල විය යුතුය. එනම්, එක්කෝ දත්ත වර්ගය සමාන විය යුතුය, නැතහොත් අගයන් එක් වර්ගයකින් තවත් වර්ගයකට ව්‍යංගයෙන් පරිවර්තනය කළ හැකි විය යුතුය. NVL ශ්‍රිතය මුල් පරාමිතියේ දත්ත වර්ගයට සමාන දත්ත වර්ගයක අගයක් ලබා දෙයි. අපි විමසුම් තුනක් සලකා බලමු

විමසුම 1: ද්විත්වයෙන් nvl(1234) තෝරන්න;

විමසුම 2: ද්විත්වයෙන් nvl(null, 1234) තෝරන්න;

විමසුම 3: ද්විත්වයෙන් nvl(substr('abc', 4), 'උප පෙළක් නොමැත') තෝරන්න;

NVL ශ්‍රිතයට පරාමිති දෙකක් අවශ්‍ය වන බැවින්, ඉල්ලීම 1 ORA-00909 දෝෂය ලබා දෙනු ඇත: වලංගු නොවන තර්ක ගණන. විමසුම 2 NULL අගය පරීක්ෂා කර එය NULL බැවින් 1234 ලබා දෙනු ඇත. තුන්වන විමසුම කැදලි SUBSTR ශ්‍රිතයක් භාවිතා කරන අතර එය අනුලකුණු තුනකින් යුත් තන්තුවකින් හතරවන අක්ෂරය උපුටා ගැනීමට උත්සාහ කරයි, NULL ආපසු ලබා දෙයි, සහ NVL ශ්‍රිතය 'sbustring නොමැත' යන තන්තුව ආපසු ලබා දෙයි.

NVL කාර්යය අංක සමඟ වැඩ කිරීමේදී ඉතා ප්රයෝජනවත් වේ. එය NULL අගයන් 0 බවට පරිවර්තනය කිරීමට භාවිතා කරයි, එවිට සංඛ්‍යා මත අංක ගණිත ක්‍රියා NULL ආපසු නොදෙන ලෙස

NVL කාර්යය2

NVL2 ශ්‍රිතය NVL වලට වඩා වැඩි ක්‍රියාකාරීත්වයක් සපයයි, නමුත් NULL අගයන් හැසිරවීමටද සේවය කරයි. එය NULL ට එරෙහිව ඕනෑම වර්ගයක තීරුවක හෝ ප්‍රකාශනයක අගය පරීක්ෂා කරයි. අගය NULL නොවේ නම්, දෙවන පරාමිතිය ආපසු ලබා දෙනු ඇත, එසේ නොමැතිනම් තුන්වන පරාමිතිය NVL ශ්‍රිතය මෙන් නොව, මෙම අවස්ථාවේදී මුල් අගය ලබා දෙයි.

NVL2 ශ්‍රිතයට අවශ්‍ය පරාමිති තුනක් ඇති අතර වාක්‍ය ඛණ්ඩය NVL2(මුල්, ifnotnull, ifnull) වේ, මෙහි මුල් අගය පරීක්ෂා කරනු ලැබේ, ifnotnull යනු මුල් NULL නොවේ නම් ආපසු ලබා දෙන අගය සහ ifnull යනු මුල් NULL නම් ආපසු ලබා දෙන අගයයි. ifnotnull සහ ifnull පරාමිතිවල දත්ත වර්ග අනුකූල විය යුතු අතර, ඒවා LONG ආකාරයේ විය නොහැක. NVL2 ශ්‍රිතය මඟින් ලබා දෙන දත්ත වර්ගය ifnotnull පරාමිතියේ දත්ත වර්ගයට සමාන වේ. අපි උදාහරණ කිහිපයක් බලමු

විමසුම 1: ද්විත්වයෙන් nvl2(1234, 1, ‘a string’) තෝරන්න;

විමසුම 2: ද්විත්වයෙන් nvl2(null, 1234, 5678) තෝරන්න;

විමසුම 3: ද්විත්වයෙන් nvl2(substr('abc', 2), 'bc නොවේ', 'උප තත්ත්‍වයක් නැත') තෝරන්න;

ඉල්ලීම 1 හි ifnotnull පරාමිතිය අංකයක් වන අතර ifnull පරාමිතිය තන්තුවකි. දත්ත වර්ග නොගැලපෙන බැවින්, "ORA-01722: අවලංගු අංකය" දෝෂය ලබා දෙයි. Query දෙක ifnull පරාමිතිය ලබා දෙයි, මුල් පිටපත NULL වන අතර ප්‍රතිඵලය 5678 වනු ඇත. විමසුම තුන 'bc' ආපසු ලබා දෙන SUBSTR ශ්‍රිතය භාවිතා කර NVL2 ('bc','bc නොවේ', 'උප පදයක් නැත') - එය ආපසු ලබා දෙයි. ifnotnull පරාමිතිය - 'bc නොවේ'.

NULLIF කාර්යය

NULLIF ශ්‍රිතය අගයන් දෙකක් සමානද යන්න පරීක්ෂා කරයි. ඒවා සමාන නම්, NULL ආපසු ලබා දෙනු ඇත, එසේ නොමැති නම් පළමු පරාමිතිය ආපසු ලබා දෙනු ලැබේ. NULLIF ශ්‍රිතයට අවශ්‍ය පරාමිති දෙකක් ඇති අතර සින්ටැක්ස් NULLIF (ifunequal, comparison_item) වේ. ශ්‍රිතය පරාමිති දෙකක් සංසන්දනය කරන අතර ඒවා සමාන නම්, NULL ආපසු ලබා දෙනු ඇත, එසේ නොමැති නම් පරාමිතිය අසමාන වේ. අපි ඉල්ලීම් සලකා බලමු

විමසුම 1: ද්විත්වයෙන් nullif(1234, 1234) තෝරන්න;

පරාමිති සමාන බැවින් විමසුම එක NULL ලබා දෙයි. Query 2 හි ඇති තන්තු දිනයකට පරිවර්තනය කර නැත, නමුත් නූල් ලෙස සසඳා ඇත. නූල් විවිධ දිගකින් යුක්ත බැවින්, ifunequal පරාමිතිය 24-JUL-2009 ආපසු ලබා දෙනු ලැබේ.

රූප සටහන 10-4 හි, NULLIF ශ්‍රිතය NVL2 ශ්‍රිතය තුළ තැන්පත් කර ඇත. NULLIF ශ්‍රිතය අනෙක් අතට ifunequal පරාමිතියෙහි ප්‍රකාශනයක කොටසක් ලෙස SUBSTR සහ UPPER ශ්‍රිත භාවිතා කරයි. EMAIL තීරුව මෙම ප්‍රකාශනය සමඟ සංසන්දනය කර ඇත, එය මුල් නම අක්ෂර 4ක් දිග සේවකයින් සඳහා මුල් නමේ මුල් අකුර අවසාන නම සමඟ ඒකාබද්ධ කරයි. මෙම අගයන් සමාන වන විට, NULLIF NULL ආපසු ලබා දෙනු ඇත, එසේ නොමැතිනම් එය අසමාන පරාමිතියේ අගය ලබා දෙනු ඇත. මෙම අගයන් NVL2 ශ්‍රිතය සඳහා පරාමිතියක් ලෙස භාවිතා කරයි. NVL2 සසඳන ලද මූලද්‍රව්‍ය ගැළපෙන්නේද නැද්ද යන්න පිළිබඳ විස්තරයක් ලබා දෙයි.

රූපය 10-4 - NULLIF ශ්රිතය භාවිතා කිරීම

COALESCE ශ්‍රිතය

COALESCE ශ්‍රිතය පරාමිති ලැයිස්තුවෙන් පළමු NULL නොවන අගය ලබා දෙයි. සියලුම පරාමිති NULL නම්, NULL ආපසු ලබා දෙනු ලැබේ. COALESCE ශ්‍රිතයට අවශ්‍ය පරාමිති දෙකක් සහ ඕනෑම විකල්ප පරාමිති සංඛ්‍යාවක් ඇති අතර වාක්‍ය ඛණ්ඩය COALESCE(expr1, expr2, ..., exprn) වන අතර එහිදී expr 1 හි අගය NULL නොවේ නම් ප්‍රතිඵලය expr1 වනු ඇත, එසේ නොමැතිනම් ප්‍රතිඵලය වනු ඇත. expr2 එය NULL නොවේ නම්, ආදිය. COALESCE අර්ථයෙන් කැදැලි NVL ශ්‍රිතවලට සමාන වේ

COALESCE(expr1, expr2) = NVL(expr1, expr2)

COALESCE(expr1, expr2, expr3) = NVL(expr1,NVL(expr2, expr3))

NULL නොවන අගයක් හමු වුවහොත් ලබා දුන් අගයේ දත්ත වර්ගය පළමු NULL නොවන අගයේ දත්ත වර්ගයට සමාන වේ. 'ORA-00932: නොගැලපෙන දත්ත වර්ග' දෝෂය මඟහරවා ගැනීමට, සියලුම NULL නොවන පරාමිති පළමු NULL නොවන පරාමිතිය සමඟ අනුකූල විය යුතුය. අපි උදාහරණ තුනක් බලමු

විමසුම 1: ද්විත්වයෙන් coalesce (null, null, null, 'a string') තෝරන්න;

විමසුම 2: ද්විත්වයෙන් coalesce (null, null, null) තෝරන්න;

විමසුම 3: ද්විත්ව වලින් coalesce (substr('abc', 4), 'bc නොවේ', 'උප පෙළක් නැත') තෝරන්න;

Query 1 සිව්වන පරාමිතිය ලබා දෙයි: තන්තුවක්, එය පළමු NULL නොවන පරාමිතිය වන බැවිනි. සියලු පරාමිති NULL බැවින් විමසුම් දෙක NULL ලබා දෙයි. විමසුම 3 පළමු පරාමිතිය ඇගයීමට ලක් කරයි, NULL අගය ලබා ගනී, සහ එය පළමු NULL නොවන පරාමිතිය වන බැවින් දෙවන පරාමිතිය ආපසු ලබා දෙයි.

ඔබ දැනටමත් NVL ශ්‍රිතය ගැන හුරුපුරුදු නම් NVL2 ශ්‍රිත පරාමිතීන් ව්‍යාකූල විය හැක. NVL(මුල්, ifnull) අගය NULL නොවේ නම් මුල් පිටපත ලබා දෙයි, එසේ නොමැති නම් ifnull. NVL2(මුල්, ifnotnull, ifnull) මුල් පිටපත NULL නොවේ නම් ifnull ලබා දෙයි. ව්‍යාකූලත්වය පැමිණෙන්නේ NVL ශ්‍රිතයේ දෙවන පරාමිතිය ifnull වන අතර NVL2 ශ්‍රිතය ifnotnull වේ. එබැවින් ශ්රිතයේ පරාමිතියේ පිහිටීම මත රඳා නොසිටින්න.

DECODE ශ්‍රිතය

DECODE ශ්‍රිතය සමානාත්මතාවය සඳහා පළමු පරාමිති දෙක පරීක්ෂා කිරීමෙන් සහ සමාන නම් තුන්වන අගයක් හෝ සමාන නොවේ නම් වෙනස් අගයක් ලබා දීමෙන් if-then-else තර්කය ක්‍රියාත්මක කරයි. DECODE ශ්‍රිතයට අවශ්‍ය පරාමිති තුනක් ඇති අතර වාක්‍ය ඛණ්ඩය DECODE(expr1, comp1, iftrue1, , ) වේ. පහත දැක්වෙන ව්‍යාජ කේත උදාහරණයේ පෙන්වා ඇති පරිදි මෙම පරාමිති භාවිතා වේ

IF expr1=comp1 පසුව iftrue1 ලබා දෙන්න

නැතිනම් expr1=comp2 නම් iftrue2 ලබා දෙන්න

නැතිනම් exprN=compN නම් iftrueN ආපසු දෙන්න

එසේ නොමැතිනම් NULL|iffalse;

පළමුව, expr1 comp1 සමඟ සංසන්දනය කරයි. ඒවා සමාන නම්, iftrue1 ලබා දෙයි. expr1 comp1 ට සමාන නොවේ නම්, ඊළඟට කුමක් සිදුවේද යන්න රඳා පවතින්නේ comp2 සහ iftrue2 යන පරාමිති නියම කර තිබේද යන්න මතය. ලබා දී ඇත්නම්, expr1 හි අගය comp2 සමඟ සංසන්දනය කරයි. අගයන් සමාන නම්, iftrue2 ආපසු ලබා දෙනු ලැබේ. එසේ නොවේ නම්, compN, iftrueN, expr1 සහ compN යන පරාමිති යුගල තිබේ නම්, සංසන්දනය කර, සමාන නම්, iftrueN ආපසු ලබා දෙනු ලැබේ. කිසියම් පරාමිති සමූහයක ගැළපීමක් සොයා නොගත්තේ නම්, එක්කෝ මෙම පරාමිතිය සඳහන් කර ඇත්නම් iffalse, නැතහොත් NULL ආපසු ලබා දෙනු ඇත.

DECODE ශ්‍රිතයේ ඇති සියලුම පරාමිති ප්‍රකාශන විය හැක. ආපසු ලැබෙන අගයේ වර්ගය පළමු වලංගු කිරීමේ මූලද්‍රව්‍යයේ වර්ගයට සමාන වේ - පරාමිතිය comp 1. ප්රකාශනය expr 1 සංයුක්ත පරාමිතියේ දත්ත වර්ගයට ව්‍යංගයෙන් පරිවර්තනය වේ1. පවතින අනෙකුත් සියලුම සංයුක්ත පරාමිති 1...compN comp වර්ගයට ද ව්‍යංගයෙන් පරිවර්තනය වේ 1. DECODE NULL අගයක් තවත් NULL අගයකට සමාන ලෙස සලකයි, i.e. expr1 NULL නම් සහ comp3 NULL සහ comp2 NULL නොවේ නම්, iftrue3 ලබා දෙයි. අපි උදාහරණ කිහිපයක් බලමු

විමසුම 1: ද්විත්වයෙන් විකේතනය තෝරන්න (1234, 123, '123 ගැලපීමකි');

විමසුම 2: ද්විත්වයෙන් විකේතනය තෝරන්න (1234, 123, '123 ගැලපීමකි', 'ගැලපීමක් නැත');

විමසුම 3: විකේතනය තෝරන්න ('search', 'comp1', 'true1', 'comp2', 'true2', 'search', 'true3', substr('2search', 2, 6), 'true4', ' බොරු') ද්විත්ව සිට;

විමසුම 1234 සහ 123 අගය සංසන්දනය කරයි. ඒවා සමාන නොවන බැවින්, iftrue1 නොසලකා හරින අතර, අගය iffalse අර්ථ දක්වා නොමැති බැවින්, NULL ආපසු ලබා දෙනු ලැබේ. ඉෆ්ෆාස් අගය අර්ථ දක්වා ඇති බව හැර ඉල්ලීම 1 ඉල්ලීමට සමාන වේ. 1234 123 ට සමාන නොවන බැවින්, එය iffalse ලබා දෙයි - 'ගැලපීමක් නැත'. තුන්වන විමසුම සෙවුම් අගයට ගැලපෙන පරිදි පරාමිති අගයන් පරීක්ෂා කරයි. comp1 සහ comp2 පරාමිති 'සෙවීම' ට සමාන නොවන නිසා iftrue1 සහ iftrue2 හි ප්‍රතිඵල මඟ හරිනු ලැබේ. comp3 මූලද්‍රව්‍යයේ (පරාමිති පිහිටුම 6) තුන්වන සංසන්දන ක්‍රියාවලියේදී ගැළපීමක් දක්නට ලැබෙන අතර 'true3' ට සමාන iftrue3 (පරාමිතිය 7) හි අගය ආපසු ලබාදේ. ගැළපීමක් සොයාගත් බැවින්, තවත් ගණනය කිරීම් සිදු නොකෙරේ. එනම්, comp4 (පරාමිතිය 8) හි අගය ද expr1 සමඟ ගැළපෙන නමුත්, පෙර සැසඳීමේදී ගැළපීම සොයාගත් බැවින් මෙම ප්‍රකාශනය කිසි විටෙකත් ගණනය නොකෙරේ.

CASE ප්‍රකාශනය

සියලුම තුන්වන සහ සිව්වන පරම්පරාවේ ක්‍රමලේඛන භාෂා කේස් ගොඩනැගීම ක්‍රියාත්මක කරයි. DECODE ශ්‍රිතය මෙන්, CASE ප්‍රකාශනය ඔබට if-then-else තර්කය ක්‍රියාත්මක කිරීමට ඉඩ සලසයි. CASE ප්‍රකාශනය භාවිතා කිරීම සඳහා විකල්ප දෙකක් තිබේ. සරල CASE ප්‍රකාශනයක් එක් වරක් සංසන්දනය කිරීමට මූලාශ්‍ර මූලද්‍රව්‍ය සකසන අතර පසුව අවශ්‍ය සියලුම පරීක්ෂණ කොන්දේසි ලැයිස්තුගත කරයි. සංකීර්ණ (සෙවූ) CASE එක් එක් කොන්දේසි සඳහා ප්‍රකාශ දෙකම ඇගයීමට ලක් කරයි.

CASE ප්‍රකාශනයට අවශ්‍ය පරාමිති තුනක් ඇත. ප්‍රකාශන වාක්‍ය ඛණ්ඩය වර්ගය මත රඳා පවතී. සරල CASE ප්‍රකාශනයක් සඳහා එය මේ ආකාරයෙන් පෙනේ

CASE search_expr

සංසන්දනය_expr1 වන විට සත්‍ය නම්1

)

TRUNC ශ්‍රිතය m දශම ස්ථාන වලට කපා n අංකය ලබා දෙයි. m පරාමිතිය සඳහන් නොකළ හැකිය; මෙම අවස්ථාවෙහිදී, n පූර්ණ සංඛ්‍යාවකට කපා ඇත.

තෝරන්න TRUNC(100.25678) X1, TRUNC(-100.25678) X2, TRUNC(100.99) X3,

TRUNC(100.25678, 2) X4

ද්විත්ව සිට

කාර්යය SIGN(n)

SIGN ශ්‍රිතය අංකයක ලකුණ තීරණය කරයි. n ධන නම්, ශ්‍රිතය 1 ලබා දෙයි. n සෘණ නම්, එය -1 ලබා දෙයි. ශුන්‍යයට සමාන නම්, 0 ආපසු එවනු ලැබේ. උදාහරණයක් ලෙස:

SIGN(100.22) X1, SIGN(-100.22) X2, SIGN(0) X3 තෝරන්න

ද්විත්ව සිට

මෙම කාර්යයේ සිත්ගන්නා ලක්ෂණයක් වන්නේ 0 දෝෂයකින් බෙදීමකින් තොරව ශුන්යයට සමාන m සම්ප්රේෂණය කිරීමේ හැකියාවයි.

කාර්යය POWER(n, m)

POWER ශ්‍රිතය n අංකය බලය m වෙත ඉහළ නංවයි. උපාධිය භාගික හා සෘණාත්මක විය හැකි අතර, මෙම කාර්යයේ හැකියාවන් සැලකිය යුතු ලෙස පුළුල් කරයි.

POWER(10, 2) X1, POWER(100, 1/2) X2 තෝරන්න,

POWER(1000, 1/3) X3, POWER(1000, -1/3) X4

ද්විත්ව සිට

X1 X2 X3 X4
100 10 10 0,1

සමහර අවස්ථාවලදී, මෙම ශ්රිතය ඇමතීමේදී ව්යතිරේකයක් සිදුවිය හැක. උදාහරණ වශයෙන්:

බලය (-100, 1/2) X2 තෝරන්න

ද්විත්ව සිට

මෙම අවස්ථාවෙහිදී, සෘණ සංඛ්‍යාවක වර්ගමූලය ගණනය කිරීමට උත්සාහයක් ගන්නා අතර, එහි ප්‍රතිඵලයක් ලෙස ORA-01428 "පරාසයෙන් පිටත තර්කය" දෝෂයක් ඇතිවේ.

ශ්‍රිතය SQRT(n)

මෙම කාර්යය n හි වර්ගමූලය ලබා දෙයි. උදාහරණ වශයෙන්:

SQRT(100) X තෝරන්න

ද්විත්ව සිට

EXP(n) සහ LN(n) ශ්‍රිත

EXP ශ්‍රිතය e බලය n දක්වා ඉහළ නංවන අතර LN ශ්‍රිතය n හි ස්වභාවික ලඝුගණකය ගණනය කරයි (n ශුන්‍යයට වඩා වැඩි විය යුතුය). උදාහරණයක්:

EXP(2) X1, LN(1) X2, LN(EXP(2)) X3 තෝරන්න

NVL කාර්යය

NVL ශ්‍රිතය සාමාන්‍යයෙන් බොහෝ විට භාවිතා වේ. ශ්‍රිතයට පරාමිති දෙකක් ලැබේ: NVL(expr1, expr2). පළමු පරාමිතිය expr1 NULL නොවේ නම්, ශ්‍රිතය එහි අගය ලබා දෙයි. පළමු පරාමිතිය NULL නම්, ශ්‍රිතය ඒ වෙනුවට expr2 දෙවන පරාමිතියේ අගය ලබා දෙයි.

අපි ප්‍රායෝගික උදාහරණයක් බලමු. EMP වගුවේ ඇති COMM ක්ෂේත්‍රයේ NULL අගයන් අඩංගු විය හැක. වැනි විමසුමක් ක්‍රියාත්මක කරන විට:

EMPNO, ENAME, COMM, NVL(COMM, 0) NVL_COMM තෝරන්න

SCOTT.EMP වෙතින්

NULL අගය බිංදුවෙන් ප්‍රතිස්ථාපනය වේ. ශ්‍රිතයක් භාවිතයෙන් අගයක් ජනනය කරන විට එයට අන්වර්ථයක් පවරන බව සලකන්න. විමසුම් ප්‍රතිඵල මේ ආකාරයෙන් පෙනෙනු ඇත:

EMPNO ENAME COMM NVL_COMM
7369 ස්මිත් 0
7499 ඇලන් 300 300
7521 වාට්ටුව 500 500
7566 ජෝන්ස් 0
7654 මාටින් 1400 1400
7698 බ්ලේක් 0
7782 ක්ලාක් 0
7839 රජ 0
7844 ටර්නර් 0 0
7900 ජේම්ස් 0
7902 FORD 0
7934 මිලර් 0

ශ්‍රිතය CEIL(n)

CEIL ශ්‍රිතය පරාමිතියක් ලෙස සම්මත කරන ලද n සංඛ්‍යාවට වඩා වැඩි හෝ සමාන කුඩාම පූර්ණ සංඛ්‍යාව ලබා දෙයි. උදාහරණ වශයෙන්:

CEIL(100) X1, CEIL(-100) X2, CEIL(100.2) X3 , CEIL(-100.2) X4 තෝරන්න

ද්විත්ව සිට

ශ්‍රිතය TRUNC(n [,m])

TRUNC ශ්‍රිතය m දශම ස්ථාන වලට කපා n අංකය ලබා දෙයි. m පරාමිතිය සඳහන් නොකළ හැකිය; මෙම අවස්ථාවෙහිදී, n පූර්ණ සංඛ්‍යාවකට කපා ඇත.

තෝරන්න TRUNC(100.25678) X1, TRUNC(-100.25678) X2, TRUNC(100.99) X3,

TRUNC(100.25678, 2) X4

ද්විත්ව සිට

කාර්යය SIGN(n)

SIGN ශ්‍රිතය අංකයක ලකුණ තීරණය කරයි. n ධන නම්, ශ්‍රිතය 1 ලබා දෙයි. n සෘණ නම්, එය -1 ලබා දෙයි. ශුන්‍යයට සමාන නම්, 0 ආපසු එවනු ලැබේ. උදාහරණයක් ලෙස:

SIGN(100.22) X1, SIGN(-100.22) X2, SIGN(0) X3 තෝරන්න

ද්විත්ව සිට

මෙම කාර්යයේ සිත්ගන්නා ලක්ෂණයක් වන්නේ 0 දෝෂයකින් බෙදීමකින් තොරව ශුන්යයට සමාන m සම්ප්රේෂණය කිරීමේ හැකියාවයි.

කාර්යය POWER(n, m)

POWER ශ්‍රිතය n අංකය බලය m වෙත ඉහළ නංවයි. උපාධිය භාගික හා සෘණාත්මක විය හැකි අතර, මෙම කාර්යයේ හැකියාවන් සැලකිය යුතු ලෙස පුළුල් කරයි.

POWER(10, 2) X1, POWER(100, 1/2) X2 තෝරන්න,

POWER(1000, 1/3) X3, POWER(1000, -1/3) X4

ද්විත්ව සිට

X1 X2 X3 X4
100 10 10 0,1

සමහර අවස්ථාවලදී, මෙම ශ්රිතය ඇමතීමේදී ව්යතිරේකයක් සිදුවිය හැක. උදාහරණ වශයෙන්:

බලය (-100, 1/2) X2 තෝරන්න

ද්විත්ව සිට

මෙම අවස්ථාවෙහිදී, සෘණ සංඛ්‍යාවක වර්ගමූලය ගණනය කිරීමට උත්සාහයක් ගන්නා අතර, එහි ප්‍රතිඵලයක් ලෙස ORA-01428 "පරාසයෙන් පිටත තර්කය" දෝෂයක් ඇතිවේ.

ශ්‍රිතය SQRT(n)

මෙම ශ්‍රිතය n අංකයේ වර්ගමූලය ලබා දෙයි. උදාහරණ වශයෙන්:

SQRT(100) X තෝරන්න

ද්විත්ව සිට

EXP(n) සහ LN(n) ශ්‍රිත

EXP ශ්‍රිතය e බලය n දක්වා ඉහළ නංවන අතර LN ශ්‍රිතය n හි ස්වභාවික ලඝුගණකය ගණනය කරයි (n ශුන්‍යයට වඩා වැඩි විය යුතුය). උදාහරණයක්:

EXP(2) X1, LN(1) X2, LN(EXP(2)) X3 තෝරන්න

අංක සහිත TO_CHAR ශ්‍රිතය

වෙනත් දත්ත වර්ග වලට දත්ත පරිවර්තනය කිරීමේ කාර්යයන්. TO_CHAR(අංකය) අංකයක් පෙළ බවට පරිවර්තනය කරයි. TO_NUMBER(string) පෙළ අංකයකට පරිවර්තනය කරයි.

SELECT TO_CHAR (123) DUAL වෙතින් 123 තන්තුව ලබා දෙනු ඇත, TO_NUMBER (`12345") DUAL වෙතින් 12345 අංකය ලබා දෙනු ඇත.

රසායනාගාර කටයුතු. ප්රතිදාන අංක ආකෘතිය වෙනස් කිරීම

සංඛ්‍යාත්මක අගයන් සමඟ වැඩ කිරීම සඳහා වන TO_CHAR ශ්‍රිතය වන Oracle SQL හි සංඛ්‍යාත්මක අගයන්හි ආකෘතියේ වෙනස්කම්.

අභ්යාස:

රූපයේ දැක්වෙන ආකෘතියේ hr.employees වගුවෙන් සේවකයින්ගේ මුල් නම, අවසාන නම සහ වැටුප් පිළිබඳ තොරතුරු ප්‍රදර්ශනය කරන විමසුමක් ලියන්න. 3.4-1:

සහල්. 3.4 -1

මෙම අවස්ථාවේදී, ඉහළම වැටුප් සහිත සේවකයින් සඳහා පේළි පළමුව දර්ශනය වන පරිදි දත්ත වර්ග කළ යුතුය.

සටහන:

රූපයේ සමහර වැටුප් අගයන්. 3.4-1 වෙනස් කර ඇත, එබැවින් ඒවා ඔබගේ අගයන්ට සමාන නොවිය හැක.

විසඳුමක්:

පළමු_නම "පළමු නම" ලෙසත්, අවසාන_නම "අවසාන නම" ලෙසත්, TO_CHAR (වැටුප්, "L999999999.99") "වැටුප්" ලෙස hr.සේවකයන්ගේ වැටුප් විස්තරය අනුව ඇණවුම් කරන්න.

TO_NUMBER සහ TO_DATE කාර්යයන්

තන්තුවක් TO_DATE දිනයකට පරිවර්තනය කිරීමේ කාර්යය (තන්තුව, ආකෘතිය). හැකි ආකෘති අගයන් දැනටමත් ඉහත සාකච්ඡා කර ඇත, එබැවින් මම මෙම කාර්යය භාවිතා කිරීම සඳහා උදාහරණ කිහිපයක් දෙන්නෙමි. උදාහරණ:

තෝරන්න TO_DATE("01/01/2010", `DD.MM.YYYY") සිට DUAL "01/01/2010" දිනය ලබා දෙයි;

තෝරන්න TO_DATE("01.JAN.2010", `DD.MON.YYYY") සිට DUAL "01/01/2009" දිනය ලබා දෙයි;

තෝරන්න TO_DATE("15-01-10", `DD-MM-YY") සිට DUAL "01/15/2010" දිනය ලබා දෙයි.

තන්තුවක් සංඛ්‍යාත්මක අගයක් TO_NUMBER වෙත පරිවර්තනය කිරීමේ කාර්යය (තන්තුව, ආකෘතිය). වඩාත් පොදු ආකෘති අගයන් වගුවේ දක්වා ඇත, එබැවින් උදාහරණ භාවිතා කරමින් මෙම කාර්යය භාවිතා කිරීම දෙස බලමු. උදාහරණ:

තෝරන්න TO_NUMBER(`100") සිට DUAL අංකය 100 SELECT TO_NUMBER (`0010.01", "9999D99") ලබා දෙනු ඇත සිට DUAL අංකය 10.01 ලබා දෙයි;

තෝරන්න TO_NUMBER("500,000", "999G999") සිට DUAL 500000 අංකය ලබා දෙයි.

RR මූලාංගය දින ආකෘතියෙන්

RR දින කාල ආකෘති මූලද්‍රව්‍යය YY දින කාල ආකෘති මූලද්‍රව්‍යයට සමාන වේ, නමුත් එය වෙනත් සියවස්වල දින අගයන් ගබඩා කිරීම සඳහා අමතර නම්‍යශීලී බවක් ලබා දෙයි. RR දින කාල ආකෘති මූලද්‍රව්‍යය 20 වැනි සියවසේ දින 21 වැනි සියවසේ ගබඩා කිරීමට ඉඩ දෙන්නේ වසරේ අවසාන ඉලක්කම් දෙක පමණක් සඳහන් කිරීමෙනි.

වත්මන් වසරේ අවසාන ඉලක්කම් දෙක 00 සිට 49 දක්වා නම්, ආපසු ලැබුණු වර්ෂයට වත්මන් වර්ෂයට සමාන පළමු ඉලක්කම් දෙක ඇත.

වත්මන් වසරේ අවසාන ඉලක්කම් දෙක 50 සිට 99 දක්වා නම්, ආපසු ලැබුණු වසරේ පළමු ඉලක්කම් 2 වත්මන් වසරේ පළමු ඉලක්කම් 2 ට වඩා 1ක් වැඩි වේ.

වත්මන් වසරේ අවසාන ඉලක්කම් දෙක 00 සිට 49 දක්වා නම්, ආපසු ලැබුණු වසරේ පළමු ඉලක්කම් 2 වත්මන් වසරේ පළමු ඉලක්කම් 2 ට වඩා 1 අඩු වේ.

වත්මන් වසරේ අවසාන ඉලක්කම් දෙක 50 සිට 99 දක්වා නම්, ආපසු ලැබුණු වර්ෂයට වත්මන් වර්ෂයට සමාන පළමු ඉලක්කම් දෙක ඇත.

NVL කාර්යය

NVL ශ්‍රිතය සාමාන්‍යයෙන් බොහෝ විට භාවිතා වේ. ශ්‍රිතයට පරාමිති දෙකක් ලැබේ: NVL (expr1, expr2). පළමු පරාමිතිය expr1 NULL නොවේ නම්, ශ්‍රිතය එහි අගය ලබා දෙයි. පළමු පරාමිතිය NULL නම්, ශ්‍රිතය ඒ වෙනුවට expr2 දෙවන පරාමිතියේ අගය ලබා දෙයි.

උදාහරණය: සැපයුම්කරුවන්ගෙන් NVL (supplier_city, n/a") තෝරන්න:

ඉහත SQL ප්‍රකාශය supplier_city ක්ෂේත්‍රයේ ශුන්‍ය අගයක් තිබේ නම් n/" ලබා දෙනු ඇත. එසේ නොමැති නම්, එය supplier_city අගය ලබා දෙනු ඇත.

Oracle/PLSQL හි NVL ශ්‍රිතය භාවිතා කිරීමේ තවත් උදාහරණයක් වන්නේ:

සැපයුම්කරුවන්ගෙන් supplier_id, NVL (supplier_desc, supplier_name) තෝරන්න.

මෙම SQL ප්‍රකාශය නැවත පැමිණෙනු ඇත සපයන්නාගේ නමක්ෂේත්‍රය නම් supplier_descශුන්‍ය අගයක් අඩංගු වේ. එසේ නොමැතිනම් එය නැවත පැමිණෙනු ඇත supplier_desc.

අවසාන උදාහරණය: Oracle/PLSQL හි NVL ශ්‍රිතය භාවිතා කිරීම: විකුණුම් වලින් NVL(කොමිස්, 0) තෝරන්න;

මෙම SQL ප්‍රකාශය 0 if අගය ලබා දුන්නේය කොමිසමක්ෂේත්‍රයේ ශුන්‍ය අගයක් අඩංගු වේ. එසේ නොමැතිනම් එය ආපසු ලබා දෙනු ඇත කොමිෂන් සභාක්ෂේත්රය.

විවිධ දත්ත වර්ග සඳහා NVL පරිවර්තනය

ශුන්‍ය අගයක් සැබෑ අගයක් බවට පරිවර්තනය කිරීමට, NVL ශ්‍රිතය භාවිතා කරන්න: NVL ( ප්රකාශනය 1, ප්රකාශනය 2), කොහෙද:

ප්රකාශනය1-නිර්වචනය නොකළ හැකි මුල් හෝ ගණනය කළ අගය.

ප්රකාශනය2- නිර්වචනය නොකළ අගය සඳහා ආදේශ කර ඇති අගය.

සටහන:ඕනෑම දත්ත වර්ගයක් පරිවර්තනය කිරීමට NVL ශ්‍රිතය භාවිතා කළ හැක, නමුත් ප්‍රතිඵලය සෑම විටම එකම ආකාරයේ වේ ප්රකාශනය1.

සඳහා NVL පරිවර්තනය විවිධ වර්ග:

NUMBER - NVL (සංඛ්‍යා තීරුව, 9).

CHAR හෝ VARCHAR2 - NVL (අක්ෂර|තීරුව,"ලද නොහැක").

රසායනාගාර කටයුතු. NVL ශ්‍රිතය භාවිතා කිරීම

Oracle SQL හි ශුන්‍ය අගයන් සමඟ වැඩ කිරීම සඳහා NVL කාර්යය.

අභ්යාස:

සේවකයාගේ මුල් සහ අවසන් නම තොරතුරු hr.employees වගුවෙන් මෙන්ම සේවකයා සඳහා කොමිස් අනුපාතය (COMMISSION_PCT තීරුව) පෙන්වන විමසුමක් ලියන්න. මෙම අවස්ථාවෙහිදී, කොමිෂන් සභාව නිර්වචනය කර නොමැති සේවකයින් සඳහා, 0 අගය පෙන්විය යුතුය, ඉල්ලීමේ ප්රතිඵලය රූපයේ දැක්වෙන පරිදි විය යුතුය. 3.5-1.

සහල්. 3.5 -1 (අගය 51 පේළියේ සිට පෙන්වා ඇත)

විසඳුමක්:

අදාළ ඉල්ලීම් කේතය මේ වගේ විය හැකිය:

පළමු_නම "පළමු නම" ලෙසත්, අවසාන_නම "අවසාන නම" ලෙසත්, NVL (COMMISSION_PCT, 0) "කොමිස් අනුපාතය" ලෙසත් hr.සේවකයන්ගෙන් තෝරන්න.




ඉහල