Я хотел бы прочитать поле boolean
из базы данных Oracle (11g), но не могу этого сделать, вероятно, из-за того, что 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: выражение имеет неверный тип"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: ORA-00920: недопустимый реляционный оператор"
У меня нет идей, как это можно исправить.
Проблема определенно не связана с правами доступа к базе данных (поскольку решение "dbms_output" работает). Кроме того, другие поля из dbms_utility
можно прочитать с помощью простого SELECT dbms_utility.<something> from dual;
, например. SELECT dbms_utility.get_endianness FROM DUAL;
v$instance
, чтобы увидеть, есть ли несколько экземпляров)? - person Justin Cave   schedule 03.03.2016