将参数传递给oracle数据库中的过程的方法

时间:2015-07-27 09:35:55

标签: java oracle

jsp页面中的代码

cs=conn.prepareCall("{call held('"+session.getAttribute("roll")+"')}");
                        cs.executeUpdate();
oracle数据库程序中的

create or replace procedure "Held"
(s in Varchar2)
    l_col_name varchar2(30);
begin
    SELECT SUBJECTCODE 
    into l_col_name
    FROM table02 
    WHERE SERIALNUMBER = '1';

    execute immediate
        'UPDATE TABLE01 SET '|| l_col_name || ' = '
              || l_col_name || ' + 1 WHERE Rollno = s'
    ;
end;

以下是错误

java.sql.SQLException: ORA-00904: "S": invalid identifier ORA-06512: at "ROHIT.HELD", line 12 ORA-06512: at line 1

请纠正它

我试图获取会话的值,即从jsp中的代码并尝试在oracle数据库中使用它.... 我使用s作为变量来存储该值并在where子句

中使用它

提出解决方案

1 个答案:

答案 0 :(得分:1)

我不知道jsp方面是否正确,但你的程序中明显有错误。

  

发生ORA-00904时,必须按原样输入有效的列名   丢失或输入的内容无效。

在这里,您的语句WHERE Rollno = s被理解为'列rollno等于列s',但列s不存在。我想你只需要将s移出字符串。

execute immediate
    'UPDATE TABLE01 SET '|| l_col_name || ' = '
          || l_col_name || ' + 1 WHERE Rollno = ''' || s || ''''
;