在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;


转载于:https://www.cnblogs.com/pacoson/p/3523221.html

oracle PL/SQL(procedure language/SQL)程序设计(在PL/SQL中使用SQL)相关推荐

  1. oracle判断字段为空时选用别的字段_oracle中使用sql查询时字段为空则赋值默认

    转至:http://www.th7.cn/db/Oracle/201501/86125.shtml oracle 通过 nvl( )函数sql 查询时为 空值 赋默认值 oracle 函数介绍之nvl ...

  2. sql azure 语法_在Azure Data Studio中计划SQL笔记本

    sql azure 语法 SQL Notebooks are an interactive way of creating documents, executing T-SQL queries alo ...

  3. oracle表中增加字段 sql语句,ORACLE中通过SQL语句(alter table)来增加、删除、修改字段...

    1.添加字段: alter table  表名  add (字段  字段类型)  [ default  '输入默认值']  [null/not null]  ; 2.添加备注: comment on ...

  4. [译] ALTER SYSTEM CANCEL SQL : 在 Oracle Database 18c 的会话中取消 SQL 语句

    原文地址:https://oracle-base.com/articles/18c/alter-system-cancel-sql-18c 原文作者:Tim Hall Oracle Database ...

  5. ssis 表达式任务_在SSIS中执行SQL任务:SqlStatementSource表达式与可变源类型

    ssis 表达式任务 In this article, I will give an overview of Execute SQL Task in SSIS and I will try to il ...

  6. mysql不具有的特征是_MySQL中的SQL特征(转)

    MySQL中的SQL特征: 为了与MySQL服务器进行通信,必须熟练掌握SQL.例如,在使用诸如mysql客户机这样的程序时,其功能首先是作为一种发送SQL 语句给服务器执行的工具.而且,如果编写使用 ...

  7. 公开发布版的Windows Azure 基础结构服务中的 SQL Server – 文档和最佳实践(已更新),还有即将发布的博客...

    一周前,WindowsAzure 刚刚宣布公开发布版的基础结构服务正式推出, 这标志着WindowsAzure从此开始完全支持基础结构即服务,SQL Server是其中的一个主要组件. 预安装的SQL ...

  8. 在Access中执行SQL语句

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

  9. python解析sql文件_如何从Python中解析sql文件?

    是否有任何方法可以从Python中执行.SQL文件中的某些SQL命令,而不是文件中的所有SQL命令?假设我有以下.sql文件:DROP TABLE IF EXISTS `tableA`; CREATE ...

  10. Oracle数据库第二课——使用PL/SQL进行初步编程,了解PL/SQL的相关知识

    知识点:了解PL/SQL的编程的基础:了解PL/SQL的注释:掌握PL/SQL的块结构:掌握PL/SQL的数据类型.运算符.字符集.标识符:掌握PL/SQL语句块的书写.变量的声明和赋值 1.PL/S ...

最新文章

  1. 【二维树状数组】See you~
  2. 2017 04 04 省选模拟
  3. About JXTA message reliable design
  4. 信息抽取(五)实体命名识别之嵌套实体识别哪家强,我做了一个简单的对比实验
  5. 思科查看服务器启动配置文件,启动配置检查UCS
  6. java spring包_java 自定义加载器,加载spring包,动态加载实现,jar包隔离,tomcat加载webapp方式...
  7. python 神经网络_推荐 :用Python实现神经网络(附完整代码)!
  8. C++ 连接数据库的入口和获取列数、数据
  9. java.net.URISyntaxException: Illegal character in query at index,http请求url中有非法字符导致
  10. Android NDK JNI C++ 3
  11. 火狐浏览器怎么安装未经认证的附加组件
  12. #天府TV#《什么是成都》爆红背后,还有上千热泪盈眶留言!
  13. 渔夫与商人的故事:人的一生到底在追求什么
  14. salesforce chatter提醒带Mention(即@)
  15. 软件构造设计模式III(转载整合)
  16. iOS 设置按钮上图下文的方式
  17. 如何使用COM-Hunter检测持久化COM劫持漏洞
  18. FYD-Focus Your Distribution-关注你的分布:异常检测和定位的从粗到细的非对比性学习-FYD
  19. QQ如何设置使用代理服务器?
  20. Qt实现软件任务栏托盘功能

热门文章

  1. ztree隐藏指定节点后面的(重命名和删除)图标
  2. 【NOIP2017】【Luogu3954】成绩(模拟)
  3. 【HNOI2006】【BZOJ1192】鬼谷子的钱袋(水题,位运算?)
  4. 【NOIP2000】【Luogu1019】单词接龙
  5. rsa 公 填充模式的_RSA加密的填充模式
  6. 小新air15为啥没人买_联想小新air15怎么样?身边的人用的好像比较少?
  7. 计算一个连通分量中节点的个数的两种方法
  8. bzoj 1027: [JSOI2007]合金(floyd最小环)
  9. C#数据流:文件流、内存流、网络流
  10. ----函数句柄/时间表