Upload
rsim
View
1.036
Download
10
Embed Size (px)
Citation preview
Ruby on RailsOracle adaptera izstrāde
+
Raimonds Simanovskis
TietoEnator Alise
Kas irRuby on
Rails?
Ruby irobjektorientēta
dinamiskaprogrammēšanas valoda
vienkārša pēc izskata
spēcīgas iespējas
Ruby on RailsModerns “tīmekļa lietojumu ietvars”
Veidots Ruby programmēšanas valodā
Radies no 37signals Basecamp aplikācijas
Atvērtā koda programmatūra
Fokusējas uz izstrādātāju produktivitāti
Spējā (Agile) programmatūras izstrādes pieeja
PamatprincipiNeatkārto sevi
DRY - Don’t Repeat Yourself
Vienošanās nevis konfigurēšanaConvention over Configuration
Programmatūra ar viedokliOpinionated software
Komponentes
Active Record (Model)
Action Controller
Action View
Ruby platformasMRI 1.8.6
Ruby/YARV 1.9.1
JRuby
Rubinius IronRuby MacRuby
MagLev BlueRuby
Ruby => Oracle
Ruby application
ruby-oci8
require 'oci8'OCI8.new('scott', 'tiger').exec('select * from emp') do |r| puts r.join(',')end
Oracle Instant Client Oracle Database
SQL*Net
JRuby => Oracle
Ruby application
JRuby
require "java"sql = JavaSQL::DriverManager.getConnection(db, user, password)statement = sql.createStatementstatus = statement.execute "select * from parts;"rs = statement.getResultSet()
JDBC driver Oracle Database
SQL*Net
ActiveRecordOracle Enhanced
Adapter
Ruby on Rails=> Oracle
gem install activerecord-oracle_enhanced-adapter
database.ymldevelopment: adapter: oracle_enhanced database: XE username: blogdemo password: blogdemo encoding: utf8
SQL bind variables
database.ymldevelopment: adapter: oracle_enhanced database: XE username: blogdemo password: blogdemo encoding: utf8 cursor_sharing: similar
Employee.find(1)
SELECT * FROM employees WHERE (employees.id = 1)
SELECT * FROM employees WHERE (employees.id = :SYS_B_0)
ActiveRecord
Oracle optimizer
Oracle Data TypesRuby Rails Oracle
Fixnum :integer NUMBERFloat :float NUMBER
BigDecimal :decimal NUMBER, DECIMALTime :datetime DATETime :time DATEDate :date DATEString :string VARCHAR2String :text CLOBString :binary BLOB
True/FalseClass :boolean NUMBER(1), CHAR(1)
Citi ierobežojumi
Identifikatori līdz 30 simboliem
CLOB / BLOB izmantošana SQL pieprasījumos
LIMIT, OFFSET neesamība
lēni Data Dictionary skatījumi
tukšs String == NULL
Oracle XE nav uz Mac OS X
Multi platformu atbalsts
MRI 1.8.6 Ruby/YARV 1.9.1
JRuby
ruby-oci8 1.x ruby-oci8 2.x JDBC
oracle_enhanced adapter
PL/SQL izsaukšana no Ruby
require "oci8"conn = OCI8.new("hr","hr","xe")
cursor = conn.parse <<-EOSBEGIN :return := test_uppercase(:p_string);END;EOScursor.bind_param(':p_string',"xxx",String)cursor.bind_param(':return',nil,String,4000)cursor.execputs cursor[':return']cursor.close
ruby-plsql gem
gem install ruby-plsql
require "ruby-plsql"plsql.connection = OCI8.new("hr","hr","xe")
puts plsql.test_uppercase('xxx')
ruby-plsql gemplsql.connection = OCI8.new("hr","hr","xe")
plsql.test_uppercase('xxx') # => "XXX"plsql.test_uppercase(:p_string => 'xxx') # => "XXX"plsql.test_copy("abc", nil, nil) # => { :p_to => "abc", # :p_to_double => "abcabc" }plsql.test_copy(:p_from => "abc", :p_to => nil, :p_to_double => nil) # => { :p_to => "abc", # :p_to_double => "abcabc" }plsql.hr.test_uppercase('xxx') # => "XXX"plsql.test_package.test_uppercase('xxx') # => 'XXX'plsql.hr.test_package.test_uppercase('xxx') # => 'XXX'
plsql.logoff
PL/SQL procedūras
esošās datubāzēs
class Employee < ActiveRecord::Base set_create_method do plsql.employees_pkg.create_employee( :p_first_name => first_name, :p_last_name => last_name, :p_employee_id => nil )[:p_employee_id] end set_update_method do plsql.employees_pkg.update_employee( :p_employee_id => id, :p_first_name => first_name, :p_last_name => last_name ) end set_delete_method do plsql.employees_pkg.delete_employee( :p_employee_id => id ) endend
Paldies!http://blog.rayapps.comhttp://github.com/rsim