博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自学PL/SQL 第三讲Interacting with the Oracle Server
阅读量:5976 次
发布时间:2019-06-20

本文共 2356 字,大约阅读时间需要 7 分钟。

本讲课程目标

1.在PL/SQL块中执行select语句
2.在PL/SQL块中执行DML语句和控制事务
3.使用隐式游标定义PL/SQL块中DML语句的输出

在PL/SQL块中"END;"表示结束PL/SQL块,但并没有结束事务,一个块可以跨越多个事务,一个事务也可以跨越多个块;PL/SQL块中不支持DDL和DCL语句,例如建表,赋予用户权限等.

一:在PL/SQL块中执行select语句

select语句在PL/SQL块中的语法结构如下

SELECT select_list

INTO     {variable_name[, variable_name]...
         | record_name}
FROM table
[WHERE condition];
范例:

 
  1. SQL> set serveroutput on  
  2. SQL> DECLARE  
  3.   2      v_first_name hr.employees.first_name%TYPE;  
  4.   3      v_last_name  hr.employees.last_name%TYPE;  
  5.   4  BEGIN  
  6.   5     SELECT first_name,last_name INTO  
  7.   6     v_first_name,v_last_name FROM hr.employees  
  8.   7     WHERE employee_id=100;  
  9.   8     DBMS_OUTPUT.PUT_LINE(v_first_name ||' '||v_last_name);  
  10.   9* END;  
  11.  
  12. SQL> /  
  13. Steven King  
  14. PL/SQL procedure successfully completed 

二.在PL/SQL块中执行DML语句和控制事务

可以在PL/SQL块中使用SQL的函数,自定义的序列号,字段的默认值插入数据

 
  1. SQL> create table t14703a (id number(5),constraint pk_t14703a primary key(id),  
  2.  2   location varchar2(30) default 'fuzhou',salary number(8,2));  
  3. Table created.  
  4.  
  5. SQL> create sequence user_seq  
  6.   2  increment by 1  
  7.   3  start with 1  
  8.   4  maxvalue 99999  
  9.   5  nocache  
  10.   6* nocycle  
  11. Sequence created.  
  12.  
  13. SQL> select user_seq.nextval from dual;  
  14.  
  15.    NEXTVAL  
  16. ----------  
  17.          1  
  18.  
  19. SQL> BEGIN  
  20.   2   INSERT INTO hr.t14703a  
  21.   3   (id,location,salary) VALUES  
  22.   4   (user_seq.nextval,default,'6000');  
  23.   5  COMMIT;  
  24.   6* END;  
  25. SQL> /  
  26. PL/SQL procedure successfully completed.  
  27.  
  28. SQL> select * from hr.t14703a;  
  29.  
  30.         ID LOCATION       SALARY  
  31. ---------- ---------- ----------  
  32.          3 fuzhou           6000  
  33.  
  34.  
  35. SQL> DECLARE  
  36.   2       v_salary_increase hr.t14703a.salary%TYPE :500;  
  37.   3    BEGIN  
  38.   4        UPDATE hr.t14703a SET salarysalary= salary + v_salary_increase  
  39.   5        WHERE id=3;  
  40.   6*   END;  
  41.   7  /  
  42. PL/SQL procedure successfully completed.  
  43.  
  44. SQL> select * from hr.t14703a;  
  45.  
  46.         ID LOCATION       SALARY  
  47. ---------- ---------- ----------  
  48.          3 fuzhou           6500 

三.使用隐式游标定义PL/SQL块中DML语句的输出

SQL游标,游标是私有的SQL工作区,有隐式和显式游标两个类型;oracle server使用隐式的游标来执行SQL语句
A cursor is a private SQL work area.
There are two types of cursors:
– Implicit cursors
– Explicit cursors
The Oracle server uses implicit cursors to parse and execute your SQL statements.
Explicit cursors are explicitly declared by the programmer.

4种游标的属性SQL%COUNT,SQL%FOUND,SQL%NOTFOUND,SQL%ISOPEN

  

 
  1. SQL> VAR rownums varchar2(30)  
  2. SQL> set serveroutput on  
  3. SQL> DECLARE  
  4.   2     v_a  hr.t04310_a.a%TYPE :50000;  
  5.   3   BEGIN  
  6.   4     delete  from  hr.t04310_a where a < v_a;  
  7.   5     :rownums := (SQL%ROWCOUNT ||' ' || 'row deleted');  
  8.   6     DBMS_OUTPUT.PUT_LINE(:rownums);  
  9.   7*  END;  
  10.   8  /  
  11. 40000 row deleted  
  12. PL/SQL procedure successfully completed. 

 

转载地址:http://oqiox.baihongyu.com/

你可能感兴趣的文章
Timer 和 TimerTask 例子
查看>>
Spring BOOT 集成 RabbitMq 实战操作(一)
查看>>
安装python3.5注意事项及相关命令
查看>>
进程通信之无名信号量
查看>>
并发串行调用接口
查看>>
Mongodb3.0.5副本集搭建及spring和java连接副本集配置
查看>>
FileStream大文件复制
查看>>
TDD 的本质不是 TDD
查看>>
华为程序员:加6天班!加班费1.4万元!网友:我能加到它破产
查看>>
Hibernate学习之SessionFactory的opensession 和 getCu...
查看>>
web网站服务(二)
查看>>
【第一期】网站打开错误问题解决方法集合
查看>>
j2ee开发防范URL攻击是个重要话题
查看>>
RSync实现文件备份同步
查看>>
如何判断一个服务是否正在运行
查看>>
精品软件 推荐 相当优秀的轻量级文本编辑器 Notepad2
查看>>
Lync 2013快速入门手册之三:组织Lync会议
查看>>
SQL SERVER 2008 表与约束的创建维护
查看>>
我的友情链接
查看>>
zabbix企业应用之监控mysql 5.6版本
查看>>