在语句中读取 Oracle 布尔值 dbms_utility.is_cluster_database
Reading Oracle boolean filed dbms_utility.is_cluster_database in statement
我想从 Oracle 数据库 (11g) 读取 boolean
字段,但我无法这样做,可能是因为 Oracle 不完全支持布尔数据格式。
我感兴趣的领域是 dbms_utility.is_cluster_database
。
工作说明:
set serveroutput on;
BEGIN
IF dbms_utility.is_cluster_database THEN
dbms_output.put_line('true');
ELSE
dbms_output.put_line('false');
END IF;
END;
这条语句工作正常,但是我需要它作为 SQL 查询,例如 SELECT 'someValue' from dual;
我试过了:
SELECT dbms_utility.is_cluster_database FROM DUAL;
失败并显示消息 "ORA-06553: PLS-382: expression is of wrong type"
SELECT CAST(dbms_utility.is_cluster_database AS INT) FROM DUAL;
失败并显示相同的消息
SELECT sys.diutil.bool_to_int(dbms_utility.is_cluster_database) from DUAL;
失败并显示相同的消息
SELECT CASE WHEN (dbms_utility.is_cluster_database) THEN 1 ELSE 0 END AS MY_BOOLEAN_COLUMN FROM DUAL;
失败并显示消息 "SQL Error: ORA-00920: invalid relational operator"
我不知道如何修复它。
问题绝对与数据库访问权限无关(因为 "dbms_output" 解决方案有效)。此外,可以使用简单的 SELECT dbms_utility.<something> from dual;
读取 dbms_utility
中的其他字段,例如。 SELECT dbms_utility.get_endianness FROM DUAL;
我想不可能读取 SQL 中的布尔值,但您可以编写一个包装函数来分析该布尔值和 return varchar2/int/number.
或者,在您的特定情况下,您可以这样做:
select value from v$parameter where name='cluster_database';
按照@MaxU 的建议,您可以创建包装函数。
create or replace function is_cluster_database return number is
begin
return sys.diutil.bool_to_int(dbms_utility.is_cluster_database);
end is_cluster_database;
然后就这样用了
select is_cluster_database from dual;
当然,结果是数字类型。
is_cluster_database
0
我想从 Oracle 数据库 (11g) 读取 boolean
字段,但我无法这样做,可能是因为 Oracle 不完全支持布尔数据格式。
我感兴趣的领域是 dbms_utility.is_cluster_database
。
工作说明:
set serveroutput on;
BEGIN
IF dbms_utility.is_cluster_database THEN
dbms_output.put_line('true');
ELSE
dbms_output.put_line('false');
END IF;
END;
这条语句工作正常,但是我需要它作为 SQL 查询,例如 SELECT 'someValue' from dual;
我试过了:
SELECT dbms_utility.is_cluster_database FROM DUAL;
失败并显示消息 "ORA-06553: PLS-382: expression is of wrong type"SELECT CAST(dbms_utility.is_cluster_database AS INT) FROM DUAL;
失败并显示相同的消息SELECT sys.diutil.bool_to_int(dbms_utility.is_cluster_database) from DUAL;
失败并显示相同的消息SELECT CASE WHEN (dbms_utility.is_cluster_database) THEN 1 ELSE 0 END AS MY_BOOLEAN_COLUMN FROM DUAL;
失败并显示消息 "SQL Error: ORA-00920: invalid relational operator"
我不知道如何修复它。
问题绝对与数据库访问权限无关(因为 "dbms_output" 解决方案有效)。此外,可以使用简单的 SELECT dbms_utility.<something> from dual;
读取 dbms_utility
中的其他字段,例如。 SELECT dbms_utility.get_endianness FROM DUAL;
我想不可能读取 SQL 中的布尔值,但您可以编写一个包装函数来分析该布尔值和 return varchar2/int/number.
或者,在您的特定情况下,您可以这样做:
select value from v$parameter where name='cluster_database';
按照@MaxU 的建议,您可以创建包装函数。
create or replace function is_cluster_database return number is
begin
return sys.diutil.bool_to_int(dbms_utility.is_cluster_database);
end is_cluster_database;
然后就这样用了
select is_cluster_database from dual;
当然,结果是数字类型。
is_cluster_database
0