1

我有一个奇怪的问题。当我尝试使用 cursor.call_func 方法调用 oracle 存储函数时,我收到 OCI-22062 异常。我正在使用 Python 3.2 和 cx_Oracle 5.1.2。它通常看起来像这样:

这是包 pkg_planista 的函数头:

FUNCTION zatwierdz_plan (p_pl_id             IN dz_plany.ID%TYPE,
                         p_czy_nowy_algorytm IN BOOLEAN DEFAULT FALSE, 
                         p_czy_prz_grup      IN BOOLEAN DEFAULT FALSE
) RETURN NUMBER;

这就是我所做的:

print(proc_name, retType, params, keyword_params)
res = self.cursor.callfunc(proc_name, retType, params, keyword_params)

上面的这个打印打印:

pkg_planista.zatwierdz_plan <class 'int'> [83, False] {}

并且在执行 callfunc 时,会引发 OCI-22062 错误:cx_Oracle.DatabaseError: OCI-22062: invalid input string [False]

我应该如何传递布尔参数以使其工作?

4

1 回答 1

0

我必须找到解决此问题的方法,因为我找不到使 callfunc 正常工作的方法。

在这个解决方法中,我使用了一个为其他目的而创建的临时表,但这正是我所需要的。

我将 callfunc 更改为执行并使其如下所示:

self.cursor.execute("""
        declare
        result number;
        begin
        result := pkg_planista.zatwierdz_plan(:pid, :alg = 1);
        INSERT INTO tmp_dz_v_planista_pracownicy values (result);
        end;
        """, {'pid': pl_id, 'alg': int(new_algorithm)})
ret = self.cursor.execute("SELECT * FROM tmp_dz_v_planista_pracownicy")

这样我就可以调用函数并接收它的返回值。tmp_dz_v_planista_praconicy 表只是一个临时表,其中有一列类型为 NUMBER。

于 2013-06-28T09:13:40.177 回答