在PL/SQL程序中,允许使用的SQL语句只有DML和事务控制语句,使用DDL语句是非法的。
使用SELECT语句从数据库中选取数据时,只能返回一行数据。
使用COMMIT,  ROLLBACK, 和SAVEPOINT语句控制事务。
使用隐式游标(implicit cursors)测定DML语句的执行结果。
DDL语句只能通过内置的DBMS_SQL包来使用。


在PL/SQL中的SELECT语句

SELECT select_list
INTO     {variable_name[, variable_name]...
     | record_name}   
FROM     table
WHERE     condition;
必须使用INTO子句

例子

DECLARE
  v_deptno    NUMBER(2);
  v_loc    VARCHAR2(15);
BEGIN
  SELECT    deptno, loc (select检索出列变量的值 赋给 相应的变量)
    INTO    v_deptno, v_loc
  FROM        dept
  WHERE    dname = 'SALES';   ...
END;
存储数据检索结果
例子

DECLARE
  v_empRecord  emp%ROWTYPE; (行变量)
BEGIN
  -- 从emp表中检索一条记录并存储到v_empRecord记录变量中。(一条记录也就是数据库表中的一行记录)
  SELECT *
    INTO v_empRecord
    FROM emp
    WHERE empno = 7369;
dbms_output.put_line(v_empRecord.empno||v_empRecord.ename||v_empRecord.sal);    
END;
存储数据检索结果
例子
DECLARE
  v_deptName     dept.dname%TYPE;
  v_deptNo   dept.deptno%TYPE;
BEGIN
  -- 从dept中检索一条记录(具有两个字段)存储到v_deptNo和v_deptName变量中。
  SELECT deptno, dname
    INTO v_deptNo, v_deptName
    FROM dept
    WHERE deptno = 20;
   dbms_output.put_line(v_deptNo||v_deptName);
END;
返回指定部门的所有员工的工资总额
DECLARE    
  v_sum_sal   emp.sal%TYPE;
  v_deptno     NUMBER NOT NULL := 10;           
BEGIN
  SELECT    SUM(sal)  -- group function
    INTO    v_sum_sal
  FROM        emp
  WHERE    deptno = v_deptno;
  dbms_output.put_line(v_sum_sal);
END;


使用DML命令改变数据库表的记录:
INSERT
UPDATE
DELETE

为所有在emp表中的Analysts员工增加工资
DECLARE                    
  v_sal_increase   emp.sal%TYPE := 2000;   
BEGIN
  UPDATE    emp
    SET    sal = sal + v_sal_increase
    WHERE    job = 'ANALYST';
END;
更新dept表中的数据

v_deptno dept.deptno%TYPE:=&no;
   v_dname dept.dname%TYPE :='&name';
BEGIN
   UPDATE scott.dept SET dname=v_dname
   WHERE deptno=v_deptno;
END;

从emp表中删除10号部门下的所有员工

DECLARE
  v_deptno   emp.deptno%TYPE := 10;               
BEGIN                            
  DELETE FROM emp
    WHERE deptno = v_deptno;
END;


COMMIT和ROLLBACK语句

一个事务是从第一条DML语句开始直到COMMIT或ROLLBACK语句结束。
使用COMMIT和ROLLBACK语句结束一个事务。

DECLARE
   v_sal NUMBER(10,2) :=&salary;
   v_ename VARCHAR2(20):='&name';
BEGIN
   UPDATE emp SET sal=v_sal
          WHERE ename=v_ename;
   COMMIT;
   EXCEPTION(发生异常,就回滚)
     WHEN others THEN
       ROLLBACK;
END;


