代码之家  ›  专栏  ›  技术社区  ›  Jeff Tilton

如何在CXI Oracle中调用函数,比较类型返回类型和布尔输入?

  •  0
  • Jeff Tilton  · 技术社区  · 6 年前

    我想打电话给 COMPARE function DBMS_COMPARISON package

    我首先通过

    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中指定,以及如何为 函数调用

    1 回复  |  直到 6 年前
        1
  •  0
  •   Anthony Tuininga    6 年前

    无论如何,这里有一个简单的例子对我很有用!关键是将“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",)))
    

    这将输出值

    真的 假