mybatis调用存储过程
Calling a stored procedure in mybatis
在我的 Oracle 数据库中我有一个存储过程 TEST_PROC():
create or replace PROCEDURE TEST_PROC
(
PARAM_1 IN NUMBER
, PARAM_2 IN NUMBER
) AS
BEGIN
INSERT INTO sometable(VALUE1, VALUE2) VALUES (PARAM_1, PARAM_2);
END TEST_PROC;
在 Oracle SQL Developer 中,我可以使用 Call TEST_PROC(1,2)
调用此过程
现在我想使用 mybatis 从我的 java 应用程序调用这个过程。我的映射器 XML 文件的相关部分如下所示:
<insert id="insertData" parameterType="model" statementType="CALLABLE">
{call TEST_PROC(
#{param_1, jdbcType=INTEGER,mode=IN},
#{param_2, jdbcType=INTEGER,mode=IN}})}
</insert>
这应该等同于我在 documentation 中找到的这个 mybatis 函数调用(区别在于我的程序没有 return 任何值):
<select id="selectBlog" resultSets="blogs,authors" resultMap="blogResult" statementType="CALLABLE">
{call getBlogsAndAuthors(#{id,jdbcType=INTEGER,mode=IN})}
</select>
但是mybatis好像找不到程序,我得到错误码:
; bad SQL grammar []; nested exception is java.sql.SQLException:
ORA-06550: Zeile 1, Spalte 7: PLS-00201: identifier
'TEST_PROC' must be declared
我做错了什么?
我不知道 Java 也不知道 YourBatis(开个玩笑;MyBatis),但是 - 对于 Oracle,它看起来好像是你连接的用户不包含该程序。
我的意思是:我无法访问名称包含 TEST
作为其名称第一部分的程序:
SQL> select object_name from all_objects where object_type = 'PROCEDURE'
2 and upper(object_name) like 'TEST%';
no rows selected
所以,当我调用它时,我得到了和你一样的错误:
SQL> exec test_proc;
BEGIN test_proc; END;
*
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00201: identifier 'TEST_PROC' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
SQL>
因此,请检查您是否连接到在 SQL Developer 中测试程序时使用的同一用户。
在我的 Oracle 数据库中我有一个存储过程 TEST_PROC():
create or replace PROCEDURE TEST_PROC
(
PARAM_1 IN NUMBER
, PARAM_2 IN NUMBER
) AS
BEGIN
INSERT INTO sometable(VALUE1, VALUE2) VALUES (PARAM_1, PARAM_2);
END TEST_PROC;
在 Oracle SQL Developer 中,我可以使用 Call TEST_PROC(1,2)
现在我想使用 mybatis 从我的 java 应用程序调用这个过程。我的映射器 XML 文件的相关部分如下所示:
<insert id="insertData" parameterType="model" statementType="CALLABLE">
{call TEST_PROC(
#{param_1, jdbcType=INTEGER,mode=IN},
#{param_2, jdbcType=INTEGER,mode=IN}})}
</insert>
这应该等同于我在 documentation 中找到的这个 mybatis 函数调用(区别在于我的程序没有 return 任何值):
<select id="selectBlog" resultSets="blogs,authors" resultMap="blogResult" statementType="CALLABLE">
{call getBlogsAndAuthors(#{id,jdbcType=INTEGER,mode=IN})}
</select>
但是mybatis好像找不到程序,我得到错误码:
; bad SQL grammar []; nested exception is java.sql.SQLException: ORA-06550: Zeile 1, Spalte 7: PLS-00201: identifier 'TEST_PROC' must be declared
我做错了什么?
我不知道 Java 也不知道 YourBatis(开个玩笑;MyBatis),但是 - 对于 Oracle,它看起来好像是你连接的用户不包含该程序。
我的意思是:我无法访问名称包含 TEST
作为其名称第一部分的程序:
SQL> select object_name from all_objects where object_type = 'PROCEDURE'
2 and upper(object_name) like 'TEST%';
no rows selected
所以,当我调用它时,我得到了和你一样的错误:
SQL> exec test_proc;
BEGIN test_proc; END;
*
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00201: identifier 'TEST_PROC' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
SQL>
因此,请检查您是否连接到在 SQL Developer 中测试程序时使用的同一用户。