returning

本文深入解析SQL与PL/SQL的关键概念,包括赋值语句、自定义参数、绑定变量使用、游标操作、锁数据、包中的子程序重载及执行顺序。通过实例详细阐述各知识点的应用,旨在提升读者在数据库操作与编程中的实践能力。

RETURNING JIHUA_NUM, SHIJ_NUM INTO??????????

参考的资料是《PL/SQL用户指南与参考》

2、赋值语句Returning:

 

   insert into t1 values ( 90 , 'SERVICE' , 'BEIJING' )

   Returning rowid , name into row_id,info;

    注:只限insert、update、delete一条记录时进行赋值
 
3、自定义参数——&:
 
    可SQL和PLSQL中均可使用自定义参数,即需要自己输入值的参数
    select * from ldcom where comcode=&a andname=&b;
    PLSQL:
    declare i int := &a;   n int := &b;
 
4、绑定变量的使用:
 
    可使用绑定变量的办法提高SQL效率

 

    SQL> variable x number ;

    SQL> exec :x := 8600 ;

    SQL> select * from ldcom where comcode= :x ;

    注:PLSQL中的declare即隐士绑定,无需再申明
 
    可用Print查看绑定变量  SQL> print x;
    也可使用查询  SQL> select :x from dual;
 
    实际的简单应用:    

 

    variable x number ;

 

    declare

      v_date date ;

    begin

      for i in   1 .. 10 loop

        :x := i;

        select sysdate +:x into v_date from dual;

        dbms_output.put_line(v_date);

      end loop ;

    end ;

    /

 
    在execute immediate中的应用:    

 

    declare

    v_x t1.num% type ;

    begin

    execute immediate 'update t1 set num=8888 where id=:a returning num into :b'

    using 2 returning into v_x;

    dbms_output.put_line(v_x);

    end ;

    注意returning的返回值在动态SQL中的操作格式

 
5、%TYPE和%ROWTYPE的区别:
 
    %TYPE针对某一字段类型(数组也是单一的类型)
    %ROWTYPE针对某一整表的类型(游标也是整表)
 
6、计数循环的逆序法:

 

    for i in reverse 10 .. 100 loop

    注意reverse的位置不要记错
 
7、一般的游标使用法:
 
    1、游标的正常使用需要四步
 
    ①定义游标

    cursor c2(dept_no number default 10 ) is----注意定义dept_no的方法

    select name ,agentcode from laagent where rownum <= dept_no;

    ②打开游标

    open c3(dept_no => 20 ); ---- 可以重新定义 dept_no

    ③提取游标数据

    fetch c2 into dept_name,dept_loc; ---- 字符类型、个数相等

    fetch c3 into deptrec; ----deptrec rowtype

    exit when c3% notfound ;

    ④关闭游标

    CLOSE c3;

    游标属性

    % FOUND       -- 布尔型属性,当最近一次读记录时成功返回 , 则值为 TRUE

    % NOTFOUND    -- 布尔型属性,与 %FOUND 相反;

    % ISOPEN      -- 布尔型属性,当游标已打开时返回 TRUE

    % ROWCOUNT    -- 数字型属性,返回已从游标中读取的记录数。

 
    2、 使用for自动打开、提取、关闭游标

 

    FOR c1_rec IN c1 LOOP

    FOR c1_rec IN ( SELECT dname, loc FROM dept) LOOP

 
    3、注:单一的SQL语句都是一个隐式的游标,属性为

 

    SQL% FOUND       -- 布尔型属性,当最近一次读记录时成功返回 , 则值为 TRUE

    SQL% NOTFOUND    -- 布尔型属性,与 %FOUND 相反;

    SQL% ISOPEN      -- 布尔型属性,当游标已打开时返回 TRUE

    SQL% ROWCOUNT    -- 数字型属性,返回已从游标中读取的记录数。

    例如:DELETEFROM emp WHERE deptno=v_deptno;

         IF SQL % NOTFOUND THEN ...

 
8、For Update锁定数据:

 

    CURSOR emp_cursor is select empno,sal

    from emp where deptno=v_deptno for update of sal nowait ;

    注意:其中的of sal,for update可以精确到某一个或几个字段
 
    在使用了For Update之后可以在delete和update语句中使用current of cursor_name子句

    for emp_record in emp_cursor loop

      if emp_record.sal < 1500 then

        update emp set sal= 1500 where current of emp_cursor;

      end if ;

    end loop ;

    但需注意:只能针对for update的表进行修改。

 
9、Package中的子程序可以重载
 
    即函数名相同,参数个数不同
 
10、PL/SQL的执行顺序
 
    在同一Package中,若要使用自身定义的Function或Procedure,则必须是之前定义过的。
    同理,即便使用参数,也必须在前面定义过。
    也就是说:一般最终的执行程序,会放在Package的最后,除非将所有部分都申明成Public。
 
MySQL 8.0.43 版本中引入了对 RETURNING 子句的支持,这一功能使得在执行 INSERT、UPDATEDELETE 等 DML(数据操作语言)语句后,可以直接返回受影响行的数据,而无需再执行额外的 SELECT 查询[^5]。这不仅减少了客户端与服务器之间的交互次数,还提升了整体的查询效率。 在 MySQL 中,RETURNING 子句可以用于以下场景: - **插入操作后返回新行数据**:可以在执行 INSERT 后立即获取新插入行的内容,特别是对于包含自增主键的表,RETURNING 子句非常有用,可以避免额外查询来获取刚插入的主键值。 - **更新操作后返回更新后的行数据**:执行 UPDATE 语句时,可以通过 RETURNING 子句返回更新后的行内容,便于后续业务逻辑处理。 - **删除操作后返回被删除的行数据**:在 DELETE 操作中使用 RETURNING 可以获取被删除的行信息,有助于日志记录或审计等用途。 ### 使用示例 #### 插入后返回新行数据 ```sql INSERT INTO employees (first_name, last_name, department_id) VALUES (&#39;John&#39;, &#39;Doe&#39;, 110) RETURNING employee_id, first_name, last_name, department_id; ``` 该语句将在插入新员工记录后返回新插入行的字段值,包括自增主键 `employee_id`。 #### 更新后返回更新后的数据 ```sql UPDATE employees SET first_name = &#39;Jane&#39; WHERE employee_id = 101 RETURNING employee_id, first_name, last_name, department_id; ``` 该语句将更新指定 `employee_id` 的记录,并返回更新后的完整行信息。 #### 删除后返回被删除的数据 ```sql DELETE FROM employees WHERE department_id = 110 RETURNING employee_id, first_name, last_name, department_id; ``` 此语句将删除 `department_id` 为 110 的所有员工记录,并返回这些被删除的行数据。 需要注意的是,RETURNING 子句返回的数据类型为结果集(Resultset),这意味着它可以被客户端程序直接处理,而不再需要额外的查询操作。这种设计显著提高了数据库操作的效率和简洁性。 ### 注意事项 - RETURNING 子句在 MySQL 中仅支持与单表操作一起使用,不支持多表更新或删除操作中的 RETURNING。 - 使用 RETURNING 时,应确保客户端驱动程序支持该功能,以正确解析返回的结果集。 - RETURNING 子句的使用应结合事务处理,以确保数据一致性,尤其是在需要回滚或提交操作的场景中。 MySQL 8.0.43RETURNING 的支持,使得数据库操作更加高效和简洁,特别是在需要获取 DML 操作影响行数据的场景下,极大简化了开发流程和提升了性能[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值