我正在尝试在接受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
答案 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
,它将无效。