Skip to content

Support Oracle Database 18.3.0 or higher #187

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

Closed
yahonda opened this issue Jul 14, 2020 · 13 comments
Closed

Support Oracle Database 18.3.0 or higher #187

yahonda opened this issue Jul 14, 2020 · 13 comments

Comments

@yahonda
Copy link
Collaborator

yahonda commented Jul 14, 2020

Summary

ruby-plsql CI has been running Oracle Database 11.2.0 XE. I'm going to run CI against newer versions of Oracle database and found many of ruby-plsql unit tests fail using Oracle Database 18.3.0.

Works fine

  • Oracle Database 11.2.0 XE
  • Oracle Database 12.1.0.2 EE
  • Oracle Database 12.2.0.1 EE

Many of unit tests fail

  • Oracle Database 18.3.0 EE
  • Oracle Database 18.4.0 XE
  • Oracle Database 19.3.0 EE

Actual results with Oracle Database 18.3.0 EE

$ bundle exec rspec
.................................F..........................................................................***...............................FFF.FFFFFFFFFFFFF.................FFFFFFF..FFFFFFFFFF......FFFFFFFFFFFFFFFFFFF..................................................................FFFFFF..............................................................................................................................................................

Pending: (Failures listed here are expected and do not affect your suite's status)

  1) Parameter type mapping / Function or procedure with XMLType parameters should process XMLType parameters
     # Skip until furtuer investigation for #114
     # ./spec/plsql/procedure_spec.rb:269

  2) Parameter type mapping / Function or procedure with XMLType parameters should work when passing a NULL value
     # Skip until furtuer investigation for #114
     # ./spec/plsql/procedure_spec.rb:275

  3) Parameter type mapping / Function or procedure with XMLType parameters should assign input parameter to putput parameter
     # Skip until furtuer investigation for #114
     # ./spec/plsql/procedure_spec.rb:280


