在sap中等效于oracle类型的布尔值

时间:2015-07-24 10:50:27

标签: oracle plsql sap abap

从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可用。

2 个答案:

答案 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语句只有静态表单。