相当于oracle类型布尔在sap



我在从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驱动程序不支持向PL/SQL存储过程传递BOOLEAN参数(建议用第二个PL/SQL过程包装PL/SQL过程)。但是我不想使用上面的选项,因为已经有很多包/SP可用。

Oracle文档不清楚PL/SQL布尔值实际上是如何表示的。还有一个问题讨论了在Oracle数据库字段中使用布尔类型(这里不太相关,但提供了一些背景知识)。

来自PL/SQL文档:

BOOLEAN数据类型不带参数。只有值TRUE, FALSE和NULL可以分配给BOOLEAN变量。

不能在数据库列中插入值TRUE和FALSE。不能在BOOLEAN变量中选择或获取列值。从SQL查询中调用的函数不能接受任何BOOLEAN参数。内置SQL函数(如TO_CHAR;要在输出中表示布尔值,必须使用IF-THEN或CASE结构将布尔值转换为其他类型,例如0或1、'Y'或'N'、'true'或'false',等等。

考虑到这一点,我知道你不想这样做,你可能需要改变你传递给存储过程的参数类型(例如,使用单个字符或整数),然后使用逻辑将其视为布尔值

在SAP文档中说:

几乎所有对指定数据库系统有效的SQL语句都可以包含在EXEC和ENDEXEC之间

也许如果我尝试在这部分本地pl/sql代码我得到结果…

编辑:我把这个代码片段,它是好的。

EXEC SQL.
   BEGIN
     print_boolean(TRUE); 
   END;
ENDEXEC.

但是有一个问题。这个sql语句只有静态形式

相关内容

  • 没有找到相关文章

最新更新