Как вызвать функцию в cx_Oracle с COMPARISON_TYPE returnType и логическим вводом? - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь вызвать функцию COMPARE из пакета DBMS_COMPARISON

Сначала я создаю сравнение с помощью

import cx_Oracle

host = host
service_name = service_name
port = port
password = password
username = username


dsn = cx_Oracle.makedsn( host, port,
                         service_name=service_name )
db = cx_Oracle.connect(username, password, dsn )

keyword_parameters = {
        'comparison_name':'my_comparison',
        'schema_name':'my_schema',      
        'object_name':'table_name',
        'dblink_name':'db_link'
}
cur.callproc('DBMS_COMPARISON.CREATE_COMPARISON', keywordParameters = keyword_parameters)

Теперь яхочу вызвать функцию DBMS_COMPARISON.COMPARE

DBMS_COMPARISON.COMPARE(
   comparison_name  IN   VARCHAR2,
   scan_info        OUT  COMPARISON_TYPE,
   min_value        IN   VARCHAR2   DEFAULT NULL,
   max_value        IN   VARCHAR2   DEFAULT NULL,
   perform_row_dif  IN   BOOLEAN    DEFAULT FALSE)
RETURN BOOLEAN;

Я пробовал

cur.callfunc('DBMS_COMPARISON.COMPARE', int,
             keywordParameters={'comparison_name':'my_comparison', 'scan_info':cur.var(int), 'perform_row_dif':'TRUE'})

Или какой-то вариант.У меня возникают проблемы с пониманием того, как установить returnType, указанный в callfunc, а также как установить требуемое логическое значение для вызова функции DBMS_COMPARISON.COMPARE

1 Ответ

0 голосов
/ 24 октября 2018

Вот простой пример, который работает для меня, в любом случае!Ключ заключается в том, чтобы передать тип «bool» вызову cursor.callfunc ().

create function IsNumber (a_Value varchar2) return boolean is
    t_Value number;
begin
    begin
        t_Value := to_number(a_Value);
        return true;
    exception
    when others then
        return false;
    end;
end;
/

И эквивалентный код Python выглядит следующим образом:

print(cursor.callfunc("IsNumber", bool, ("5",)))
print(cursor.callfunc("IsNumber", bool, ("Fred",)))

Это будетвыведите значения

True False

...