sap中oracle类型布尔值的等价物
我在从ABAP调用存储过程时遇到问题。 我使用标准的ABAP类cl_sql_语句及其方法执行_过程并设置_参数。例如,被调用的过程只有一个布尔输入参数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
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文档中说:“对于实际参数,您可以使用由冒号(:);”标识的文本或主机变量。”对于文本,没有正确或错误的特殊等价物。谢谢您的回答,我为我的帖子中存在的一些不准确之处道歉。我不能修改这个程序,因为这不仅仅是我的不愿意和许可协议的要点。谢谢你的回答,我为我的帖子中存在的一些错误道歉。我不能修改这个程序,因为这不仅仅是我的不情愿和许可协议的问题。