sap中oracle类型布尔值的等价物

sap中oracle类型布尔值的等价物,oracle,plsql,abap,Oracle,Plsql,Abap,我在从ABAP调用存储过程时遇到问题。 我使用标准的ABAP类cl_sql_语句及其方法执行_过程并设置_参数。例如,被调用的过程只有一个布尔输入参数 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

我在从ABAP调用存储过程时遇到问题。 我使用标准的ABAP类cl_sql_语句及其方法执行_过程并设置_参数。例如,被调用的过程只有一个布尔输入参数

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存储过程(建议使用第二个PL/SQL过程包装PL/SQL过程)。但是我不想使用上面的选项,因为已经有很多包/SP可用。

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

从PL/SQL文档中:

布尔数据类型不接受任何参数。只能将值TRUE、FALSE和NULL分配给布尔变量

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

有鉴于此,我知道您不想这样做,您可能需要更改传递到存储过程中的参数类型(例如,使用单个字符或整数),然后使用逻辑将其视为布尔值。

不清楚PL/SQL布尔值的实际表示方式。还有一篇文章讨论了在Oracle数据库字段中使用布尔类型(此处不太相关,但提供了一些背景)

从PL/SQL文档中:

布尔数据类型不接受任何参数。只能将值TRUE、FALSE和NULL分配给布尔变量

不能将值TRUE和FALSE插入数据库列。不能选择列值或将列值提取到布尔变量中。从SQL查询调用的函数不能接受任何布尔参数。内置的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语句仅具有静态形式。

在SAP文档中说:

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

也许如果我试着把本机pl/sql代码放在这一部分,我会得到结果

编辑:我把这个代码剪断了,没关系

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

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

每次传递的布尔值是否相同?如果是这样的话,你可以给它一个默认值,它可能会也可能不会绕过你得到的错误。检查这个SCN帖子,它可能会有帮助,不幸的是,我不能使用默认值。关于您的参考,我只是按照本机sql语句的方向查看,但我并没有找到任何方法在我的案例中使用execute procedure语句。在sap文档中说:“对于实际参数,您可以使用由冒号(:);”标识的文本或主机变量。”对于文本,没有TRUE或FALSE特殊等价物。您每次传递的布尔值是否相同?如果是这样的话,你可以给它一个默认值,它可能会也可能不会绕过你得到的错误。检查这个SCN帖子,它可能会有帮助,不幸的是,我不能使用默认值。关于您的参考,我只是按照本机sql语句的方向查看,但我并没有找到任何方法在我的案例中使用execute procedure语句。在sap文档中说:“对于实际参数,您可以使用由冒号(:);”标识的文本或主机变量。”对于文本,没有正确或错误的特殊等价物。谢谢您的回答,我为我的帖子中存在的一些不准确之处道歉。我不能修改这个程序,因为这不仅仅是我的不愿意和许可协议的要点。谢谢你的回答,我为我的帖子中存在的一些错误道歉。我不能修改这个程序,因为这不仅仅是我的不情愿和许可协议的问题。