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 中测试程序时使用的同一用户。