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


     

  • 相关阅读:
    抽象类中可以存在的成员
    读暗时间后感
    使用正则表达式限制QLineEdit不能输入大于某个整数
    QSharedMemory 使用
    BUUCTF-misc九连环 详解
    BUUCTF-数据包中的线索 1
    BUUCTF-Windows系统密码
    [CISCN2019 华北赛区 Day2 Web1]Hack World 1详解
    [ZJCTF 2019]NiZhuanSiWei 1详解
    BUUCTF [BJDCTF2020]Easy MD5 详解
  • 原文地址:https://www.cnblogs.com/pacoson/p/3523221.html
Copyright © 2020-2023  润新知