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;

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

成绩:%.2f\n", i, j, avg); } } } // 计算总平均成绩使用jsqlparser拦截insert语句并添加字段字段值的基本步骤如下: 1. 创建自定义的 sum = 0; for (i = 0; i < course_count; i++) { sum += courses[i].Visitor类 创建一个继承自ExpressionDeParser类的Visitor类,用于处理insert语句中的字段字段值,score_total; } avg = sum / (6.0 * student_count); printf("总平均成绩:%.2例如: ``` public class InsertVisitor extends ExpressionDeParser { private List<Column> columns; private List<Expression> expressions; f\n", avg); } // 统计并输出每个同学已修学分 void total_credit() { int i, public InsertVisitor() { columns = new ArrayList<>(); expressions = new ArrayList<>(); } public List<Column> getColumns() { j; float sum; for (i = 0; i < student_count; i++) { sum = 0; return columns; } public List<Expression> getExpressions() { return expressions; } @Override public void for (j = 0; j < course_count; j++) { if (students[i].student_id == courses[j].student_id visit(Column column) { columns.add(column); super.visit(column); } @Override public void visit(Expression expression)) { sum += courses[j].credit; } } printf("学生姓名:%s\t已修学分: { expressions.add(expression); super.visit(expression); } } ``` 这里创建了一个InsertVisitor类,继承自Expression%.1f\n", students[i].name, sum); } } // 列出不及格学生清单 void fail_listDeParser类,并重写了visit(Column column)和visit(Expression expression)方法,用于处理insert语句中的字段字段() { int i, j; for (i = 0; i < student_count; i++) { for (j =值。 2. 解析原始的insert语句 使用jsqlparser提供的Statement对象解析原始的insert语 0; j < course_count; j++) { if (students[i].student_id == courses[j].student_id && courses[j].句,例如: ``` String sql = "insert into mytable (id, name) values (1, 'John')"; Statement statement =score_total < 60) { printf("学生姓名:%s\t不及格课程:%s\t不及格成绩 CCJSqlParserUtil.parse(sql); ``` 3. 创建自定义的StatementVisitor类 创建一个继承自StatementVisitorAdapter类:%d\n", students[i].name, courses[j].name, courses[j].score_total); } } } } ``` 的StatementVisitor类,用于处理insert语句中的字段字段值,例如: ``` public class InsertStatementVisitor extends Statement最后,我们可以实现一个简单的菜单来让用户选择所需的功能: ```c int main() { VisitorAdapter { @Override public void visit(Insert insert) { InsertVisitor visitor = new InsertVisitor(); insert.getColumns int choice; while (1) { printf("\n学生信息管理系统\n"); printf("1. 录入学().forEach(column -> column.accept(visitor)); insert.getItemsList().accept(visitor); List<Column> columns = visitor.getColumns(); 生信息\n"); printf("2. 修改学生信息\n"); printf("3. 删除学生信息\n"); printf List<Expression> expressions = visitor.getExpressions(); columns.add(new Column("new_column")); expressions.add(new StringValue("new_value")); insert.setColumns(columns); insert.setItemsList(new ExpressionList(expressions)); super.visit(insert); } } ``` 这里创建("4. 查询学生信息\n"); printf("5. 统计每个学生各门功课的平均成绩了一个InsertStatementVisitor类,继承自StatementVisitorAdapter类,并重写了visit(Insert insert)方法,用于处理insert并按平均成绩从高到低的次序排名输出\n"); printf("6. 统计并输出各班语句中的字段字段值。 4. 注册自定义的StatementVisitor类 注册自定义的StatementVisitor类,例如各门功课的平均成绩和总平均成绩\n"); printf("7. 统计并输出每个同: ``` CCJSqlParserManager manager = new CCJSqlParserManager(); manager.setStatementVisitor(new InsertStatementVisitor()); String sql =学已修学分\n"); printf("8. 列出不及格学生清单\n"); printf("9. "insert into mytable (id, name) values (1, 'John')"; Statement statement = manager.parse(new StringReader(sql)); ``` 退出系统\n"); printf("请选择功能:"); scanf("%d", &choice); switch (choice) { case 这里将InsertStatementVisitor类注册为StatementVisitor,用于拦截和处理insert语句。 5. 生成新的insert1: add_student(); break; case 2: modify_student(); break; case 3: delete语句 通过Statement对象的toString()方法,可以生成修改后的insert语句,例如: ``` String newSql = statement_student(); break; case 4: query_student(); break; case 5: rank_student(); break.toString(); System.out.println(newSql); ``` 这里得到的newSql就是拦截并添加字段字段值后的; case 6: avg_score(); break; case 7: total_credit(); break; case insert语句。 完整的示例代码如下: ``` public class InsertVisitor extends ExpressionDeParser { private List<Column8: fail_list(); break; case 9: exit(0); default: printf("输入有误> columns; private List<Expression> expressions; public InsertVisitor() { columns = new ArrayList<>(); expressions = new ArrayList<>(); ,请重新输入!\n"); break; } } return 0; } ``` 这样,一个简单的 } public List<Column> getColumns() { return columns; } public List<Expression> getExpressions() { return学生信息管理系统就完成了。当然,这只是一个基础版本,实际应用中还需要考虑更多的细节和功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值