Failures:

  1) Connection session information should get database version
     Failure/Error: expect(@conn.database_version).to eq DATABASE_VERSION.split(".").map { |n| n.to_i }

       expected: [10, 2, 0, 4]
            got: [18, 3, 0, 0]

       (compared using ==)
     # ./spec/plsql/connection_spec.rb:426:in `block (3 levels) in <top (required)>'

  2) Parameter type mapping / Function with record parameter should execute function with named parameter and return correct value
     Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

     ArgumentError:
       Wrong field name :employee_id passed to PL/SQL record argument :p_employee
     # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
     # ./lib/plsql/procedure_call.rb:342:in `each'
     # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
     # ./lib/plsql/procedure_call.rb:227:in `add_argument'
     # ./lib/plsql/procedure_call.rb:185:in `block in construct_sql'
     # ./lib/plsql/procedure_call.rb:184:in `each'
     # ./lib/plsql/procedure_call.rb:184:in `map'
     # ./lib/plsql/procedure_call.rb:184:in `construct_sql'
     # ./lib/plsql/procedure_call.rb:11:in `initialize'
     # ./lib/plsql/procedure.rb:265:in `new'
     # ./lib/plsql/procedure.rb:265:in `exec'
     # ./lib/plsql/schema.rb:185:in `method_missing'
     # ./spec/plsql/procedure_spec.rb:808:in `block (3 levels) in <top (required)>'

  3) Parameter type mapping / Function with record parameter should execute function with sequential parameter and return correct value
     Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

     ArgumentError:
       Wrong field name :employee_id passed to PL/SQL record argument :p_employee
     # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
     # ./lib/plsql/procedure_call.rb:342:in `each'
     # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
     # ./lib/plsql/procedure_call.rb:227:in `add_argument'
     # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
     # ./lib/plsql/procedure_call.rb:200:in `each'
     # ./lib/plsql/procedure_call.rb:200:in `map'
     # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
     # ./lib/plsql/procedure_call.rb:11:in `initialize'
     # ./lib/plsql/procedure.rb:265:in `new'
     # ./lib/plsql/procedure.rb:265:in `exec'
     # ./lib/plsql/schema.rb:185:in `method_missing'
     # ./spec/plsql/procedure_spec.rb:812:in `block (3 levels) in <top (required)>'

  4) Parameter type mapping / Function with record parameter should execute function with Hash parameter using strings as keys
     Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

     ArgumentError:
       Wrong field name "employee_id" passed to PL/SQL record argument :p_employee
     # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
     # ./lib/plsql/procedure_call.rb:342:in `each'
     # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
     # ./lib/plsql/procedure_call.rb:227:in `add_argument'
     # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
     # ./lib/plsql/procedure_call.rb:200:in `each'
     # ./lib/plsql/procedure_call.rb:200:in `map'
     # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
     # ./lib/plsql/procedure_call.rb:11:in `initialize'
     # ./lib/plsql/procedure.rb:265:in `new'
     # ./lib/plsql/procedure.rb:265:in `exec'
     # ./lib/plsql/schema.rb:185:in `method_missing'
     # ./spec/plsql/procedure_spec.rb:816:in `block (3 levels) in <top (required)>'

  5) Parameter type mapping / Function with record parameter should return empty table of records
     Failure/Error: case element_metadata[:data_type]

     NoMethodError:
       undefined method `[]' for nil:NilClass
     # ./lib/plsql/procedure.rb:213:in `block in ensure_tmp_tables_created'
     # ./lib/plsql/procedure.rb:210:in `each'
     # ./lib/plsql/procedure.rb:210:in `ensure_tmp_tables_created'
     # ./lib/plsql/procedure_call.rb:10:in `initialize'
     # ./lib/plsql/procedure.rb:265:in `new'
     # ./lib/plsql/procedure.rb:265:in `exec'
     # ./lib/plsql/package.rb:67:in `method_missing'
     # ./spec/plsql/procedure_spec.rb:826:in `block (3 levels) in <top (required)>'

  6) Parameter type mapping / Function with record parameter should return record return value
     Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

     ArgumentError:
       Wrong field name :employee_id passed to PL/SQL record argument :p_employee
     # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
     # ./lib/plsql/procedure_call.rb:342:in `each'
     # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
     # ./lib/plsql/procedure_call.rb:227:in `add_argument'
     # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
     # ./lib/plsql/procedure_call.rb:200:in `each'
     # ./lib/plsql/procedure_call.rb:200:in `map'
     # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
     # ./lib/plsql/procedure_call.rb:11:in `initialize'
     # ./lib/plsql/procedure.rb:265:in `new'
     # ./lib/plsql/procedure.rb:265:in `exec'
     # ./lib/plsql/schema.rb:185:in `method_missing'
     # ./spec/plsql/procedure_spec.rb:830:in `block (3 levels) in <top (required)>'

  7) Parameter type mapping / Function with record parameter should return record return value and output record parameter value
     Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

     ArgumentError:
       Wrong field name :employee_id passed to PL/SQL record argument :p_employee
     # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
     # ./lib/plsql/procedure_call.rb:342:in `each'
     # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
     # ./lib/plsql/procedure_call.rb:227:in `add_argument'
     # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
     # ./lib/plsql/procedure_call.rb:200:in `each'
     # ./lib/plsql/procedure_call.rb:200:in `map'
     # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
     # ./lib/plsql/procedure_call.rb:11:in `initialize'
     # ./lib/plsql/procedure.rb:265:in `new'
     # ./lib/plsql/procedure.rb:265:in `exec'
     # ./lib/plsql/schema.rb:185:in `method_missing'
     # ./spec/plsql/procedure_spec.rb:834:in `block (3 levels) in <top (required)>'

  8) Parameter type mapping / Function with record parameter should execute package function with parameter with record type defined in package
     Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

     ArgumentError:
       Wrong field name :employee_id passed to PL/SQL record argument :p_employee
     # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
     # ./lib/plsql/procedure_call.rb:342:in `each'
     # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
     # ./lib/plsql/procedure_call.rb:227:in `add_argument'
     # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
     # ./lib/plsql/procedure_call.rb:200:in `each'
     # ./lib/plsql/procedure_call.rb:200:in `map'
     # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
     # ./lib/plsql/procedure_call.rb:11:in `initialize'
     # ./lib/plsql/procedure.rb:265:in `new'
     # ./lib/plsql/procedure.rb:265:in `exec'
     # ./lib/plsql/package.rb:67:in `method_missing'
     # ./spec/plsql/procedure_spec.rb:838:in `block (3 levels) in <top (required)>'

  9) Parameter type mapping / Function with record parameter functions with record parameters having boolean attributes should execute function with record having boolean attribute (true)
     Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

     ArgumentError:
       Wrong field name :candidate_id passed to PL/SQL record argument :p_candidate
     # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
     # ./lib/plsql/procedure_call.rb:342:in `each'
     # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
     # ./lib/plsql/procedure_call.rb:227:in `add_argument'
     # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
     # ./lib/plsql/procedure_call.rb:200:in `each'
     # ./lib/plsql/procedure_call.rb:200:in `map'
     # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
     # ./lib/plsql/procedure_call.rb:11:in `initialize'
     # ./lib/plsql/procedure.rb:265:in `new'
     # ./lib/plsql/procedure.rb:265:in `exec'
     # ./lib/plsql/package.rb:67:in `method_missing'
     # ./spec/plsql/procedure_spec.rb:848:in `block (5 levels) in <top (required)>'

  10) Parameter type mapping / Function with record parameter functions with record parameters having boolean attributes procedure should return record with boolean attribute as output parameter (true)
      Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

      ArgumentError:
        Wrong field name :candidate_id passed to PL/SQL record argument :p_candidate
      # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:342:in `each'
      # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:227:in `add_argument'
      # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
      # ./lib/plsql/procedure_call.rb:200:in `each'
      # ./lib/plsql/procedure_call.rb:200:in `map'
      # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
      # ./lib/plsql/procedure_call.rb:11:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/package.rb:67:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:852:in `block (5 levels) in <top (required)>'

  11) Parameter type mapping / Function with record parameter functions with record parameters having boolean attributes function should return record with boolean attribute (true)
      Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

      ArgumentError:
        Wrong field name :candidate_id passed to PL/SQL record argument :p_candidate
      # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:342:in `each'
      # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:227:in `add_argument'
      # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
      # ./lib/plsql/procedure_call.rb:200:in `each'
      # ./lib/plsql/procedure_call.rb:200:in `map'
      # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
      # ./lib/plsql/procedure_call.rb:11:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/package.rb:67:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:856:in `block (5 levels) in <top (required)>'

  12) Parameter type mapping / Function with record parameter functions with record parameters having boolean attributes should execute function with record having boolean attribute (false)
      Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

      ArgumentError:
        Wrong field name :candidate_id passed to PL/SQL record argument :p_candidate
      # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:342:in `each'
      # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:227:in `add_argument'
      # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
      # ./lib/plsql/procedure_call.rb:200:in `each'
      # ./lib/plsql/procedure_call.rb:200:in `map'
      # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
      # ./lib/plsql/procedure_call.rb:11:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/package.rb:67:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:848:in `block (5 levels) in <top (required)>'

  13) Parameter type mapping / Function with record parameter functions with record parameters having boolean attributes procedure should return record with boolean attribute as output parameter (false)
      Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

      ArgumentError:
        Wrong field name :candidate_id passed to PL/SQL record argument :p_candidate
      # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:342:in `each'
      # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:227:in `add_argument'
      # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
      # ./lib/plsql/procedure_call.rb:200:in `each'
      # ./lib/plsql/procedure_call.rb:200:in `map'
      # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
      # ./lib/plsql/procedure_call.rb:11:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/package.rb:67:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:852:in `block (5 levels) in <top (required)>'

  14) Parameter type mapping / Function with record parameter functions with record parameters having boolean attributes function should return record with boolean attribute (false)
      Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

      ArgumentError:
        Wrong field name :candidate_id passed to PL/SQL record argument :p_candidate
      # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:342:in `each'
      # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:227:in `add_argument'
      # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
      # ./lib/plsql/procedure_call.rb:200:in `each'
      # ./lib/plsql/procedure_call.rb:200:in `map'
      # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
      # ./lib/plsql/procedure_call.rb:11:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/package.rb:67:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:856:in `block (5 levels) in <top (required)>'

  15) Parameter type mapping / Function with record parameter functions with record parameters having boolean attributes should execute function with record having boolean attribute ()
      Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

      ArgumentError:
        Wrong field name :candidate_id passed to PL/SQL record argument :p_candidate
      # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:342:in `each'
      # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:227:in `add_argument'
      # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
      # ./lib/plsql/procedure_call.rb:200:in `each'
      # ./lib/plsql/procedure_call.rb:200:in `map'
      # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
      # ./lib/plsql/procedure_call.rb:11:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/package.rb:67:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:848:in `block (5 levels) in <top (required)>'

  16) Parameter type mapping / Function with record parameter functions with record parameters having boolean attributes procedure should return record with boolean attribute as output parameter ()
      Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

      ArgumentError:
        Wrong field name :candidate_id passed to PL/SQL record argument :p_candidate
      # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:342:in `each'
      # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:227:in `add_argument'
      # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
      # ./lib/plsql/procedure_call.rb:200:in `each'
      # ./lib/plsql/procedure_call.rb:200:in `map'
      # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
      # ./lib/plsql/procedure_call.rb:11:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/package.rb:67:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:852:in `block (5 levels) in <top (required)>'

  17) Parameter type mapping / Function with record parameter functions with record parameters having boolean attributes function should return record with boolean attribute ()
      Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

      ArgumentError:
        Wrong field name :candidate_id passed to PL/SQL record argument :p_candidate
      # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:342:in `each'
      # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:227:in `add_argument'
      # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
      # ./lib/plsql/procedure_call.rb:200:in `each'
      # ./lib/plsql/procedure_call.rb:200:in `map'
      # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
      # ./lib/plsql/procedure_call.rb:11:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/package.rb:67:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:856:in `block (5 levels) in <top (required)>'

  18) Parameter type mapping / Function with table parameter should execute function with table of numbers type (defined inside package) parameter
      Failure/Error: case element_metadata[:data_type]

      NoMethodError:
        undefined method `[]' for nil:NilClass
      # ./lib/plsql/procedure.rb:213:in `block in ensure_tmp_tables_created'
      # ./lib/plsql/procedure.rb:210:in `each'
      # ./lib/plsql/procedure.rb:210:in `ensure_tmp_tables_created'
      # ./lib/plsql/procedure_call.rb:10:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/package.rb:67:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1277:in `block (3 levels) in <top (required)>'

  19) Parameter type mapping / Function with table parameter should clear temporary tables after executing function with table of numbers type even if an error occurs in the package
      Failure/Error: case element_metadata[:data_type]

      NoMethodError:
        undefined method `[]' for nil:NilClass
      # ./lib/plsql/procedure.rb:213:in `block in ensure_tmp_tables_created'
      # ./lib/plsql/procedure.rb:210:in `each'
      # ./lib/plsql/procedure.rb:210:in `ensure_tmp_tables_created'
      # ./lib/plsql/procedure_call.rb:10:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/package.rb:67:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1282:in `block (3 levels) in <top (required)>'

  20) Parameter type mapping / Function with table parameter should return table of numbers type (defined inside package)
      Failure/Error: case element_metadata[:data_type]

      NoMethodError:
        undefined method `[]' for nil:NilClass
      # ./lib/plsql/procedure.rb:213:in `block in ensure_tmp_tables_created'
      # ./lib/plsql/procedure.rb:210:in `each'
      # ./lib/plsql/procedure.rb:210:in `ensure_tmp_tables_created'
      # ./lib/plsql/procedure_call.rb:10:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/package.rb:67:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1290:in `block (3 levels) in <top (required)>'

  21) Parameter type mapping / Function with table parameter should clear temporary tables after executing function with table of numbers type (defined inside package) parameter
      Failure/Error: case element_metadata[:data_type]

      NoMethodError:
        undefined method `[]' for nil:NilClass
      # ./lib/plsql/procedure.rb:213:in `block in ensure_tmp_tables_created'
      # ./lib/plsql/procedure.rb:210:in `each'
      # ./lib/plsql/procedure.rb:210:in `ensure_tmp_tables_created'
      # ./lib/plsql/procedure_call.rb:10:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/package.rb:67:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1294:in `block (3 levels) in <top (required)>'

  22) Parameter type mapping / Function with table parameter should clear temporary tables when autocommit with table of numbers type (defined inside package) parameter
      Failure/Error: case element_metadata[:data_type]

      NoMethodError:
        undefined method `[]' for nil:NilClass
      # ./lib/plsql/procedure.rb:213:in `block in ensure_tmp_tables_created'
      # ./lib/plsql/procedure.rb:210:in `each'
      # ./lib/plsql/procedure.rb:210:in `ensure_tmp_tables_created'
      # ./lib/plsql/procedure_call.rb:10:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/package.rb:67:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1303:in `block (3 levels) in <top (required)>'

  23) Parameter type mapping / Function with table parameter should execute function with table of records type (defined inside package) parameter
      Failure/Error: case element_metadata[:data_type]

      NoMethodError:
        undefined method `[]' for nil:NilClass
      # ./lib/plsql/procedure.rb:213:in `block in ensure_tmp_tables_created'
      # ./lib/plsql/procedure.rb:210:in `each'
      # ./lib/plsql/procedure.rb:210:in `ensure_tmp_tables_created'
      # ./lib/plsql/procedure_call.rb:10:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/package.rb:67:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1310:in `block (3 levels) in <top (required)>'

  24) Parameter type mapping / Function with table parameter should execute function with table of records type (defined inside package and includes NVARCHAR columns) parameter
      Failure/Error: case element_metadata[:data_type]

      NoMethodError:
        undefined method `[]' for nil:NilClass
      # ./lib/plsql/procedure.rb:213:in `block in ensure_tmp_tables_created'
      # ./lib/plsql/procedure.rb:210:in `each'
      # ./lib/plsql/procedure.rb:210:in `ensure_tmp_tables_created'
      # ./lib/plsql/procedure_call.rb:10:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/package.rb:67:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1314:in `block (3 levels) in <top (required)>'

  25) Parameter type mapping / Function with table parameter should raise error with record parameter that has table as element
      Failure/Error:
        expect {
          expect(plsql.test_collections.test_employee2(@employees[0])).to eq([@employees[0], { p_employee: @employees[0] }])
        }.to raise_error(ArgumentError, /TEST_COLLECTIONS\.T_NUMBERS definition inside package is not supported/)

        expected ArgumentError with message matching /TEST_COLLECTIONS\.T_NUMBERS definition inside package is not supported/, got #<ArgumentError: Wrong field name :employee_id passed to PL/SQL record argument :p_employee> with backtrace:
          # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
          # ./lib/plsql/procedure_call.rb:342:in `each'
          # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
          # ./lib/plsql/procedure_call.rb:227:in `add_argument'
          # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
          # ./lib/plsql/procedure_call.rb:200:in `each'
          # ./lib/plsql/procedure_call.rb:200:in `map'
          # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
          # ./lib/plsql/procedure_call.rb:11:in `initialize'
          # ./lib/plsql/procedure.rb:265:in `new'
          # ./lib/plsql/procedure.rb:265:in `exec'
          # ./lib/plsql/package.rb:67:in `method_missing'
          # ./spec/plsql/procedure_spec.rb:1329:in `block (4 levels) in <top (required)>'
          # ./spec/plsql/procedure_spec.rb:1328:in `block (3 levels) in <top (required)>'
      # ./spec/plsql/procedure_spec.rb:1328:in `block (3 levels) in <top (required)>'

  26) Parameter type mapping / Function with table parameter should raise error with table of records parameter when record has table as element
      Failure/Error:
        expect {
          expect(plsql.test_collections.test_employees2(@employees)).to eq([@employees, { p_employees: @employees }])
        }.to raise_error(ArgumentError, /TEST_COLLECTIONS\.T_NUMBERS definition inside package is not supported/)

        expected ArgumentError with message matching /TEST_COLLECTIONS\.T_NUMBERS definition inside package is not supported/, got #<NoMethodError: undefined method `[]' for nil:NilClass> with backtrace:
          # ./lib/plsql/procedure.rb:213:in `block in ensure_tmp_tables_created'
          # ./lib/plsql/procedure.rb:210:in `each'
          # ./lib/plsql/procedure.rb:210:in `ensure_tmp_tables_created'
          # ./lib/plsql/procedure_call.rb:10:in `initialize'
          # ./lib/plsql/procedure.rb:265:in `new'
          # ./lib/plsql/procedure.rb:265:in `exec'
          # ./lib/plsql/package.rb:67:in `method_missing'
          # ./spec/plsql/procedure_spec.rb:1335:in `block (4 levels) in <top (required)>'
          # ./spec/plsql/procedure_spec.rb:1334:in `block (3 levels) in <top (required)>'
      # ./spec/plsql/procedure_spec.rb:1334:in `block (3 levels) in <top (required)>'

  27) Parameter type mapping / Function with table indexed by bynary integer parameter should clear temporary tables after executing function with index-by table of numbers type even if an error occurs in the package
      Failure/Error: case element_metadata[:data_type]

      NoMethodError:
        undefined method `[]' for nil:NilClass
      # ./lib/plsql/procedure.rb:213:in `block in ensure_tmp_tables_created'
      # ./lib/plsql/procedure.rb:210:in `each'
      # ./lib/plsql/procedure.rb:210:in `ensure_tmp_tables_created'
      # ./lib/plsql/procedure_call.rb:10:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/package.rb:67:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1466:in `block (3 levels) in <top (required)>'

  28) Parameter type mapping / Function with table indexed by bynary integer parameter should execute function with index-by table of numbers type (defined inside package) parameter
      Failure/Error: case element_metadata[:data_type]

      NoMethodError:
        undefined method `[]' for nil:NilClass
      # ./lib/plsql/procedure.rb:213:in `block in ensure_tmp_tables_created'
      # ./lib/plsql/procedure.rb:210:in `each'
      # ./lib/plsql/procedure.rb:210:in `ensure_tmp_tables_created'
      # ./lib/plsql/procedure_call.rb:10:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/package.rb:67:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1474:in `block (3 levels) in <top (required)>'

  29) Parameter type mapping / Function with table indexed by bynary integer parameter should return index-by table of numbers type (defined inside package)
      Failure/Error: case element_metadata[:data_type]

      NoMethodError:
        undefined method `[]' for nil:NilClass
      # ./lib/plsql/procedure.rb:213:in `block in ensure_tmp_tables_created'
      # ./lib/plsql/procedure.rb:210:in `each'
      # ./lib/plsql/procedure.rb:210:in `ensure_tmp_tables_created'
      # ./lib/plsql/procedure_call.rb:10:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/package.rb:67:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1478:in `block (3 levels) in <top (required)>'

  30) Parameter type mapping / Function with table indexed by bynary integer parameter should clear temporary tables when autocommit with index-by table of numbers type (defined inside package) parameter
      Failure/Error: case element_metadata[:data_type]

      NoMethodError:
        undefined method `[]' for nil:NilClass
      # ./lib/plsql/procedure.rb:213:in `block in ensure_tmp_tables_created'
      # ./lib/plsql/procedure.rb:210:in `each'
      # ./lib/plsql/procedure.rb:210:in `ensure_tmp_tables_created'
      # ./lib/plsql/procedure_call.rb:10:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/package.rb:67:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1485:in `block (3 levels) in <top (required)>'

  31) Parameter type mapping / Function with table indexed by bynary integer parameter should execute function with index-by table of records type (defined inside package) parameter
      Failure/Error: case element_metadata[:data_type]

      NoMethodError:
        undefined method `[]' for nil:NilClass
      # ./lib/plsql/procedure.rb:213:in `block in ensure_tmp_tables_created'
      # ./lib/plsql/procedure.rb:210:in `each'
      # ./lib/plsql/procedure.rb:210:in `ensure_tmp_tables_created'
      # ./lib/plsql/procedure_call.rb:10:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/package.rb:67:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1492:in `block (3 levels) in <top (required)>'

  32) Parameter type mapping / Function with table indexed by bynary integer parameter should execute procedure with index-by table of records type (defined inside package) parameter
      Failure/Error: case element_metadata[:data_type]

      NoMethodError:
        undefined method `[]' for nil:NilClass
      # ./lib/plsql/procedure.rb:213:in `block in ensure_tmp_tables_created'
      # ./lib/plsql/procedure.rb:210:in `each'
      # ./lib/plsql/procedure.rb:210:in `ensure_tmp_tables_created'
      # ./lib/plsql/procedure_call.rb:10:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/package.rb:67:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1496:in `block (3 levels) in <top (required)>'

  33) Parameter type mapping / Function with table indexed by bynary integer parameter should create temporary tables in autonomous transaction
      Failure/Error: case element_metadata[:data_type]

      NoMethodError:
        undefined method `[]' for nil:NilClass
      # ./lib/plsql/procedure.rb:213:in `block in ensure_tmp_tables_created'
      # ./lib/plsql/procedure.rb:210:in `each'
      # ./lib/plsql/procedure.rb:210:in `ensure_tmp_tables_created'
      # ./lib/plsql/procedure_call.rb:10:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/package.rb:67:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1504:in `block (3 levels) in <top (required)>'

  34) Parameter type mapping / Function with table indexed by bynary integer parameter using Oracle 9.2 should create temporary tables when using Oracle 9.2
      Failure/Error: case element_metadata[:data_type]

      NoMethodError:
        undefined method `[]' for nil:NilClass
      # ./lib/plsql/procedure.rb:213:in `block in ensure_tmp_tables_created'
      # ./lib/plsql/procedure.rb:210:in `each'
      # ./lib/plsql/procedure.rb:210:in `ensure_tmp_tables_created'
      # ./lib/plsql/procedure_call.rb:10:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/package.rb:67:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1522:in `block (4 levels) in <top (required)>'

  35) Parameter type mapping / Function in package with VARRAY parameter should execute function with number array parameter
      Failure/Error: case element_metadata[:data_type]

      NoMethodError:
        undefined method `[]' for nil:NilClass
      # ./lib/plsql/procedure.rb:213:in `block in ensure_tmp_tables_created'
      # ./lib/plsql/procedure.rb:210:in `each'
      # ./lib/plsql/procedure.rb:210:in `ensure_tmp_tables_created'
      # ./lib/plsql/procedure_call.rb:10:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/package.rb:67:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1753:in `block (3 levels) in <top (required)>'

  36) Parameter type mapping / Function in package with VARRAY parameter should clear temporary tables after executing function with varray of numbers type even if an error occurs in the package
      Failure/Error: case element_metadata[:data_type]

      NoMethodError:
        undefined method `[]' for nil:NilClass
      # ./lib/plsql/procedure.rb:213:in `block in ensure_tmp_tables_created'
      # ./lib/plsql/procedure.rb:210:in `each'
      # ./lib/plsql/procedure.rb:210:in `ensure_tmp_tables_created'
      # ./lib/plsql/procedure_call.rb:10:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/package.rb:67:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1758:in `block (3 levels) in <top (required)>'

  37) Parameter type mapping / Function in package with VARRAY parameter should return number array return value
      Failure/Error: case element_metadata[:data_type]

      NoMethodError:
        undefined method `[]' for nil:NilClass
      # ./lib/plsql/procedure.rb:213:in `block in ensure_tmp_tables_created'
      # ./lib/plsql/procedure.rb:210:in `each'
      # ./lib/plsql/procedure.rb:210:in `ensure_tmp_tables_created'
      # ./lib/plsql/procedure_call.rb:10:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/package.rb:67:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1766:in `block (3 levels) in <top (required)>'

  38) Parameter type mapping / Function in package with VARRAY parameter should execute function with string array and return string array output parameter
      Failure/Error: case element_metadata[:data_type]

      NoMethodError:
        undefined method `[]' for nil:NilClass
      # ./lib/plsql/procedure.rb:213:in `block in ensure_tmp_tables_created'
      # ./lib/plsql/procedure.rb:210:in `each'
      # ./lib/plsql/procedure.rb:210:in `ensure_tmp_tables_created'
      # ./lib/plsql/procedure_call.rb:10:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/package.rb:67:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1771:in `block (3 levels) in <top (required)>'

  39) Parameter type mapping / Function in package with VARRAY parameter should execute function with object array and return object array output parameter
      Failure/Error: case element_metadata[:data_type]

      NoMethodError:
        undefined method `[]' for nil:NilClass
      # ./lib/plsql/procedure.rb:213:in `block in ensure_tmp_tables_created'
      # ./lib/plsql/procedure.rb:210:in `each'
      # ./lib/plsql/procedure.rb:210:in `ensure_tmp_tables_created'
      # ./lib/plsql/procedure_call.rb:10:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/package.rb:67:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1776:in `block (3 levels) in <top (required)>'

  40) Parameter type mapping / Function with cursor return value or parameter should find existing function
      Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

      ArgumentError:
        Wrong field name :employee_id passed to PL/SQL record argument :p_employee
      # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:342:in `each'
      # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:227:in `add_argument'
      # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
      # ./lib/plsql/procedure_call.rb:200:in `each'
      # ./lib/plsql/procedure_call.rb:200:in `map'
      # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
      # ./lib/plsql/procedure_call.rb:11:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/schema.rb:185:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1846:in `block (4 levels) in <top (required)>'
      # ./spec/plsql/procedure_spec.rb:1845:in `each'
      # ./spec/plsql/procedure_spec.rb:1845:in `block (3 levels) in <top (required)>'

  41) Parameter type mapping / Function with cursor return value or parameter should return cursor and fetch first row
      Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

      ArgumentError:
        Wrong field name :employee_id passed to PL/SQL record argument :p_employee
      # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:342:in `each'
      # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:227:in `add_argument'
      # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
      # ./lib/plsql/procedure_call.rb:200:in `each'
      # ./lib/plsql/procedure_call.rb:200:in `map'
      # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
      # ./lib/plsql/procedure_call.rb:11:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/schema.rb:185:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1846:in `block (4 levels) in <top (required)>'
      # ./spec/plsql/procedure_spec.rb:1845:in `each'
      # ./spec/plsql/procedure_spec.rb:1845:in `block (3 levels) in <top (required)>'

  42) Parameter type mapping / Function with cursor return value or parameter should close all returned cursors after block is executed
      Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

      ArgumentError:
        Wrong field name :employee_id passed to PL/SQL record argument :p_employee
      # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:342:in `each'
      # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:227:in `add_argument'
      # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
      # ./lib/plsql/procedure_call.rb:200:in `each'
      # ./lib/plsql/procedure_call.rb:200:in `map'
      # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
      # ./lib/plsql/procedure_call.rb:11:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/schema.rb:185:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1846:in `block (4 levels) in <top (required)>'
      # ./spec/plsql/procedure_spec.rb:1845:in `each'
      # ./spec/plsql/procedure_spec.rb:1845:in `block (3 levels) in <top (required)>'

  43) Parameter type mapping / Function with cursor return value or parameter should not raise error if cursor is closed inside block
      Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

      ArgumentError:
        Wrong field name :employee_id passed to PL/SQL record argument :p_employee
      # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:342:in `each'
      # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:227:in `add_argument'
      # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
      # ./lib/plsql/procedure_call.rb:200:in `each'
      # ./lib/plsql/procedure_call.rb:200:in `map'
      # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
      # ./lib/plsql/procedure_call.rb:11:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/schema.rb:185:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1846:in `block (4 levels) in <top (required)>'
      # ./spec/plsql/procedure_spec.rb:1845:in `each'
      # ./spec/plsql/procedure_spec.rb:1845:in `block (3 levels) in <top (required)>'

  44) Parameter type mapping / Function with cursor return value or parameter should fetch hash from returned cursor
      Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

      ArgumentError:
        Wrong field name :employee_id passed to PL/SQL record argument :p_employee
      # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:342:in `each'
      # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:227:in `add_argument'
      # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
      # ./lib/plsql/procedure_call.rb:200:in `each'
      # ./lib/plsql/procedure_call.rb:200:in `map'
      # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
      # ./lib/plsql/procedure_call.rb:11:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/schema.rb:185:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1846:in `block (4 levels) in <top (required)>'
      # ./spec/plsql/procedure_spec.rb:1845:in `each'
      # ./spec/plsql/procedure_spec.rb:1845:in `block (3 levels) in <top (required)>'

  45) Parameter type mapping / Function with cursor return value or parameter should fetch all rows from returned cursor
      Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

      ArgumentError:
        Wrong field name :employee_id passed to PL/SQL record argument :p_employee
      # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:342:in `each'
      # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:227:in `add_argument'
      # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
      # ./lib/plsql/procedure_call.rb:200:in `each'
      # ./lib/plsql/procedure_call.rb:200:in `map'
      # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
      # ./lib/plsql/procedure_call.rb:11:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/schema.rb:185:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1846:in `block (4 levels) in <top (required)>'
      # ./spec/plsql/procedure_spec.rb:1845:in `each'
      # ./spec/plsql/procedure_spec.rb:1845:in `block (3 levels) in <top (required)>'

  46) Parameter type mapping / Function with cursor return value or parameter should fetch all rows as hash from returned cursor
      Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

      ArgumentError:
        Wrong field name :employee_id passed to PL/SQL record argument :p_employee
      # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:342:in `each'
      # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:227:in `add_argument'
      # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
      # ./lib/plsql/procedure_call.rb:200:in `each'
      # ./lib/plsql/procedure_call.rb:200:in `map'
      # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
      # ./lib/plsql/procedure_call.rb:11:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/schema.rb:185:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1846:in `block (4 levels) in <top (required)>'
      # ./spec/plsql/procedure_spec.rb:1845:in `each'
      # ./spec/plsql/procedure_spec.rb:1845:in `block (3 levels) in <top (required)>'

  47) Parameter type mapping / Function with cursor return value or parameter should get field names from returned cursor
      Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

      ArgumentError:
        Wrong field name :employee_id passed to PL/SQL record argument :p_employee
      # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:342:in `each'
      # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:227:in `add_argument'
      # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
      # ./lib/plsql/procedure_call.rb:200:in `each'
      # ./lib/plsql/procedure_call.rb:200:in `map'
      # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
      # ./lib/plsql/procedure_call.rb:11:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/schema.rb:185:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1846:in `block (4 levels) in <top (required)>'
      # ./spec/plsql/procedure_spec.rb:1845:in `each'
      # ./spec/plsql/procedure_spec.rb:1845:in `block (3 levels) in <top (required)>'

  48) Parameter type mapping / Function with cursor return value or parameter should return output parameter with cursor and fetch first row
      Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

      ArgumentError:
        Wrong field name :employee_id passed to PL/SQL record argument :p_employee
      # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:342:in `each'
      # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:227:in `add_argument'
      # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
      # ./lib/plsql/procedure_call.rb:200:in `each'
      # ./lib/plsql/procedure_call.rb:200:in `map'
      # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
      # ./lib/plsql/procedure_call.rb:11:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/schema.rb:185:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1846:in `block (4 levels) in <top (required)>'
      # ./spec/plsql/procedure_spec.rb:1845:in `each'
      # ./spec/plsql/procedure_spec.rb:1845:in `block (3 levels) in <top (required)>'

  49) Parameter type mapping / Function with cursor return value or parameter should return output parameter with cursor and fetch all rows as hash
      Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

      ArgumentError:
        Wrong field name :employee_id passed to PL/SQL record argument :p_employee
      # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:342:in `each'
      # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:227:in `add_argument'
      # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
      # ./lib/plsql/procedure_call.rb:200:in `each'
      # ./lib/plsql/procedure_call.rb:200:in `map'
      # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
      # ./lib/plsql/procedure_call.rb:11:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/schema.rb:185:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1846:in `block (4 levels) in <top (required)>'
      # ./spec/plsql/procedure_spec.rb:1845:in `each'
      # ./spec/plsql/procedure_spec.rb:1845:in `block (3 levels) in <top (required)>'

  50) Parameter type mapping / Function with cursor return value or parameter should execute function with cursor parameter and return record
      Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

      ArgumentError:
        Wrong field name :employee_id passed to PL/SQL record argument :p_employee
      # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:342:in `each'
      # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:227:in `add_argument'
      # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
      # ./lib/plsql/procedure_call.rb:200:in `each'
      # ./lib/plsql/procedure_call.rb:200:in `map'
      # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
      # ./lib/plsql/procedure_call.rb:11:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/schema.rb:185:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1846:in `block (4 levels) in <top (required)>'
      # ./spec/plsql/procedure_spec.rb:1845:in `each'
      # ./spec/plsql/procedure_spec.rb:1845:in `block (3 levels) in <top (required)>'

  51) Parameter type mapping / Function with typed ref cursor return value should return cursor and fetch first row
      Failure/Error: raise ArgumentError, "Parameter type #{sql_type_name} definition inside package is not supported, use CREATE TYPE outside package" if overload == 0

      ArgumentError:
        Parameter type HR.TYPED_REF_CURSOR_TEST.TEST_REC definition inside package is not supported, use CREATE TYPE outside package
      # ./lib/plsql/procedure.rb:143:in `block in get_argument_metadata'
      # ./lib/plsql/connection.rb:121:in `select_all'
      # ./lib/plsql/sql_statements.rb:10:in `select_all'
      # ./lib/plsql/procedure.rb:105:in `get_argument_metadata'
      # ./lib/plsql/procedure.rb:261:in `initialize'
      # ./lib/plsql/procedure.rb:43:in `new'
      # ./lib/plsql/procedure.rb:43:in `find'
      # ./lib/plsql/package.rb:52:in `block in []'
      # ./lib/plsql/package.rb:51:in `each'
      # ./lib/plsql/package.rb:51:in `inject'
      # ./lib/plsql/package.rb:51:in `[]'
      # ./lib/plsql/package.rb:62:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1975:in `block (3 levels) in <top (required)>'

  52) Parameter type mapping / Function with typed ref cursor return value should fetch hash from returned cursor
      Failure/Error: raise ArgumentError, "Parameter type #{sql_type_name} definition inside package is not supported, use CREATE TYPE outside package" if overload == 0

      ArgumentError:
        Parameter type HR.TYPED_REF_CURSOR_TEST.TEST_REC definition inside package is not supported, use CREATE TYPE outside package
      # ./lib/plsql/procedure.rb:143:in `block in get_argument_metadata'
      # ./lib/plsql/connection.rb:121:in `select_all'
      # ./lib/plsql/sql_statements.rb:10:in `select_all'
      # ./lib/plsql/procedure.rb:105:in `get_argument_metadata'
      # ./lib/plsql/procedure.rb:261:in `initialize'
      # ./lib/plsql/procedure.rb:43:in `new'
      # ./lib/plsql/procedure.rb:43:in `find'
      # ./lib/plsql/package.rb:52:in `block in []'
      # ./lib/plsql/package.rb:51:in `each'
      # ./lib/plsql/package.rb:51:in `inject'
      # ./lib/plsql/package.rb:51:in `[]'
      # ./lib/plsql/package.rb:62:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1981:in `block (3 levels) in <top (required)>'

  53) Parameter type mapping / Function with typed ref cursor return value should fetch all rows from returned cursor
      Failure/Error: raise ArgumentError, "Parameter type #{sql_type_name} definition inside package is not supported, use CREATE TYPE outside package" if overload == 0

      ArgumentError:
        Parameter type HR.TYPED_REF_CURSOR_TEST.TEST_REC definition inside package is not supported, use CREATE TYPE outside package
      # ./lib/plsql/procedure.rb:143:in `block in get_argument_metadata'
      # ./lib/plsql/connection.rb:121:in `select_all'
      # ./lib/plsql/sql_statements.rb:10:in `select_all'
      # ./lib/plsql/procedure.rb:105:in `get_argument_metadata'
      # ./lib/plsql/procedure.rb:261:in `initialize'
      # ./lib/plsql/procedure.rb:43:in `new'
      # ./lib/plsql/procedure.rb:43:in `find'
      # ./lib/plsql/package.rb:52:in `block in []'
      # ./lib/plsql/package.rb:51:in `each'
      # ./lib/plsql/package.rb:51:in `inject'
      # ./lib/plsql/package.rb:51:in `[]'
      # ./lib/plsql/package.rb:62:in `method_missing'
      # ./spec/plsql/procedure_spec.rb:1987:in `block (3 levels) in <top (required)>'

  54) SQL statements / SELECT should select first result
      Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

      ArgumentError:
        Wrong field name :employee_id passed to PL/SQL record argument :p_employee
      # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:342:in `each'
      # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:227:in `add_argument'
      # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
      # ./lib/plsql/procedure_call.rb:200:in `map'
      # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
      # ./lib/plsql/procedure_call.rb:11:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/schema.rb:185:in `method_missing'
      # ./spec/plsql/sql_statements_spec.rb:49:in `block (4 levels) in <top (required)>'
      # ./spec/plsql/sql_statements_spec.rb:48:in `each'
      # ./spec/plsql/sql_statements_spec.rb:48:in `block (3 levels) in <top (required)>'

  55) SQL statements / SELECT should prefetch only one row when selecting first result
      Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

      ArgumentError:
        Wrong field name :employee_id passed to PL/SQL record argument :p_employee
      # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:342:in `each'
      # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:227:in `add_argument'
      # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
      # ./lib/plsql/procedure_call.rb:200:in `map'
      # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
      # ./lib/plsql/procedure_call.rb:11:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/schema.rb:185:in `method_missing'
      # ./spec/plsql/sql_statements_spec.rb:49:in `block (4 levels) in <top (required)>'
      # ./spec/plsql/sql_statements_spec.rb:48:in `each'
      # ./spec/plsql/sql_statements_spec.rb:48:in `block (3 levels) in <top (required)>'

  56) SQL statements / SELECT should select one value
      Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

      ArgumentError:
        Wrong field name :employee_id passed to PL/SQL record argument :p_employee
      # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:342:in `each'
      # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:227:in `add_argument'
      # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
      # ./lib/plsql/procedure_call.rb:200:in `map'
      # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
      # ./lib/plsql/procedure_call.rb:11:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/schema.rb:185:in `method_missing'
      # ./spec/plsql/sql_statements_spec.rb:49:in `block (4 levels) in <top (required)>'
      # ./spec/plsql/sql_statements_spec.rb:48:in `each'
      # ./spec/plsql/sql_statements_spec.rb:48:in `block (3 levels) in <top (required)>'

  57) SQL statements / SELECT should return nil when selecting non-existing one value
      Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

      ArgumentError:
        Wrong field name :employee_id passed to PL/SQL record argument :p_employee
      # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:342:in `each'
      # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:227:in `add_argument'
      # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
      # ./lib/plsql/procedure_call.rb:200:in `map'
      # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
      # ./lib/plsql/procedure_call.rb:11:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/schema.rb:185:in `method_missing'
      # ./spec/plsql/sql_statements_spec.rb:49:in `block (4 levels) in <top (required)>'
      # ./spec/plsql/sql_statements_spec.rb:48:in `each'
      # ./spec/plsql/sql_statements_spec.rb:48:in `block (3 levels) in <top (required)>'

  58) SQL statements / SELECT should prefetch only one row when selecting one value
      Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

      ArgumentError:
        Wrong field name :employee_id passed to PL/SQL record argument :p_employee
      # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:342:in `each'
      # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:227:in `add_argument'
      # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
      # ./lib/plsql/procedure_call.rb:200:in `map'
      # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
      # ./lib/plsql/procedure_call.rb:11:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/schema.rb:185:in `method_missing'
      # ./spec/plsql/sql_statements_spec.rb:49:in `block (4 levels) in <top (required)>'
      # ./spec/plsql/sql_statements_spec.rb:48:in `each'
      # ./spec/plsql/sql_statements_spec.rb:48:in `block (3 levels) in <top (required)>'

  59) SQL statements / SELECT should select all results
      Failure/Error: raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata

      ArgumentError:
        Wrong field name :employee_id passed to PL/SQL record argument :p_employee
      # ./lib/plsql/procedure_call.rb:345:in `block in record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:342:in `each'
      # ./lib/plsql/procedure_call.rb:342:in `record_assignment_sql_values_metadata'
      # ./lib/plsql/procedure_call.rb:227:in `add_argument'
      # ./lib/plsql/procedure_call.rb:203:in `block in construct_sql'
      # ./lib/plsql/procedure_call.rb:200:in `map'
      # ./lib/plsql/procedure_call.rb:200:in `construct_sql'
      # ./lib/plsql/procedure_call.rb:11:in `initialize'
      # ./lib/plsql/procedure.rb:265:in `new'
      # ./lib/plsql/procedure.rb:265:in `exec'
      # ./lib/plsql/schema.rb:185:in `method_missing'
      # ./spec/plsql/sql_statements_spec.rb:49:in `block (4 levels) in <top (required)>'
      # ./spec/plsql/sql_statements_spec.rb:48:in `each'
      # ./spec/plsql/sql_statements_spec.rb:48:in `block (3 levels) in <top (required)>'

