ORACLE SQLÓÅ»¯
£¨1£© Ñ¡Ôñ×îÓÐЧÂʵıíÃû˳Ðò(Ö»ÔÚ»ùÓÚ¹æÔòµÄÓÅ»¯Æ÷ÖÐÓÐЧ)£º
ORACLE µÄ½âÎöÆ÷°´ÕÕ´ÓÓÒµ½×óµÄ˳Ðò´¦Àífrom ×Ó¾äÖеıíÃû£¬from ×Ó¾äÖÐдÔÚ×îºóµÄ±í
(»ù´¡±ídriving table)½«±»×îÏÈ´¦Àí£¬ÔÚfrom ×Ó¾äÖаüº¬¶à¸ö±íµÄÇé¿öÏÂ,Äã±ØÐëÑ¡Ôñ¼Ç
¼ÌõÊý×îÉٵıí×÷Ϊ»ù´¡±í¡£Èç¹ûÓÐ3¸öÒÔÉϵıíÁ¬½Ó²éѯ, ÄǾÍÐèҪѡÔñ½»²æ±í(intersec
tion table)×÷Ϊ»ù´¡±í, ½»²æ±íÊÇÖ¸ÄǸö±»ÆäËû±íËùÒýÓõıí.
£¨2£© WHERE ×Ó¾äÖеÄÁ¬½Ó˳Ðò£®£º
ORACLE ²ÉÓÃ×Ô϶øÉϵÄ˳Ðò½âÎöWHERE ×Ó¾ä,¸ù¾ÝÕâ¸öÔÀí,±íÖ®¼äµÄÁ¬½Ó±ØÐëдÔÚÆäËûWHE
RE Ìõ¼þ֮ǰ, ÄÇЩ¿ÉÒÔ¹ýÂ˵ô×î´óÊýÁ¿¼Ç¼µÄÌõ¼þ±ØÐëдÔÚWHERE ×Ó¾äµÄĩβ.
£¨3£© SELECT ×Ó¾äÖбÜÃâʹÓÑ * ‘£º
ORACLE ÔÚ½âÎöµÄ¹ý³ÌÖÐ, »á½«'*' ÒÀ´Îת»»³ÉËùÓеÄÁÐÃû, Õâ¸ö¹¤×÷ÊÇͨ¹ý²éѯÊý¾Ý×Öµä
Íê³ÉµÄ, ÕâÒâζ׎«ºÄ·Ñ¸ü¶àµÄʱ¼ä
£¨4£© ¼õÉÙ·ÃÎÊÊý¾Ý¿âµÄ´ÎÊý£º
ORACLE ÔÚÄÚ²¿Ö´ÐÐÁËÐí¶à¹¤×÷: ½âÎöSQL Óï¾ä, ¹ÀËãË÷ÒýµÄÀûÓÃÂÊ, °ó¶¨±äÁ¿, ¶ÁÊý¾Ý¿é
µÈ£»
£¨5£© ÔÚSQL*Plus , SQL*Forms ºÍPro*C ÖÐÖØÐÂÉèÖÃARRAYSIZE ²ÎÊý, ¿ÉÒÔÔö¼Óÿ´Î
Êý¾Ý¿â·ÃÎʵļìË÷Êý¾ÝÁ¿,½¨ÒéֵΪ200
£¨6£© ʹÓÃDECODE º¯ÊýÀ´¼õ ......
ORACLE SQLÓÅ»¯
£¨1£© Ñ¡Ôñ×îÓÐЧÂʵıíÃû˳Ðò(Ö»ÔÚ»ùÓÚ¹æÔòµÄÓÅ»¯Æ÷ÖÐÓÐЧ)£º
ORACLE µÄ½âÎöÆ÷°´ÕÕ´ÓÓÒµ½×óµÄ˳Ðò´¦Àífrom ×Ó¾äÖеıíÃû£¬from ×Ó¾äÖÐдÔÚ×îºóµÄ±í
(»ù´¡±ídriving table)½«±»×îÏÈ´¦Àí£¬ÔÚfrom ×Ó¾äÖаüº¬¶à¸ö±íµÄÇé¿öÏÂ,Äã±ØÐëÑ¡Ôñ¼Ç
¼ÌõÊý×îÉٵıí×÷Ϊ»ù´¡±í¡£Èç¹ûÓÐ3¸öÒÔÉϵıíÁ¬½Ó²éѯ, ÄǾÍÐèҪѡÔñ½»²æ±í(intersec
tion table)×÷Ϊ»ù´¡±í, ½»²æ±íÊÇÖ¸ÄǸö±»ÆäËû±íËùÒýÓõıí.
£¨2£© WHERE ×Ó¾äÖеÄÁ¬½Ó˳Ðò£®£º
ORACLE ²ÉÓÃ×Ô϶øÉϵÄ˳Ðò½âÎöWHERE ×Ó¾ä,¸ù¾ÝÕâ¸öÔÀí,±íÖ®¼äµÄÁ¬½Ó±ØÐëдÔÚÆäËûWHE
RE Ìõ¼þ֮ǰ, ÄÇЩ¿ÉÒÔ¹ýÂ˵ô×î´óÊýÁ¿¼Ç¼µÄÌõ¼þ±ØÐëдÔÚWHERE ×Ó¾äµÄĩβ.
£¨3£© SELECT ×Ó¾äÖбÜÃâʹÓÑ * ‘£º
ORACLE ÔÚ½âÎöµÄ¹ý³ÌÖÐ, »á½«'*' ÒÀ´Îת»»³ÉËùÓеÄÁÐÃû, Õâ¸ö¹¤×÷ÊÇͨ¹ý²éѯÊý¾Ý×Öµä
Íê³ÉµÄ, ÕâÒâζ׎«ºÄ·Ñ¸ü¶àµÄʱ¼ä
£¨4£© ¼õÉÙ·ÃÎÊÊý¾Ý¿âµÄ´ÎÊý£º
ORACLE ÔÚÄÚ²¿Ö´ÐÐÁËÐí¶à¹¤×÷: ½âÎöSQL Óï¾ä, ¹ÀËãË÷ÒýµÄÀûÓÃÂÊ, °ó¶¨±äÁ¿, ¶ÁÊý¾Ý¿é
µÈ£»
£¨5£© ÔÚSQL*Plus , SQL*Forms ºÍPro*C ÖÐÖØÐÂÉèÖÃARRAYSIZE ²ÎÊý, ¿ÉÒÔÔö¼Óÿ´Î
Êý¾Ý¿â·ÃÎʵļìË÷Êý¾ÝÁ¿,½¨ÒéֵΪ200
£¨6£© ʹÓÃDECODE º¯ÊýÀ´¼õ ......
˵µ½Èí½âÎö£¨soft prase
£©ºÍÓ²½âÎö£¨
hard prase
£©£¬¾Í²»Äܲ»ËµÒ»ÏÂ
Oracle
¶Ô
sql
µÄ´¦Àí¹ý³Ì¡£µ±Äã·¢³öÒ»Ìõ
sql
Óï¾ä½»¸¶
Oracle
£¬ÔÚÖ´ÐкͻñÈ¡½á¹ûǰ£¬
Oracle
¶Ô´Ë
sql
½«½øÐм¸¸ö²½ÖèµÄ´¦Àí¹ý³Ì£º
1¡¢Óï·¨¼ì²é£¨
syntax check
£©
¼ì²é´Ësql
µÄƴдÊÇ·ñÓï·¨¡£
2¡¢ÓïÒå¼ì²é£¨
semantic check
£©
ÖîÈç¼ì²ésql
Óï¾äÖеķÃÎʶÔÏóÊÇ·ñ´æÔÚ¼°¸ÃÓû§ÊÇ·ñ¾ß±¸ÏàÓ¦µÄȨÏÞ¡£
3¡¢¶Ô
sql
Óï¾ä½øÐнâÎö£¨
prase
£©
ÀûÓÃÄÚ²¿Ëã·¨¶Ôsql
½øÐнâÎö£¬Éú³É½âÎöÊ÷£¨
parse tree
£©¼°Ö´Ðмƻ®£¨
execution plan
£©¡£
4¡¢Ö´ÐÐ
sql
£¬·µ»Ø½á¹û£¨
execute and return
£©
ÆäÖУ¬Èí¡¢Ó²½âÎö¾Í·¢ÉúÔÚµÚÈý¸ö¹ý³ÌÀï¡£
OracleÀûÓÃÄÚ²¿µÄ
hash
Ëã·¨À´È¡µÃ¸Ã
sql
µÄ
hash
Öµ£¬È»ºóÔÚ
library cache
Àï²éÕÒÊÇ·ñ´æÔÚ¸Ã
hash
Öµ£»
¼ÙÉè´æÔÚ£¬ ......
˵µ½Èí½âÎö£¨soft prase
£©ºÍÓ²½âÎö£¨
hard prase
£©£¬¾Í²»Äܲ»ËµÒ»ÏÂ
Oracle
¶Ô
sql
µÄ´¦Àí¹ý³Ì¡£µ±Äã·¢³öÒ»Ìõ
sql
Óï¾ä½»¸¶
Oracle
£¬ÔÚÖ´ÐкͻñÈ¡½á¹ûǰ£¬
Oracle
¶Ô´Ë
sql
½«½øÐм¸¸ö²½ÖèµÄ´¦Àí¹ý³Ì£º
1¡¢Óï·¨¼ì²é£¨
syntax check
£©
¼ì²é´Ësql
µÄƴдÊÇ·ñÓï·¨¡£
2¡¢ÓïÒå¼ì²é£¨
semantic check
£©
ÖîÈç¼ì²ésql
Óï¾äÖеķÃÎʶÔÏóÊÇ·ñ´æÔÚ¼°¸ÃÓû§ÊÇ·ñ¾ß±¸ÏàÓ¦µÄȨÏÞ¡£
3¡¢¶Ô
sql
Óï¾ä½øÐнâÎö£¨
prase
£©
ÀûÓÃÄÚ²¿Ëã·¨¶Ôsql
½øÐнâÎö£¬Éú³É½âÎöÊ÷£¨
parse tree
£©¼°Ö´Ðмƻ®£¨
execution plan
£©¡£
4¡¢Ö´ÐÐ
sql
£¬·µ»Ø½á¹û£¨
execute and return
£©
ÆäÖУ¬Èí¡¢Ó²½âÎö¾Í·¢ÉúÔÚµÚÈý¸ö¹ý³ÌÀï¡£
OracleÀûÓÃÄÚ²¿µÄ
hash
Ëã·¨À´È¡µÃ¸Ã
sql
µÄ
hash
Öµ£¬È»ºóÔÚ
library cache
Àï²éÕÒÊÇ·ñ´æÔÚ¸Ã
hash
Öµ£»
¼ÙÉè´æÔÚ£¬ ......
£¨1£© Ñ¡Ôñ×îÓÐЧÂʵıíÃû˳Ðò(Ö»ÔÚ»ùÓÚ¹æÔòµÄÓÅ»¯
Æ÷ÖÐÓÐЧ)£º
Oracle
µÄ
½âÎöÆ÷°´ÕÕ´ÓÓÒµ½×óµÄ˳Ðò´¦Àífrom×Ó¾äÖеıíÃû£¬from×Ó¾äÖÐдÔÚ×îºóµÄ±í(»ù´¡±í driving
table)½«±»×îÏÈ´¦Àí£¬ÔÚfrom×Ó¾äÖаüº¬¶à¸ö±íµÄÇé¿öÏÂ,Äã±ØÐëÑ¡Ôñ¼Ç¼ÌõÊý×îÉٵıí×÷Ϊ»ù´¡±í¡£¼ÙÈçÓÐ3¸öÒÔÉϵıíÁ¬½Ó²éѯ,
ÄǾÍÐèҪѡÔñ½»²æ±í(intersection table)×÷Ϊ»ù´¡±í, ½»²æ±íÊÇÖ¸ÄǸö±»ÆäËû±íËùÒýÓõıí.
£¨2£© WHERE×Ó¾äÖеÄÁ¬½Ó˳Ðò£®£º
ORACLE²ÉÓÃ×Ô϶øÉϵÄ˳Ðò½âÎöWHERE×Ó¾ä,¸ù¾ÝÕâ¸öÔÀí,±íÖ®¼äµÄÁ¬½Ó±ØÐëдÔÚÆäËûWHEREÌõ¼þ֮ǰ, ÄÇЩ¿ÉÒÔ¹ýÂ˵ô×î´óÊýÁ¿¼Ç¼µÄÌõ¼þ±ØÐëдÔÚWHERE×Ó¾äµÄĩβ.
£¨3£© SELECT×Ó¾äÖбÜÃâʹÓà ‘ * ‘£º
ORACLEÔÚ½âÎöµÄ¹ý³ÌÖÐ, »á½«'*' ÒÀ´Îת»»³ÉËùÓеÄÁÐÃû, Õâ¸ö¹¤×÷ÊÇͨ¹ý²éѯÊý¾Ý×ÖµäÍê³ÉµÄ, ÕâÒâζ׎«ºÄ·Ñ¸ü¶àµÄʱ¼ä
£¨4£© ¼õÉÙ·ÃÎÊ
Êý¾Ý¿â
µÄ´ÎÊý£º
ORACLEÔÚÄÚ²¿Ö´ÐÐÁËÐí¶à¹¤×÷: ½âÎö
SQL
Óï¾ä, ¹ÀËãË÷ÒýµÄÀûÓÃÂÊ, °ó¶¨±äÁ¿ , ¶ÁÊý¾Ý¿éµÈ£»
£¨5£© ÔÚSQL*Plus , SQL*FormsºÍPro*CÖÐÖØÐÂÉèÖÃARRAYSIZE²ÎÊý, ¿ÉÒÔÔö¼Óÿ´ÎÊý¾Ý¿â·ÃÎʵļìË÷Êý¾ÝÁ¿ ,½¨Ò ......
£¨1£© Ñ¡Ôñ×îÓÐЧÂʵıíÃû˳Ðò(Ö»ÔÚ»ùÓÚ¹æÔòµÄÓÅ»¯
Æ÷ÖÐÓÐЧ)£º
Oracle
µÄ
½âÎöÆ÷°´ÕÕ´ÓÓÒµ½×óµÄ˳Ðò´¦Àífrom×Ó¾äÖеıíÃû£¬from×Ó¾äÖÐдÔÚ×îºóµÄ±í(»ù´¡±í driving
table)½«±»×îÏÈ´¦Àí£¬ÔÚfrom×Ó¾äÖаüº¬¶à¸ö±íµÄÇé¿öÏÂ,Äã±ØÐëÑ¡Ôñ¼Ç¼ÌõÊý×îÉٵıí×÷Ϊ»ù´¡±í¡£¼ÙÈçÓÐ3¸öÒÔÉϵıíÁ¬½Ó²éѯ,
ÄǾÍÐèҪѡÔñ½»²æ±í(intersection table)×÷Ϊ»ù´¡±í, ½»²æ±íÊÇÖ¸ÄǸö±»ÆäËû±íËùÒýÓõıí.
£¨2£© WHERE×Ó¾äÖеÄÁ¬½Ó˳Ðò£®£º
ORACLE²ÉÓÃ×Ô϶øÉϵÄ˳Ðò½âÎöWHERE×Ó¾ä,¸ù¾ÝÕâ¸öÔÀí,±íÖ®¼äµÄÁ¬½Ó±ØÐëдÔÚÆäËûWHEREÌõ¼þ֮ǰ, ÄÇЩ¿ÉÒÔ¹ýÂ˵ô×î´óÊýÁ¿¼Ç¼µÄÌõ¼þ±ØÐëдÔÚWHERE×Ó¾äµÄĩβ.
£¨3£© SELECT×Ó¾äÖбÜÃâʹÓà ‘ * ‘£º
ORACLEÔÚ½âÎöµÄ¹ý³ÌÖÐ, »á½«'*' ÒÀ´Îת»»³ÉËùÓеÄÁÐÃû, Õâ¸ö¹¤×÷ÊÇͨ¹ý²éѯÊý¾Ý×ÖµäÍê³ÉµÄ, ÕâÒâζ׎«ºÄ·Ñ¸ü¶àµÄʱ¼ä
£¨4£© ¼õÉÙ·ÃÎÊ
Êý¾Ý¿â
µÄ´ÎÊý£º
ORACLEÔÚÄÚ²¿Ö´ÐÐÁËÐí¶à¹¤×÷: ½âÎö
SQL
Óï¾ä, ¹ÀËãË÷ÒýµÄÀûÓÃÂÊ, °ó¶¨±äÁ¿ , ¶ÁÊý¾Ý¿éµÈ£»
£¨5£© ÔÚSQL*Plus , SQL*FormsºÍPro*CÖÐÖØÐÂÉèÖÃARRAYSIZE²ÎÊý, ¿ÉÒÔÔö¼Óÿ´ÎÊý¾Ý¿â·ÃÎʵļìË÷Êý¾ÝÁ¿ ,½¨Ò ......
-- create by zh
-- n ÊÇ×÷ÎïµÄʱ¼ä,x ÊÇÏ£ÍûÔÚ¼¸µã³ÉÊì,·µ»Ø²¥ÖÖµÄʱ¼ä
with t as
(
select 64 n,9 x from dual union all
select 64 n,13 x from dual union all
select 64 n,17 x from dual union all
select 64 n,20 x from dual
)
select '³ÉÊìʱ¼ä:' || lpad(to_char(n),4,' ') || ' ;' ||
'ժȡʱ¼ä:' || lpad(to_char(x),4,' ') || ' ;' ||
'²¥ÖÖʱ¼ä:' || lpad(to_char(mod(24+( x - mod( n,24)),24)),4,' ') || ' ;'
jg from t
......
-- create by zh
-- n ÊÇ×÷ÎïµÄʱ¼ä,x ÊÇÏ£ÍûÔÚ¼¸µã³ÉÊì,·µ»Ø²¥ÖÖµÄʱ¼ä
with t as
(
select 64 n,9 x from dual union all
select 64 n,13 x from dual union all
select 64 n,17 x from dual union all
select 64 n,20 x from dual
)
select '³ÉÊìʱ¼ä:' || lpad(to_char(n),4,' ') || ' ;' ||
'ժȡʱ¼ä:' || lpad(to_char(x),4,' ') || ' ;' ||
'²¥ÖÖʱ¼ä:' || lpad(to_char(mod(24+( x - mod( n,24)),24)),4,' ') || ' ;'
jg from t
......
Ò»¡¢Ê²Ã´ÊÇPL/SQL?
PL/SQL(Procedural Language/SQL)ÊǶÔSQLµÄÀ©³ä,ËüÎüÊÕÁ˽üÄêÀ´±à³ÌÓïÑÔµÄÐí¶à×î¸ßÉè¼ÆÌØµã:ÈçÊý¾Ý·â×°ÐÔ¡¢ÐÅÏ¢Òþ±ÎÐÔ¡¢ÖØÔغÍÀýÍâ´¦ÀíµÈ¡£ËüÔÊÐíSQLµÄÊý¾Ý²Ù×ÝÓïÑԺͲéѯÓï¾ä°üº¬ÔÚ¿é½á¹¹(block_structured)ºÍ´úÂë¹ý³ÌÓïÑÔÖÐ,ʹPL/SQL³ÉΪһ¸ö¹¦ÄÜÇ¿´óµÄÊÂÎñ´¦ÀíÓïÑÔ¡£
PL/SQLµÄÓŵãÈçÏÂ:
1.¿é½á¹¹(Block Structure)
PL/SQLÊÇ¿é½á¹¹ÓïÑÔ,Òâζ×ųÌÐò¿ÉÒÔ·Ö³ÉÈô¸ÉÂß¼¿é,¸÷×Ô°üº¬ÄǸöµ¥ÔªÀïÒªÇóµÄÂß¼ÓïÑÔ×ÊÔ´¡£¿ÉÒÔ¶Ô¿éÐû²¼±¾µØ±äÁ¿£¬ÔÚ¿éÖÐʹÓÃÕâЩ±äÁ¿,¿ÉÔÚËüÃÇÓ¦ÓõĿéÖÐÌØ±ðµØ´¦Àí´íÎóÌõ¼þ(½Ð×öExceptions)
2. Á÷³Ì¿ØÖÆ
Ìõ¼þÓï¾ä¡¢Ñ»·ºÍ·ÖÖ§¿ÉÓÃÀ´¿ØÖƳÌÐòµÄ¹ý³ÌÁ÷£¬ÒÔ¾ö¶¨ÊÇ·ñ»òºÎʱִÐÐSQL»òÆäËüÐж¯¡£ÕâÐ©ÌØµãÔÊÐíORACLE¹¤¾ß(ÖîÈçSQL*Forms)È¥·Ö×éÁªÏµÔÚÒ»ÆðµÄÃüÁî×éºÍͨ¹ýPL/SQL¿ØÖÆËüÃǵÄÖ´ÐС£ÕâÑù¿ÉÒÔ±ÜÃâÖÃÐí¶àÃüÁîΪµ¥¶ÀµÄ´¥·¢Æ÷²½Öè»òÕßǶÌ×Íⲿ±à³ÌÓïÑÔÖеÄSQLÓï¾äµÄÒªÇó¡£
3. ¿ÉÒÆÖ²ÐÔ
ÒòΪPL/SQLÊÇORACLEµÄÖ÷ÓïÑÔ,¹Ê³ÌÐò¿ÉÒÆÖ²ÖÁÖ§³ÖORACLEºÍPL/SQLµÄÈκβÙ×÷ϵͳƽ̨ÉÏ¡£
4.¼¯³ÉÐÔ
PL/SQLÔÚRDBMS(´æÖü¹ý³Ì¡¢´¥·¢Æ÷¡¢°ü)ºÍORACLE¹¤¾ßÖа ......
SELECT
T.ELES_FLG,
T.SENDUNIT_NAME,
T.ROM_SEQNO,
LTRIM(MAX(SYS_CONNECT_BY_PATH(T.MODEL, ',')), ',') MODEL
from (SELECT
ELES_FLG,
SENDUNIT_NAME,
ROM_SEQNO,
MODEL,
MIN(MODEL) OVER(PARTITION BY ELES_FLG, SENDUNIT_NAME, ROM_SEQNO) MODEL_MIN,
(ROW_NUMBER() OVER(ORDER BY
......
SELECT
T.ELES_FLG,
T.SENDUNIT_NAME,
T.ROM_SEQNO,
LTRIM(MAX(SYS_CONNECT_BY_PATH(T.MODEL, ',')), ',') MODEL
from (SELECT
ELES_FLG,
SENDUNIT_NAME,
ROM_SEQNO,
MODEL,
MIN(MODEL) OVER(PARTITION BY ELES_FLG, SENDUNIT_NAME, ROM_SEQNO) MODEL_MIN,
(ROW_NUMBER() OVER(ORDER BY
......