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

[经验分享] PL/SQL入门--基本结构

[复制链接]

尚未签到

发表于 2018-10-11 12:39:13 | 显示全部楼层 |阅读模式
  PL/SQL块中只能直接嵌入SELECT,DML(INSERT,UPDATE,DELETE)
  以及事务控制语句(COMMIT,ROLLBACK,SAVEPOINT),
  而不能直接嵌入DDL语句(CREATE,ALTER,DROP)和DCL语句(GRANT,REVOKE)
  1.检索单行数据
  1.1使用标量变量接受数据
  


  • v_ename emp.ename%type;

  • v_sal   emp.sal%type;

  • select ename,sal into v_ename,v_sal from emp where empno=&no;
  

  1.2使用记录变量接受数据
  


  • type emp_record_type is record(

  • ename emp.ename%type,sal emp.sal%type);

  • emp_record emp_record_type;

  • select ename,sal into emp_record from emp where empno=&no;
  

  1.3嵌入SELECT语句注意事项:
  使用SELECT INTO语句时,必须要返回一条数据,并且只能返回一条数据
  no_date_found:
  select into没有返回数据
  too_many_rows:
  select into返回多条数据
  where子句使用注意事项:
  使用的变量名不能与列名相同,否则触发TOO_MANY_ROWS例外.
  2.操纵数据
  2.1使用VALUES子句插入数据
  


  • v_deptno dept.deptno%type;

  • v_dname dept.dname%type;

  • v_deptno:=no;

  • v_dname:='&name';

  • insert into dept (deptno,dname) values(v_deptno,v_dname);
  

  2.2使用子查询插入数据
  


  • v_deptno emp.deptno%type:=&no;

  • insert into employee select * from emp where deptno=v_deptno;
  

  2.3更新数据
  使用表达式更新列值
  


  • v_deptno dept.deptno%type:=no;

  •   v_loc dept.loc%type:='&loc';

  •   update dept set loc=v_loc where deptno=v_deptno;
  

  2.4使用子查询更新列值
  


  • v_ename emp.ename%type:='&name';

  • update emp set (sal,comm) = (select sal,comm from emp where ename=v_ename) where job = (select job from emp where ename=v_ename) ;
  

  2.5删除数据
  使用变量删除数据
  


  • v_deptno dept.deptno%type:=&no;

  • delete from dept where deptno=v_deptno;
  

  2.6使用子查询删除数据
  


  • v_ename emp.ename%type:='&name';
  • delete from emp where deptno=(select deptno from emp where ename=v_ename);
  

  3.SQL游标
  游标是指向上下文区的指针,包括隐含游标(SQL游标)和显式游标两种类型
  SQL游标用于处理SELECT INTO ,INSERT,UPDATE以及DELETE语句.
  显式游标用于处理多行的SELECT语句
  SQL游标包括:SQL%FOUND,SQL%NOTFOUND,SQL%ROWCOUNT,SQL%ISOPEN等四种属性
  
  3.1 SQL%ISOPEN:执行时,会隐含的打开和关闭游标.因此该属性的值永远都是FALSE
  
  3.2 SQL%FOUND:用于确定SQL语句执行是否成功.当SQL有作用行时,为TRUE,否则为FALSE
  


  • v_deptno emp.deptno%type:=&no;

  • update emp set salsal=sal*1.1 where deptno=v_deptno;

  • if sql%found
  •        then dbms_output.put_line('执行成功');
  • else
  •        dbms_output.putline('失败');
  • endif
  

  3.3 sql%notfound:确定SQL语句执行是否成功,当SQL有作用行时,为false,否则为true
  
  3.4 sql%rowcount:返回SQL语句所作用的总计行数
  


  • v_deptno emp.deptno%type:=&no;

  • update emp set salsal=sal*1.1 where deptno=v_deptno;

  • dbms_output.put_line('修改了'||sql%rowcount||'行');
  

  4.事务控制语句(TCL)
  事务控制语句包括COMMIT,ROLLBACK以及SAVEPOINT等三种语句
  


  • v_sal emp.sal%type:=&salary;

  • v_ename emp.ename%type:='&name';

  • update emp set sal=v_sal where ename=v_ename;

  • commit;

  • exception

  •     when others then

  •     rollback;
  

  
  


  • insert into temp values(1);

  •   savepoint a1;

  •   insert into temp values(2);

  •   savepoint a2;

  •   insert into temp values(3);

  •   savepoint a3;

  •   rollback to a2;

  •   commit;
  5.控制结构
  条件分支语句
  5.1简单条件判断

  • v_sal number(6,2);

  • select sal into v_sal from emp where

  • lower(ename)=lowe('&&name');

  • if v_sal

运维网声明 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.yunweiku.com/thread-620386-1-1.html 上篇帖子: Storage of SQL Server's Error Log on Stand-Alone Server 下篇帖子: SQL Server CE和SQL Server 2000/2005中的ISNULL函数的异同
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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