Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ORA-00907 when comparing ref cursors with BINARY_... columns #899

Closed
opendba opened this issue Apr 6, 2019 · 2 comments

Comments

Projects
None yet
3 participants
@opendba
Copy link
Contributor

commented Apr 6, 2019

Describe the bug
If ref cursor has BINARY_DOUBLE or BINARY_FLOAT columns, cursor comparison fails with ORA-00907.

Provide version info
Information about utPLSQL and Database version,

SQL> set serveroutput on
SQL> declare
  2    l_version varchar2(255);
  3    l_compatibility varchar2(255);
  4  begin
  5    dbms_utility.db_version( l_version, l_compatibility );
  6    dbms_output.put_line( l_version );
  7    dbms_output.put_line( l_compatibility );
  8  end;
  9  /
12.2.0.1.0
12.2.0

PL/SQL procedure successfully completed


SQL> select substr(ut.version(),1,60) as ut_version from dual;

UT_VERSION
------------------------------------------------------------
v3.1.6.2729

SQL> select * from v$version;

BANNER                                                                               CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production                0
PL/SQL Release 12.2.0.1.0 - Production                                                    0
CORE	12.2.0.1.0	Production                                                                0
TNS for Linux: Version 12.2.0.1.0 - Production                                            0
NLSRTL Version 12.2.0.1.0 - Production                                                    0

SQL> select * from nls_session_parameters;

PARAMETER                      VALUE
------------------------------ ----------------------------------------------------------------
NLS_LANGUAGE                   AMERICAN
NLS_TERRITORY                  AMERICA
NLS_CURRENCY                   $
NLS_ISO_CURRENCY               AMERICA
NLS_NUMERIC_CHARACTERS         .,
NLS_CALENDAR                   GREGORIAN
NLS_DATE_FORMAT                DD-MON-RR
NLS_DATE_LANGUAGE              AMERICAN
NLS_SORT                       BINARY
NLS_TIME_FORMAT                HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY              $
NLS_COMP                       BINARY
NLS_LENGTH_SEMANTICS           BYTE
NLS_NCHAR_CONV_EXCP            FALSE

17 rows selected


SQL> select substr(dbms_utility.port_string,1,60) as port_string from dual;

PORT_STRING
------------------------------------------------------------
x86_64/Linux 2.4.xx

Information about client software
Executed using ut.run('UT_TEST'); from PLSQL Developer.

To Reproduce

begin
  ut.run('UT_TEST');
end;
/

test utplsql
  Gives success for identical data with floats [.016 sec] (FAILED - 1)

Failures:
 
  1) success_on_same_data_float
      ORA-00907: missing right parenthesis
      ORA-06512: at "UT3.UT_DATA_VALUE_REFCURSOR", line 318
      ORA-06512: at "UT3.UT_COMPOUND_DATA_HELPER", line 596
      ORA-06512: at "UT3.UT_DATA_VALUE_REFCURSOR", line 309
      ORA-06512: at "UT3.UT_DATA_VALUE_REFCURSOR", line 366
      ORA-06512: at "UT3.UT_EQUAL", line 225
      ORA-06512: at "UT3.UT_EXPECTATION", line 26
      ORA-06512: at "UT3.UT_EXPECTATION", line 138
      ORA-06512: at "TDS2.UT_TEST", line 17
      ORA-06512: at "UT3.UT_DATA_VALUE_REFCURSOR", line 318
      ORA-06512: at "UT3.UT_COMPOUND_DATA_HELPER", line 596
      ORA-06512: at "UT3.UT_DATA_VALUE_REFCURSOR", line 309
      ORA-06512: at "UT3.UT_DATA_VALUE_REFCURSOR", line 366
      ORA-06512: at "UT3.UT_EQUAL", line 225
      ORA-06512: at "UT3.UT_EXPECTATION", line 26
      ORA-06512: at "UT3.UT_EXPECTATION", line 138
      ORA-06512: at "TDS2.UT_TEST", line 17
      ORA-06512: at line 6
Finished in .020824 seconds
1 tests, 0 failed, 1 errored, 0 disabled, 0 warning(s)

Expected behavior
Test should succeed.

Example code
Content of UT_TEST.pks:

create or replace package ut_test is

  --%suite(test for utplsql float)

  --%test(Gives success for identical data with floats)
  procedure success_on_same_data_float;

end ut_test;

Content of UT_TEST.pkb:

create or replace package body ut_test is

  procedure success_on_same_data_float
  as
    l_expected sys_refcursor;
    l_actual   sys_refcursor;
  begin
    open l_expected for
      select cast(3.14 as binary_double) as pi_double,
             cast(3.14 as binary_float) as pi_float
      from dual;
    open l_actual for
      select cast(3.14 as binary_double) as pi_double,
             cast(3.14 as binary_float) as pi_float
      from dual;
    --Act
    ut3.ut.expect( l_actual ).to_equal( l_expected );
  end;

end ut_test;
@opendba

This comment has been minimized.

Copy link
Contributor Author

commented Apr 7, 2019

Issue appeared after upgrade from 3.1.3 to 3.1.6

Thank you for a great product. Sometimes it was a real pain to work with original utPLSQL and you guys did an amazing job to make it great.

@lwasylow

This comment has been minimized.

Copy link
Member

commented Apr 7, 2019

Thanks a lot for reporting and fixing. Great work.

@lwasylow lwasylow closed this Apr 7, 2019

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.