从ABAP调用存储过程时遇到问题。 我使用标准的ABAP类cl_sql_statement及其方法execute_procedure和set_param。例如,调用过程具有单个布尔输入参数。
CREATE OR REPLACE PROCEDURE print_boolean (
p_in_flag BOOLEAN
) IS
ABAP代码段
DATA: ld_e_bool type char5,
ld_o_stat type ref to cl_sql_statement,
ld_r_data type ref to data.
***************************
ld_e_bool = 'FALSE'.
get references of ld_e_bool into ld_r_data.
ld_o_stat->set_param(DATA_REF = ld_r_data).
ld_o_stat->execute_procedure( 'print_boolean' ).
********************************************
在通话结束后,我发现了一个例外情况,其中包含:'错误的数字或类型的参数'。也许我需要另一种类型而不是char5 ......任何帮助都会受到赞赏。
一些观察: JDBC驱动程序不支持将BOOLEAN参数传递给PL / SQL存储过程(建议使用第二个PL / SQL过程包装PL / SQL过程)。但是我不想使用上面的选项,因为已经有很多软件包/ SP可用。
答案 0 :(得分:0)
Oracle documentation目前尚不清楚PL / SQL布尔值的实际表示方式。还有一个question讨论了在Oracle数据库字段中使用布尔类型(这里不太相关,但提供了一些背景知识)。
来自PL / SQL文档:
BOOLEAN数据类型不带参数。只能将值TRUE,FALSE和NULL分配给BOOLEAN变量。
您无法将值TRUE和FALSE插入数据库列。您无法选择或将列值提取到BOOLEAN变量中。从SQL查询调用的函数不能接受任何BOOLEAN参数。既不能内置SQL函数,如TO_CHAR;要在输出中表示BOOLEAN值,必须使用IF-THEN或CASE结构将BOOLEAN值转换为其他类型,例如0或1,'Y'或'N','true'或'false',依此类推
鉴于此,我知道您不想这样做,您可能需要更改传递给存储过程的参数类型(例如,使用单个字符或整数),然后使用逻辑来处理作为布尔值。
答案 1 :(得分:0)
在SAP doc中说:
几乎所有对所寻址的数据库系统有效的SQL语句都可以包含在EXEC和ENDEXEC之间
也许如果我尝试在本节中输入原生pl / sql代码,我会得到结果......
编辑:我把这段代码剪掉了,没关系。
EXEC SQL.
BEGIN
print_boolean(TRUE);
END;
ENDEXEC.
但有一个问题。这个sql语句只有静态表单。