PL SQL Cursor For循环:将值添加到同一变量中并输出总和

时间:2017-04-27 02:44:14

标签: sql plsql

我正在尝试在接受studentID作为输入的函数中计算GPA。我的问题是,当循环通过游标集时,变量public void theQuery(String query){ Connection con = null; Statement st = null; try{ con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/dbsystem","root",""); st = con.createStatement(); st.executeUpdate(query); JOptionPane.showMessageDialog(null,"Success!"); }catch(Exception ex){ JOptionPane.showMessageDialog(null,ex.getMessage()); } } 不会自行添加。我添加了lv_gpa_calc以确保它正确地通过光标设置,并在屏幕上显示DBMS_OUTPUT.PUT_LINE应该是什么的正确的单独行值,但是当它在函数中返回时SQL块,它不是将所有这些值一起添加。你能否在CURSOR FOR LOOP中为变量自身设置一个变量?

更新:初始化lv_gpa_calc修复了变量值未添加到自身的问题。

lv_gpa_calc

1 个答案:

答案 0 :(得分:0)

代码中的问题是变量lv_gpa_calc未初始化。将任何内容添加到NULL将导致NULL

简化工作测试案例:

--DROP TABLE my_numbers;

CREATE TABLE my_numbers (
  id NUMBER
);
/

BEGIN
  FOR l_i IN 1..10 LOOP
    INSERT INTO my_numbers VALUES (DBMS_RANDOM.RANDOM);
  END LOOP;
  COMMIT;
END;
/

SELECT * FROM my_numbers;
/

DECLARE
  CURSOR cur IS
    SELECT id
      FROM my_numbers;

  l_sum NUMBER(10) := 0;
BEGIN
  FOR rec IN cur LOOP    
    l_sum := l_sum + rec.id;    
    DBMS_OUTPUT.PUT_LINE('l_sum = ' || l_sum);
  END LOOP;
  DBMS_OUTPUT.PUT_LINE('Sum = ' || l_sum);
END;
/

重要的一点是:

l_sum NUMBER(10) := 0;

如果没有初始化:=0,它将无效。