设为首页 收藏本站
查看: 910|回复: 0

[经验分享] ORACLE PL/SQL练习(二)

[复制链接]

尚未签到

发表于 2018-9-10 10:19:17 | 显示全部楼层 |阅读模式
  一个PL/SQL块最多由4个不同单元组成,只有一个单元是必不可少的。
  块头(Header)
  只有命名块才会有这个单元。块头单元就确定了这个命名块或者程序的调用方式,
  这个单元是可选的。
  声明单元(Declaration section)
  这部分定义变量,游标,以及可以被后面的执行单元或异常处理单元引用的子块。
  这一单元也是可选的。
  执行单元(Execution section)
  这部分包含了PL/SQL引擎在运行时要执行的语句,这个单元是必须的。
  异常处理单元
  这部分处理的是正常处理过程中抛出的异常(根据警告和错误条件),这一单元也是可选的。
  匿名块使用场景:
  1.数据库触发器
  当一特定事件发生时可以出发数据库触发器,而后者可以执行匿名块
  2.即席命令或脚本文件
  在SQL*Plus环境中,手工输入代码或脚本执行,脚本中调用匿名块。
  使用EXECUTE命令。
  3.编译后的3GL程序
  PL/SQL标示符默认属性:
  1.长度最多有30个字符;
  2.必须用字母开始;
  3.可以带有$,_,#
  4.不能带有任何“空白”字符
  直接量:只是一个值
  数字:
  415,21.6,3,141592654f,7D,NULL
  字符串
  'This is my sentence','01-OCT-1986',q'!hello!',NULL
  时间间隔
  INTERVAL '25-6' YEAR TO MONTH,INTERVAL '-18' MONTH,NULL
  布尔值
  TRUE,FALSE,NULL
  TO_DATE('01-OCT-1986','DD-MON-YYYY')
  TO_TIMESTAMP_TZ('01-OCT-1986 00:00:00 -6','DD-MON-YYYY HH24:MI:SS TZH')
  字符串大小写敏感
  日期格式敏感
  NULL的问题
  在PL/SQL中给一个VARCHAR2(n)变量赋值一个长度为0的字符串时,导致的结果就是NULL。
  DECLARE
  str VARCHAR2(1) := '';
  BEGIN
  IF str IS NULL  THEN          --结果是TRUE
  DBMS_OUTPUT.PUT_LINE('hello');
  END IF;
  END;
  /
  SQL> DECLARE
  2      str VARCHAR2(1) := '';
  3  BEGIN
  4      IF str IS NULL  THEN
  5      DBMS_OUTPUT.PUT_LINE('hello');
  6      END IF;
  7  END;
  8  /
  hello
  PL/SQL procedure successfully completed
  数据库在处理VARCHAR2类型的表列时也是一样的。
  在PL/SQL中给一个CHAR(n)变量赋值一个长度为0的字符串时,数据库会用空格字符填满这个变量,因而这个变量不为空。
  DECLARE
  flag CHAR(2) := '';
  BEGIN
  IF flag IS NULL THEN
  DBMS_OUTPUT.PUT_LINE('great');
  ELSIF flag = '  ' THEN
  DBMS_OUTPUT.PUT_LINE('bad');
  END IF;
  END;
  SQL> DECLARE
  2    flag CHAR(2) := '';           --用一个长度为零的字符串给CHAR(2)赋值
  3  BEGIN
  4    IF flag IS NULL THEN          --结果是FALSE
  5      DBMS_OUTPUT.PUT_LINE('great');
  6    ELSIF flag = '  ' THEN         --结果是TRUE
  7      DBMS_OUTPUT.PUT_LINE('bad');
  8    END IF;
  9  END;
  10  /
  bad
  PL/SQL procedure successfully completed
  这种行为只有在PL/SQL中才能看到。在数据库中,当我们要向一个CHAR(n)的列插入长度为0的字符串时,数据库不会用空格把列的内容填满,而是NULL。
  可见,ORACLE只是部分满足了ANSI 92和ANSI 99的标准,标准要求一个长度为零的字符串和NULL字符串必须要有所区别。
  在一个直接量字符串中嵌入单引号
  要求显示'hello'字符串,带上单引号。
  在ORACLE 10g之前,我们必须这样做:
  SQL> select '''hello''' from dual;
  '''HELLO'''
  -----------
  'hello'
  ORACLE 10g引入了自定义的分隔符,用q来标记我们的分隔符,然后用单引号把分割表达式包围起来。
  SQL> select q'['hello']' from dual;
  Q'['HELLO']'
  ------------
  'hello'


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-570808-1-1.html 上篇帖子: Oracle中schema讲解 下篇帖子: Linux下静默安装Oracle 11g
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表