`

into多个字段,if语句

 
阅读更多
create or replace procedure SFGL_SYNCJM_TEMP(p_czr    in varchar2,
                                             res_str  OUT VARCHAR2,
                                             res_code OUT VARCHAR2) is
  /**
  *  同步临时表
  *  功能:遍历减免费用临时表,先根据应缴用户、学年、费用类型去更新应缴费用表的'已缴费用'字段(减免就相当于已缴),
  *  然后插入一条减免数据到缴费记录表中,最后统计这个学生减免的总费用更新学生信息表中的'减免字段'。
  *  2015年11月16日
  *   p_czr 操作人
  *   res_str 返回执行结果
  *   res_code 返回结果代码
  */
  v_yjfyid sfgl_yjfy.yjfyid%TYPE; -- 应缴费用表的id
  v_fy sfgl_yjfy.fy%TYPE; -- 应缴费用表的费用字段
  v_yjfy sfgl_yjfy.yjfy%TYPE; -- 应缴费用表的已缴费用

begin
  for rec_jmfy in (SELECT * FROM sfgl_jmfy_temp) loop
  --根据应缴用户、学年、费用类型查找应缴费用的id
    SELECT a.YJFYID,a.fy,a.yjfy into v_yjfyid,v_fy,v_yjfy
      FROM sfgl_yjfy a
     WHERE a.yjyh in (SELECT s.xsid FROM sfgl_xsxx s WHERE s.xh = rec_jmfy.xh)
       and a.xn = rec_jmfy.xn
       and a.fylx = rec_jmfy.jmlx
     group by a.YJFYID,a.fy,a.yjfy;
    --更新应缴费用的'已缴费用'字段,如果应缴费用表中的(已缴费用+减免费用)<费用,则累加已缴费用;
    --如果应缴费用表中的已缴费用!=费用 并且 (已缴费用+减免费用)>费用,则直接等于费用;当已缴费用=费用时不操作 
    if v_fy > (v_yjfy+rec_jmfy.jmje) then 
       update sfgl_yjfy set YJFY = YJFY+rec_jmfy.jmje WHERE YJFYID = v_yjfyid;
       --插入一条减免数据到缴费记录表  
      insert into sfgl_jfjl
        (JFJLID,YJFYID,JFLX,JE,SFDY,modified_Time,modified_By,create_Time,create_By)
      values
        (Xl_Sfgl_Jfjl.NEXTVAL,v_yjfyid,'3',rec_jmfy.jmje,'0',sysdate,p_czr,sysdate,p_czr);
        
       -- 统计减免费用到学生信息表的'减免费用'字段 
      update sfgl_xsxx set jmfy = jmfy + rec_jmfy.jmje
       WHERE xh = rec_jmfy.xh;
       
      elsif v_fy != v_yjfy and v_fy < (v_yjfy+rec_jmfy.jmje) then
         update sfgl_yjfy set YJFY = v_fy WHERE YJFYID = v_yjfyid;
         --插入一条减免数据到缴费记录表  
        insert into sfgl_jfjl
          (JFJLID,YJFYID,JFLX,JE,SFDY,modified_Time,modified_By,create_Time,create_By)
        values
          (Xl_Sfgl_Jfjl.NEXTVAL,v_yjfyid,'3',v_fy-v_yjfy,'0',sysdate,p_czr,sysdate,p_czr);
         -- 统计减免费用到学生信息表的'减免费用'字段 
        update sfgl_xsxx set jmfy = jmfy + v_fy-v_yjfy
         WHERE xh = rec_jmfy.xh;
    end if;

  end loop;
 
  COMMIT;
  res_str  := '执行成功';
  res_code := 'S';
exception
     when others then      
       --res_str:=res_str||':程序运行出现内部错误,请联系管理员。'||dbms_utility.format_error_backtrace()||'---'||SQLCODE||'---'||SQLERRM;
       res_str  := '执行失败';
       res_code := 'E';
       rollback;
end SFGL_SYNCJM_TEMP;

 ----摘自收费管理系统,导入减免

分享到:
评论

相关推荐

    SQL 语句 将一个表中用特殊字符分割的字段转换成多行数据.docx

    在数据库中,经常会遇到将一个字段中的特殊字符分割的字符串转换成多行数据的情况。这是一个常见的需求,但是网上提供的解决方案往往非常复杂,难以理解和实现。为了解决这个问题,我们可以创建一个字符串分割函数,...

    精彩编程与编程技巧-VB数据库多字段记录的录入...

    - **多字段记录的录入**: 在本例中,我们关注的是如何在SQL Server数据库中插入包含多个字段的记录。 #### 三、多字段记录录入的具体实现 - **插入语句的构造**: - 使用`INSERT INTO`语句来向表中插入新的记录。 ...

    qt 封装的类 表根据字段名和值 生成sql语句

    这个类可以根据实际需求进行扩展,例如添加更多的SQL语句类型(如DELETE),或者对输入参数进行更严格的检查和错误处理。 请注意,这个封装仅仅是一个基础示例,实际使用时需要考虑SQL注入的安全性,对输入进行适当...

    HIVE-SQL操作语句

    该命令创建了一个名为 `pokes` 的新表,并定义了两个字段:`foo` 类型为 `INT` 和 `bar` 类型为 `STRING`。 如果希望创建分区表,可以使用以下命令: ```sql hive&gt; CREATE TABLE invites (foo INT, bar STRING) ...

    SQL SERVE根据值查找所在的表和字段

    假设我们有一个复杂的数据库环境,其中包含多个表,并且每个表中有多个字段。现在我们需要找到一个特定值(例如:'610012')出现在哪些表中的哪些字段里。这个问题可以通过编写动态SQL来解决。 #### 二、技术原理 ...

    PGSQL统计一个数据库所有数据库空字段的函数

    ### PGSQL统计一个数据库所有数据库空字段的函数 在PostgreSQL(简称PGSQL)中,有时我们需要统计数据库中所有表的空字段数量。这在数据分析、数据清洗等场景下非常有用。下面详细介绍如何创建并使用一个自定义函数...

    SQL 函数 字段内容更新插入

    - `CONCAT()`:用于连接两个或多个字符串。 ```sql UPDATE 表名 SET 字段名 = CONCAT('前缀', 原字段名, '后缀') WHERE 条件; ``` - `REPLACE()`:替换字符串中的特定子串。 ```sql UPDATE 表名 SET 字段名 =...

    MYSQL的数据库SQL语句的基本使用.doc

    * 插入多条数据:insert into 表名(字段列表) values(数据值列表),(数据值列表),...; * 更新数据:update 表名 set 字段名=新值 where 条件; * 删除数据:delete from 表名 where 条件; 五、查询操作 * 查看表数据...

    mysql数据库字段复制

    它需要遍历每个字段,构建如`field1=:field1, field2=:field2`这样的字符串,并将值绑定到占位符上。 此外,如果需要按组复制,可以增加一个组的概念,每次复制完一个组后才进行下一次复制。这可以通过添加一个额外...

    mybatis动态插入sql语句的编写(csdn)————程序.pdf

    这在处理动态SQL时非常有用,比如在多个条件组合时,可以去除多余的逗号或其它字符,保持SQL语句的正确性。 举例说明,假设我们有一个User表,包含id, name, email, password等字段,但有时我们可能只需要插入name...

    sqlserver语句大全.docx

    12. **高级查询**:`UNION`, `UNION ALL`, `EXCEPT`, `EXCEPT ALL`, `INTERSECT` 和 `INTERSECT ALL` 用于合并或比较多个查询结果。 13. **连接查询**:左连接、右连接和全外连接用于合并两个表的数据。左连接保留...

    Oracle语句大全

    这个例子创建了一个名为Employees的表,包含EmployeeID(主键),FirstName,LastName和Department四个字段。INT和VARCHAR2是数据类型,分别代表整数和可变长度的字符串。 接着,我们可以使用ALTER TABLE语句来修改...

    SQL语句中UPDATE的三种用法.docx

    如果需要同时修改多条记录中的多个字段,可以使用该用法。例如,将`bs`为1的记录的`password`字段设置为`*`,`remark`字段也设置为`*`。 ```sql UPDATE t_test t SET t.password = '*', t.remark = '*' WHERE t.bs ...

    数据库基本语句

    还可以同时更新多个字段: ```sql UPDATE users SET name = '李四新', email = 'lisi_new@example.com' WHERE id = 2; ``` #### 改变表结构 (ALTER TABLE) 更改表结构使用`ALTER TABLE`语句。例如,添加一个新...

    sql 语句 功能全

    - **解释**:创建名为`tabname`的新表,其中包含多个字段及其数据类型。`NOT NULL`表示该字段不允许为空,`PRIMARY KEY`表示该字段作为主键。 ##### 根据已有表创建新表 方法A: ```sql GO USE 原数据库名; GO ...

    经典SQL语句大全

    1、1=1,1=2的使用,在SQL语句组合时用的较多 “where 1=1” 是表示选择全部 “where 1=2”全部不选, 如: if @strWhere !='' begin set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + ...

    SQL语句大全集合

    批处理可以将多个SQL语句作为一个整体执行,这样可以提高执行效率,尤其是在处理大量数据时。但需要注意的是,如果批处理中的某条语句出现错误,则整个批处理都会失败。 **示例:** ```sql -- 创建一个简单的表 ...

    常用的SQL语句.pdf

    当一个SQL语句提交给数据库服务器时,服务器首先会进行整体的语法分析,检查语句的结构是否正确,接着优化SQL语句的执行计划,然后编译并执行。在语法分析阶段,服务器会验证命令、关键字、表名和字段名的正确性。 ...

    SQL SERVER 语句大全.rar

    1. 使用JOIN操作:JOIN用于连接两个或多个表,如INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN。 2. GROUP BY与聚合函数:GROUP BY用于按列分组,配合SUM、COUNT、AVG、MAX、MIN等聚合函数进行统计计算。 3. 使用子...

Global site tag (gtag.js) - Google Analytics