oracle PL/SQL(procedure language/SQL)程序设计(在PL/SQL中使用SQL)的更多相关文章

  1. Oracle笔记--PL/SQL(Procedure Language & Structured Query Language)

    1.PL/SQL是一种高级数据库程序设计语言,专门用于在各种环境下对Oracle数据库进行访问.该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理. 2.PL/SQL是对SQ ...

  2. oracle PL/SQL(procedure language/SQL)程序设计

    PL/SQL(procedure language/SQL)语言是Oracle对SQL语言的过程化扩充,是一个完整的编程语言.PL/SQL实现了过程化语句(如分支.循环等)与SQL语句的无缝连接,将过 ...

  3. “java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Timestamp”

    最近在项目中使用hibernate查询时,总报错“java.sql.SQLException: Value '0000-00-00' can not be represented as java.sq ...

  4. 在Access中执行SQL语句

    Access在小型系统开发中等到了广泛使用.虽然Access提供了可视化的操作方法,但许多开发人员还是喜欢直接用SQL语句操作数据表.如何在Access中打开SQL视图,对于初次使用Access的程序 ...

  5. 在Excel VBA中使用SQL到底优势在哪儿

    小爬在之前的博文中多次提到,可以在VBA中写SQL来操作Excel文件,实现各类数据处理和分析需求.那么,你可能有这样的疑问:Excel原生的VBA,数据透视表,数据分析功能不够吗,为啥一定要用SQL ...

  6. oracle PL/SQL(procedure language/SQL)程序设计之函数+过程+包

    匿名PL/SQL块回顾 DECLARE (可选)    定义在PL/SQL块中要使用的对象BEGIN (必须)    执行语句EXCEPTION (可选)    错误处理语句END; (必须)匿名块( ...

  7. oracle PL/SQL(procedure language/SQL)程序设计之函数+过程+包(转)

    匿名PL/SQL块回顾 DECLARE (可选)     定义在PL/SQL块中要使用的对象 BEGIN (必须)     执行语句 EXCEPTION (可选)     错误处理语句 END; (必 ...

  8. [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)

    原文:[推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下) [推荐]ORACLE PL/SQL编程详解之一: PL/SQL 程序设计简介(千里之行,始于足下 ...

  9. PL/SQL(Procedure Language & Structured Query Language)

    目前的PL/SQL包括两部分,一部分是数据库引擎部分:另一部分是可嵌入到许多产品(如C语言,JAVA语言等)工具中的独立引擎.可以将这两部分称为:数据库PL/SQL和工具PL/SQL. PL/SQL中 ...

  10. PL/SQL : Procedural Language / Structual Query Language and it is an exrension to SQL.

    SQL is not very flexible and it cannot be made to react differently to differing sutuations easily. ...

随机推荐

  1. sql查找字符串是否包含字符

    SELECT [Fgoodsid] ,[Fgoodsname] ,[Fcinema] ,[Fprice] FROM [tenpaytest].[dbo].[goodsinfo]where Fgoods ...

  2. 用jQuery解决弹出层的问题

    在BS 项目中 经常需要用到这种弹出层.做这种弹出层一般都会遇到下面几个问题:0,弹出层必须定义在input的下边显示.1,点击input弹出div层.2,点击div层外面任何地方,关闭div层.3, ...

  3. Update-ServiceTemplate

    1: Update a service by using conventional servicing. PS C:\> $Service = Get-SCService -Name " ...

  4. 气泡形提示控件grumble.js

    grumble.js 是一个很特别的气泡形状提示控件,最开始是为 Huddle.com 网站开发的, 它没有通常的north/east/south/west的定位限制. 任何一个grumble都可以放 ...

  5. 使用visual studio 2013 快速搭建phonegap开发环境

    前一段时间开发了一款简单的Phonegap应用,遇到了很多坑,其中有一个坑就是在搭建开发环境上.由于Phonegap 2.x 与3.x 区别比较大,导致了开发环境也有所不同.2.x 是这样的http: ...

  6. Struts2中属性驱动与模型驱动

    属性驱动: 1.概念 能够利用属性驱动获取页面表单元素的内容 2.步骤 1.在action中声明属性,属性的名称和页面元素中name属性的值保持一致 2.action中的属性必须有set和get方法 ...

  7. 【JavaScript】Registering JavaScript object methods as callbacks

    The registration of callback functions is very common in JavaScript web programming, for example to ...

  8. css常用知识

    1.基本语法规范p {color:#ff0000;background:#ffffff}a.其中"p"称为"选择器"(selectors),指明我们要给&quo ...

  9. h5-4 canvas

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. 0c-35-自动释放池使用注意

    .autorelease使用注意 )并不是放到自动释放池中,都会自动加入到自动释放池 1.1) 因为没有调用autorelease方法,所以对象没有加入到自动释放池. int main(){ @aut ...