我试图插入一个记录到oracle数据库使用一个过程。记录已插入,但出现异常。
public class Myproc extends StoredProcedure {
public ThresholdOperationsSP(JdbcTemplate jdbcTemplate, String sql) {
super(jdbcTemplate, sql);
// Declare IN params
declareParameter(new SqlParameter("i_unique_col", Types.VARCHAR));
declareParameter(new SqlParameter("i_action", Types.VARCHAR));
declareParameter(new SqlParameter("i_table", Types.VARCHAR));
declareParameter(new SqlParameter("i_columns", Types.VARCHAR));
declareParameter(new SqlParameter("i_values", Types.VARCHAR));
declareParameter(new SqlParameter("i_where_col", Types.VARCHAR));
declareParameter(new SqlParameter("i_where_values", Types.VARCHAR));
declareParameter(new SqlParameter("i_connection", Types.VARCHAR));
// Declare OUT params
declareParameter(new SqlOutParameter("o_unique_id", Types.INTEGER));
declareParameter(new SqlOutParameter("o_proc_msg", Types.VARCHAR));
declareParameter(new SqlOutParameter("o_proc_code", Types.INTEGER));
declareParameter(new SqlOutParameter("o_sql", Types.VARCHAR));
compile();
}
@SuppressWarnings("unchecked")
public Map<String, Object> execute(String connectionName, String tableName, String action,
String unqiueIdColumn, String colNames, String newValues, String whereColNames, String whereColValues) {
// Process input params & assign to map
Map<String, Object> inParams = new HashMap<String, Object>();
inParams.put("i_unique_col", unqiueIdColumn);
inParams.put("i_action", action);
inParams.put("i_table", tableName);
inParams.put("i_columns", colNames);
inParams.put("i_values", newValues);
inParams.put("i_where_col", whereColNames);
inParams.put("i_where_values", whereColValues);
inParams.put("i_connection", connectionName);
// Execute SP
Map<String, Object> resultSummary = execute(inParams);
System.out.println(resultSummary);
return resultSummary;
}
将上述代码调用为:
Map<String, Object> resultsSummary = new Myproc(jdbcTemplate,"MYPROCEDURE").execute("CON1","table1","INSERT","COL1","col2","33",null,null);
以上代码调用以下过程;
create or replace procedure MYPROCEDURE
(
i_unique_col in varchar2,
i_action in varchar2,
i_table in varchar2,
i_columns in varchar2,
i_values in varchar2,
i_where_col in varchar2,
i_where_values in varchar2,
i_connection in varchar2,
o_unique_id out number,
o_sql out varchar2,
o_proc_msg out varchar2,
o_proc_code out number
)
as
p_c_proc_name constant varchar2(50):= 'MYPROCEDURE';
p_v_err_cd number;
p_v_err_msg varchar2(500);
p_v_result varchar2(1);
p_v_timestam timestamp with time zone;
p_v_values varchar2(32767);
p_v_sql varchar2(32767);
p_v_where varchar2(32767);
begin
dbms_application_info.set_module (module_name=> p_c_proc_name, action_name=> 'PROCEDURE INSERT-EDIT ACTIONS');
if upper(i_connection) = 'CON1' then
p_v_values := ''''||replace(i_values,',',''',''')||'''';
if upper(i_action) = 'INSERT' then
case when i_unique_col is not null then
p_v_sql := 'insert into uno_comp.'||i_table||' ('||i_columns||' ) values ('||p_v_values||') returning '||i_unique_col||' into :1' ;
execute immediate p_v_sql using out o_unique_id ;
else
p_v_sql :='insert into uno_comp.'||i_table||' ('||i_columns||' ) values ('||p_v_values||')';
execute immediate p_v_sql;
end case;
commit;
end if;
p_v_result := uno_comp.ulog('INFO', p_c_proc_name, 'Successfully performed insert-edit actions '|| p_v_sql, null, null, null );
o_proc_msg := 'procedure Edit Action Complete.';
o_proc_code := 0;
end if;
end MYPROCEDURE;
执行语句时发生错误
Map<String, Object> resultSummary = execute(inParams);
组织。springframework。jdbc。BadSqlGrammarException:CallableStatementCallback;错误的SQL语法[{调用MYPROCEDURE(?,,,,,,,,,,,,,,,,,?)}];嵌套的异常是java。sql。SQLException:ORA-06502:PL/SQL:数字或值错误:字符到数字转换错误\nORA-06512:第1行\n“
虽然记录已成功插入数据库,但在执行语句后会发生错误。
您应该使用JDBC CallableStatements来调用过程。如何使用Callable语句
一个工作示例如下-
import java.sql.*;
public class Proc
{
public static void main(String[] args) throws Exception
{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe","system","oracle");
CallableStatement stmt=con.prepareCall("{call insertR(?,?)}");
stmt.setInt(1,1011);
stmt.setString(2,"Amit");
stmt.execute();
System.out.println("success");
}
}
程序结构如下---
create or replace procedure "INSERTR"
(id IN NUMBER,
name IN VARCHAR2)
is
begin
insert into user420 values(id,name);
end;
/
有没有办法在mybatis结果映射中指定一个字符串最多应包含20个字符?或者如何设置精度,如数字(4,2)? 例如,我有一个如下所示的结果图: 我可以将int的位数限制为只有1,在浮点数上的“.”后面显示N个元素,或者将字符串大小限制为一定的数字吗? 我正在处理的视图具有以下列结构: 编辑1:每当我试图调用存储过程在此视图中添加新项时...我会得到这个错误: 我创建了一个用于测试的类,该类尝试调用
在函数中,我在这一行上有ORA-06502错误: 我看这里没有任何转换问题/完全困惑/
下面是表上web方法适配器的错误,该适配器具有MIH_触发器。 (65000/6502)ORA-06502:PL/SQL:数字或值错误:字符到数字转换错误ORA-06512:在“B2B_OPS_BUILD_ADMIN.MIH_TRIGGER”第2行ORA-04088:执行触发器“B2B_OPS_BUILD_ADMIN”时出错。米尤触发器' 下面是MIH_TRIGGER引用,每当更新OFFSET列时
我以不同的方式尝试了以下代码,比如去掉while或if,但是当我把它们放在一起(if和while)时,我总是在最后得到错误。。。 错误: 通过将变量“a”的声明方式更改为: *注意,这里的显著变化是使用VARCHAR2而不是CHAR(不是更大的长度)。根据@user272735的回答,这是关键。
我的桌子是: 我正在尝试将上述表格从csv文件导入oracle数据库中的预定义表格。下面是要导入上表的代码(pl sql代码)。 代码: 但在sql developer中运行时,我收到以下错误: ORA-06502:PL/SQL:数字或值错误:字符到数字的转换错误ORA-06512:在“系统读取文件”的第36行ORA-06512:在第2行 但当我直接输入值(通过使用插入查询)f_empno,f_h
我在执行触发器时遇到以下错误: 请说明问题的原因。 编辑 数据类型: