在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. 获取和设置localStorage

    东钿金融服务平台 用户第一次访问页面出现,引导步骤,起初一直使用cookie,但是cookie一直不稳定 今天老大说改用localStorage 于是乎百度,查了一篇博客 http://www.cnb ...

  2. Android读取assets目录下的资源

    1.获取资源的输入流 资源文件 sample.txt 位于 $PROJECT_HOME/assets/ 目录下,可以在 Activity 中通过 Context.getAssets().open(“s ...

  3. 一个优秀windows C++程序员的知识体系[转]

    转自:一个优秀windows C++程序员的知识体系 思考一个优秀windows C++ 程序员该有哪些知识,可最终发现什么知识都不能少, 看下图: 除了上面知识,程序员还要不断学习, 保持对新知识的 ...

  4. Linux下的TUN/TAP编程

    linux下实现虚拟网卡我们在使用VMWARE的虚拟化软件时经常会发现它们能都能虚拟出一个网卡,貌似很神奇的技术,其实在Linux下很简单,有两种虚拟设 备,TUN时点对点的设备,tap表示以太网设备 ...

  5. JavaBean简单及使用

    一.JavaBean简介 JavaBean是使用Java语言开发的一个可重用的组件,在JSP的开发中可以使用JavaBean减少重复代码,使整个JSP代码的开发更简洁.JSP搭配JavaBean来使用 ...

  6. maven中解决javax.servlet.jsp.PageContext cannot be resolved to a type

    在eclipse环境下用maven出现:javax.servlet.jsp.PageContext cannot be resolved to a type. 这是由于没有引入jsp-api引发的问题 ...

  7. jQuery + jQuery Mobile 实现省市二级下拉列表页面

    一.需求: 提供省.市下拉列表,当用户选择省一级下拉列表项后,市下拉列表的各个选项自动变为该省对应的城市列表. 二.效果: 三.实现: 1.省市json数据,来自: http://www.cnblog ...

  8. Codeforces Round #313 (Div. 1) A. Gerald's Hexagon 数学题

    A. Gerald's Hexagon Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/559/p ...

  9. java Servlet接口及应用

    基本类和接口 一.javax.servlet.Servlet接口 servlet抽象集是javax.servlet.Servlet接口,它规定了必须由Servlet类实现由servlet引擎识别和管理 ...

  10. 字典树(Trie)的java实现

    一.定义 字典树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:利用 ...