在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. 解决远程连接mysql错误1130

    Mysql远程连接Mysql服务器的数据库,错误代码是1130,ERROR 1130: Host xxx.xxx.xxx.xxx  is not allowed to connect to this ...

  2. 编译安装-Nginx

    安装Nginx 1.环境准备 2.创建nginx用户 3.安装pcre-8.33.tar.gz 4.安装nginx-1.5.4.tar.gz 6.开机自启动 安装Nginx 1.环境准备 系统:Cen ...

  3. javaScript中"=="和"==="运算符的区别

    相同点: 两个运算符均可用于比较两个值是否相等,可允许操作任意类型的操作数,如果操作数相等则返回true,否则返回false. 不同点: "==="运算符也称为严格相等运算符,它用 ...

  4. CentOS7安装telnet服务

    CentOS7.0 telnet-server 启动的问题.解决方法:    ①.先检查CentOS7.0是否已经安装以下两个安装包:telnet-server.xinetd.命令如下:    rpm ...

  5. Oracle 建表常用数据类型的详解

    创建表时,必须为表的各个列指定数据类型.如果实际的数据与该列的数据类型不相匹配,则数据库会拒绝保存.如为学生指定出生日期为“1980-13-31”. 在Oracle中,常见的数据类型有: 字符串:字符 ...

  6. Android开发之SQLite的使用方法

    前言 SQLite是一种轻量级的小型数据库,虽然比较小,但是功能相对比较完善,一些常见的数据库基本功能也具有,在现在的嵌入式系统中使用该数据库的比较多,因为它占用系统资源很少.Android系统中也不 ...

  7. SAE J2534 Pass-Thru API

    Connects to the OBDII J1962 DLC and supports the following protocols. 1 CAN2 Single Wire2 J1850PWM+ ...

  8. 备份服务器数据(IIS配置备份还原、任务计划、服务列表和APP)

    该脚本可以用来导出IIS配置.任务计划.服务列表和APP,同时支持Windows 2003和2008. #定义备份位置 $iisfolder = "d:\Backup_all\IIS&quo ...

  9. Could not load the assembly 'App_Web_cwclgcuu'. Make sure that it is compiled before accessing the page.

    将网站迁移到windows server 2012 R2(64 bit), IIS 6.2(build 9200)上,爆出这个错误. 解决:右键相应的application pool,选择“Set A ...

  10. 【M11】禁止异常流出析构方法之外

    1.在两种情况下,调用析构方法:a.在正常状态下被销毁,栈上的对象离开作用域或者堆上的对象执行delete:b.抛出异常,堆栈回滚,栈上已经构造好的对象,也就是抛出异常之前的代码,自动调用析构方法.注 ...