Finished in 54.08 seconds (files took 0.53237 seconds to load)
450 examples, 59 failures, 3 pending

Failed examples:

rspec ./spec/plsql/connection_spec.rb:424 # Connection session information should get database version
rspec ./spec/plsql/procedure_spec.rb:807 # Parameter type mapping / Function with record parameter should execute function with named parameter and return correct value
rspec ./spec/plsql/procedure_spec.rb:811 # Parameter type mapping / Function with record parameter should execute function with sequential parameter and return correct value
rspec ./spec/plsql/procedure_spec.rb:815 # Parameter type mapping / Function with record parameter should execute function with Hash parameter using strings as keys
rspec ./spec/plsql/procedure_spec.rb:825 # Parameter type mapping / Function with record parameter should return empty table of records
rspec ./spec/plsql/procedure_spec.rb:829 # Parameter type mapping / Function with record parameter should return record return value
rspec ./spec/plsql/procedure_spec.rb:833 # Parameter type mapping / Function with record parameter should return record return value and output record parameter value
rspec ./spec/plsql/procedure_spec.rb:837 # Parameter type mapping / Function with record parameter should execute package function with parameter with record type defined in package
rspec ./spec/plsql/procedure_spec.rb[1:24:10:1] # Parameter type mapping / Function with record parameter functions with record parameters having boolean attributes should execute function with record having boolean attribute (true)
rspec ./spec/plsql/procedure_spec.rb[1:24:10:2] # Parameter type mapping / Function with record parameter functions with record parameters having boolean attributes procedure should return record with boolean attribute as output parameter (true)
rspec ./spec/plsql/procedure_spec.rb[1:24:10:3] # Parameter type mapping / Function with record parameter functions with record parameters having boolean attributes function should return record with boolean attribute (true)
rspec ./spec/plsql/procedure_spec.rb[1:24:10:4] # Parameter type mapping / Function with record parameter functions with record parameters having boolean attributes should execute function with record having boolean attribute (false)
rspec ./spec/plsql/procedure_spec.rb[1:24:10:5] # Parameter type mapping / Function with record parameter functions with record parameters having boolean attributes procedure should return record with boolean attribute as output parameter (false)
rspec ./spec/plsql/procedure_spec.rb[1:24:10:6] # Parameter type mapping / Function with record parameter functions with record parameters having boolean attributes function should return record with boolean attribute (false)
rspec ./spec/plsql/procedure_spec.rb[1:24:10:7] # Parameter type mapping / Function with record parameter functions with record parameters having boolean attributes should execute function with record having boolean attribute ()
rspec ./spec/plsql/procedure_spec.rb[1:24:10:8] # Parameter type mapping / Function with record parameter functions with record parameters having boolean attributes procedure should return record with boolean attribute as output parameter ()
rspec ./spec/plsql/procedure_spec.rb[1:24:10:9] # Parameter type mapping / Function with record parameter functions with record parameters having boolean attributes function should return record with boolean attribute ()
rspec ./spec/plsql/procedure_spec.rb:1276 # Parameter type mapping / Function with table parameter should execute function with table of numbers type (defined inside package) parameter
rspec ./spec/plsql/procedure_spec.rb:1280 # Parameter type mapping / Function with table parameter should clear temporary tables after executing function with table of numbers type even if an error occurs in the package
rspec ./spec/plsql/procedure_spec.rb:1289 # Parameter type mapping / Function with table parameter should return table of numbers type (defined inside package)
rspec ./spec/plsql/procedure_spec.rb:1293 # Parameter type mapping / Function with table parameter should clear temporary tables after executing function with table of numbers type (defined inside package) parameter
rspec ./spec/plsql/procedure_spec.rb:1299 # Parameter type mapping / Function with table parameter should clear temporary tables when autocommit with table of numbers type (defined inside package) parameter
rspec ./spec/plsql/procedure_spec.rb:1309 # Parameter type mapping / Function with table parameter should execute function with table of records type (defined inside package) parameter
rspec ./spec/plsql/procedure_spec.rb:1313 # Parameter type mapping / Function with table parameter should execute function with table of records type (defined inside package and includes NVARCHAR columns) parameter
rspec ./spec/plsql/procedure_spec.rb:1327 # Parameter type mapping / Function with table parameter should raise error with record parameter that has table as element
rspec ./spec/plsql/procedure_spec.rb:1333 # Parameter type mapping / Function with table parameter should raise error with table of records parameter when record has table as element
rspec ./spec/plsql/procedure_spec.rb:1464 # Parameter type mapping / Function with table indexed by bynary integer parameter should clear temporary tables after executing function with index-by table of numbers type even if an error occurs in the package
rspec ./spec/plsql/procedure_spec.rb:1473 # Parameter type mapping / Function with table indexed by bynary integer parameter should execute function with index-by table of numbers type (defined inside package) parameter
rspec ./spec/plsql/procedure_spec.rb:1477 # Parameter type mapping / Function with table indexed by bynary integer parameter should return index-by table of numbers type (defined inside package)
rspec ./spec/plsql/procedure_spec.rb:1481 # Parameter type mapping / Function with table indexed by bynary integer parameter should clear temporary tables when autocommit with index-by table of numbers type (defined inside package) parameter
rspec ./spec/plsql/procedure_spec.rb:1491 # Parameter type mapping / Function with table indexed by bynary integer parameter should execute function with index-by table of records type (defined inside package) parameter
rspec ./spec/plsql/procedure_spec.rb:1495 # Parameter type mapping / Function with table indexed by bynary integer parameter should execute procedure with index-by table of records type (defined inside package) parameter
rspec ./spec/plsql/procedure_spec.rb:1499 # Parameter type mapping / Function with table indexed by bynary integer parameter should create temporary tables in autonomous transaction
rspec ./spec/plsql/procedure_spec.rb:1521 # Parameter type mapping / Function with table indexed by bynary integer parameter using Oracle 9.2 should create temporary tables when using Oracle 9.2
rspec ./spec/plsql/procedure_spec.rb:1752 # Parameter type mapping / Function in package with VARRAY parameter should execute function with number array parameter
rspec ./spec/plsql/procedure_spec.rb:1756 # Parameter type mapping / Function in package with VARRAY parameter should clear temporary tables after executing function with varray of numbers type even if an error occurs in the package
rspec ./spec/plsql/procedure_spec.rb:1765 # Parameter type mapping / Function in package with VARRAY parameter should return number array return value
rspec ./spec/plsql/procedure_spec.rb:1769 # Parameter type mapping / Function in package with VARRAY parameter should execute function with string array and return string array output parameter
rspec ./spec/plsql/procedure_spec.rb:1774 # Parameter type mapping / Function in package with VARRAY parameter should execute function with object array and return object array output parameter
rspec ./spec/plsql/procedure_spec.rb:1860 # Parameter type mapping / Function with cursor return value or parameter should find existing function
rspec ./spec/plsql/procedure_spec.rb:1864 # Parameter type mapping / Function with cursor return value or parameter should return cursor and fetch first row
rspec ./spec/plsql/procedure_spec.rb:1870 # Parameter type mapping / Function with cursor return value or parameter should close all returned cursors after block is executed
rspec ./spec/plsql/procedure_spec.rb:1878 # Parameter type mapping / Function with cursor return value or parameter should not raise error if cursor is closed inside block
rspec ./spec/plsql/procedure_spec.rb:1886 # Parameter type mapping / Function with cursor return value or parameter should fetch hash from returned cursor
rspec ./spec/plsql/procedure_spec.rb:1892 # Parameter type mapping / Function with cursor return value or parameter should fetch all rows from returned cursor
rspec ./spec/plsql/procedure_spec.rb:1898 # Parameter type mapping / Function with cursor return value or parameter should fetch all rows as hash from returned cursor
rspec ./spec/plsql/procedure_spec.rb:1904 # Parameter type mapping / Function with cursor return value or parameter should get field names from returned cursor
rspec ./spec/plsql/procedure_spec.rb:1910 # Parameter type mapping / Function with cursor return value or parameter should return output parameter with cursor and fetch first row
rspec ./spec/plsql/procedure_spec.rb:1916 # Parameter type mapping / Function with cursor return value or parameter should return output parameter with cursor and fetch all rows as hash
rspec ./spec/plsql/procedure_spec.rb:1922 # Parameter type mapping / Function with cursor return value or parameter should execute function with cursor parameter and return record
rspec ./spec/plsql/procedure_spec.rb:1974 # Parameter type mapping / Function with typed ref cursor return value should return cursor and fetch first row
rspec ./spec/plsql/procedure_spec.rb:1980 # Parameter type mapping / Function with typed ref cursor return value should fetch hash from returned cursor
rspec ./spec/plsql/procedure_spec.rb:1986 # Parameter type mapping / Function with typed ref cursor return value should fetch all rows from returned cursor
rspec ./spec/plsql/sql_statements_spec.rb:59 # SQL statements / SELECT should select first result
rspec ./spec/plsql/sql_statements_spec.rb:64 # SQL statements / SELECT should prefetch only one row when selecting first result
rspec ./spec/plsql/sql_statements_spec.rb:70 # SQL statements / SELECT should select one value
rspec ./spec/plsql/sql_statements_spec.rb:74 # SQL statements / SELECT should return nil when selecting non-existing one value
rspec ./spec/plsql/sql_statements_spec.rb:78 # SQL statements / SELECT should prefetch only one row when selecting one value
rspec ./spec/plsql/sql_statements_spec.rb:84 # SQL statements / SELECT should select all results

