oracle存储过程中动态SQL Insert Into 的问题
对于varchar类型数据的插入,一般的Insert Into只需要:
INSERT INTO TBNAME (VARC1,VARC2) VALUES ('s1', 's2')
就可以了,但是动态SQL中应该怎么操作,我的存储过程是这样的:
CREATE or replace procedure proInsertCustInfo(
v_Names in VARCHAR2,
v_Values in VARCHAR2) IS
v_Cursor NUMBER;
v_CreateString VARCHAR2(500);
vID number;
begin
v_Cursor := DBMS_SQL.OPEN_CURSOR;
v_CreateString := 'INSERT INTO CSCUSTOM ( CUSTID, CUSTSTATDATE, ' || v_Names || ')' || ' VALUES (custom_id_seq.nextval, sysdate, ' || v_Values || ')';
DBMS_SQL.PARSE(v_Cursor, v_CreateString, DBMS_SQL.NATIVE);
DBMS_SQL.CLOSE_CURSOR(v_Cursor);
commit work;
end proInsertCustInfo;
我现在需要在java中调用,
附java代码:
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection ("jdbc:oracle:thin:@172.18.8.4:1521:ORCL", "scott","tiger");
CallableStatement procnone = conn.prepareCall ("begin proInsertCustInfo(?,?,?); end;");
procnone.setString(1, m_Names);
procnone.setString(2, m_Values);
procnone.execute();
上面的存储过程是正确的,我将我的Java代码中的m_Names和m_Values直接copy到sql*plus work sheet中执行insert into操作完全正确,在sql*plus中执行存储过程也没有问题,但是无法插入数据,现在的问题据我看是在v_Values上面。
假设我要传 3个参数(全是varchar2型):值分别是:hello, you, are
正常的sql是insert into CSCUSTOM (a,b,c) VALUES ('HELLO' ,'you', 'are')
在上面的代码中应该如何做呢,就是v_Values在java中应该如何赋值呢。