zoukankan      html  css  js  c++  java
  • oracle PL/SQL(procedure language/SQL)程序设计(在PL/SQL中使用SQL)

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


     

  • 相关阅读:
    [国家集训队]拉拉队排练 Manancher_前缀和_快速幂
    高手过愚人节 Manancher模板题_双倍经验
    [模板]manacher算法
    [POI2011]MET-Meteors 整体二分_树状数组_卡常
    [国家集训队]矩阵乘法 整体二分
    三维偏序(陌上花开) CDQ分治
    博客园美化之旅第一天(CSS图层关系,背景相关设置,字体相关设置)
    力扣题目解答自我总结(反转类题目)
    python插件,pycharm基本用法,markdown文本编写,jupyter notebook的基本操作汇总
    关于小程序websocket全套解决方案,Nginx代理wss
  • 原文地址:https://www.cnblogs.com/pacoson/p/3523221.html
Copyright © 2011-2022 走看看