$
@jgebal
Copy link
Contributor

jgebal commented Jul 15, 2020

If you want you can use our solution for lightweight Oracle DB docker images.
We run 11-19 on travis with utPLSQL.

yahonda added a commit to yahonda/ruby-plsql that referenced this issue Jul 15, 2020
@yahonda
Copy link
Collaborator Author

yahonda commented Jul 15, 2020

Thank you for the information.

I have opened #188 to run CI against Oracle 18c XE database using GitHub Actions, which can validate if this issue is fixed. I'll ask your help when I need 19c or other versions.

@yahonda
Copy link
Collaborator Author

yahonda commented Jul 21, 2020

It is likely related to #183.

@stale
Copy link

stale bot commented Sep 20, 2020

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

@stale stale bot added the wontfix label Sep 20, 2020
@yahonda
Copy link
Collaborator Author

yahonda commented Sep 22, 2020

Let's keep it open.

@stale stale bot removed the wontfix label Sep 22, 2020
@stale
Copy link

stale bot commented Dec 25, 2020

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

@stale stale bot added the wontfix label Dec 25, 2020
@yahonda
Copy link
Collaborator Author

yahonda commented Dec 25, 2020

Let's keep it open.

@stale stale bot removed the wontfix label Dec 25, 2020
@bpom
Copy link
Contributor

