diff --git a/lib/plsql/procedure_call.rb b/lib/plsql/procedure_call.rb index c00214f6..8483ace9 100644 --- a/lib/plsql/procedure_call.rb +++ b/lib/plsql/procedure_call.rb @@ -340,9 +340,16 @@ def record_assignment_sql_values_metadata(argument, argument_metadata, record_va metadata = argument_metadata[:fields][field] raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata bind_variable = :"#{argument}_f#{metadata[:position]}" - sql << "l_#{argument}.#{field} := :#{bind_variable};\n" - bind_values[bind_variable] = value - bind_metadata[bind_variable] = metadata + case metadata[:data_type] + when 'PL/SQL BOOLEAN' + sql << "l_#{argument}.#{field} := (:#{bind_variable} = 1);\n" + bind_values[bind_variable] = value.nil? ? nil : (value ? 1 : 0) + bind_metadata[bind_variable] = metadata.merge(:data_type => "NUMBER", :data_precision => 1) + else + sql << "l_#{argument}.#{field} := :#{bind_variable};\n" + bind_values[bind_variable] = value + bind_metadata[bind_variable] = metadata + end end [sql, bind_values, bind_metadata] end