bpom commented Mar 31, 2021

Since our Oracle based product using ruby-plsql for auto-testing was upgraded to 19c our tests no longer work. I am familiar with the changes in the Oracle metadata catalogs from Oracle 18c on and will provide a pull request asap.

@bpom
Copy link
Contributor

bpom commented Apr 6, 2021

Is anyone out there still using Oracle 10g and 11g ? I would like to drop support for these versions since there EOL has passed for quite a while now?

@yahonda
Copy link
Collaborator Author

yahonda commented Apr 6, 2021

Thanks for considering a pull request for this issue and proposal. For now, I prefer to keep older versions of Oracle Database as a maintainer.

As far as I remember, technically this behavior change has been introduced in Oracle Database 18c.
https://docs.oracle.com/en/database/oracle/oracle-database/18/rnrdm/pl-sql-bugs.html#GUID-4801B459-73BC-491C-8A14-FC95908D9C4D then even Oracle Database 12c (12.2) needs old behavior of all_arguments.

Thanks.

@bpom
Copy link
Contributor

bpom commented Apr 6, 2021

Yes, the changed behaviour of data_level in all_arguments was introduced in 18c, but there are already some workarounds for 10g and 11g, since the metadata in all_arguments has changed several times.

      # subprogram_id column is available just from version 10g
      subprogram_id_column = (@schema.connection.database_version <=> [10, 2, 0, 2]) >= 0 ? "subprogram_id" : "NULL"
      # defaulted is available just from version 11g
      defaulted_column = (@schema.connection.database_version <=> [11, 0, 0, 0]) >= 0 ? "defaulted" : "NULL"

It would be nice to clean up the code a bit. For now I keep the workarounds and will do a separate PR for cleanup.

@ojbucao
Copy link

ojbucao commented May 12, 2021

any updates on this?

bpom pushed a commit to bpom/ruby-plsql that referenced this issue Jul 5, 2021
bpom pushed a commit to bpom/ruby-plsql that referenced this issue Jul 6, 2021
bpom pushed a commit to bpom/ruby-plsql that referenced this issue Jul 7, 2021
bpom pushed a commit to bpom/ruby-plsql that referenced this issue Jul 7, 2021
bpom pushed a commit to bpom/ruby-plsql that referenced this issue Jul 7, 2021
@bpom bpom mentioned this issue Jul 7, 2021
yahonda added a commit to yahonda/ruby-plsql that referenced this issue Jul 29, 2021
yahonda added a commit to yahonda/ruby-plsql that referenced this issue Aug 4, 2021
@yahonda
Copy link
Collaborator Author

yahonda commented Aug 6, 2021

Closed via #196

@yahonda yahonda closed this as completed Aug 6, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants