Chinaunix首页 | 论坛 | 博客
  • 博客访问: 90994065
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-05-22 17:38:22

 来源:

您现在已经利用 Ruby 和 Oracle 执行了基本的 CRUD(CREATE、RETRIEVE、UPDATE 和 DELETE)操作。现在该介绍结合使用 Ruby 和 Oracle 存储过程的示例了。

Ruby 与 Oracle 存储过程。 PL/SQL 是许多基于 Oracle 数据库的应用程序频繁使用的语言。由于用户已经对 Oracle 存储过程投入了大量的资源、时间以及从实际经验中吸取的教训,因此您使用的任何语言可以访问大量已证明的功能是很重要的。

清单 7 显示用于访问 PL/SQL 内置存储过程 DBMS_UTILITY.DB_VERSION(接受两个 OUT 参数)的代码,您的代码显示通过这两个 OUT 参数传回的结果。

清单7:builtInDBVersionCompat.rb

require 'dbi'

db_read_str = 'BEGIN DBMS_UTILITY.DB_VERSION(?, ?); END;'

dbh = DBI.connect('DBI:OCI8:ORCL', 'hr', 'hr')

sth_db = dbh.prepare(db_read_str)

sth_db.bind_param(1, ' ' * 50) # allow for up to 50 chars

sth_db.bind_param(2, ' ' * 50) # allow for up to 50 chars

sth_db.execute

version = sth_db.func(:bind_value, 1)

puts "Oracle DB Version: " + version

compatibility = sth_db.func(:bind_value, 2)

puts "Oracle DB Compatibility: " + compatibility

dbh.disconnect

图 8 显示了运行该 Ruby 代码的显示结果。

图8:Ruby 访问内置 DBMS_UTILITY.DB_VERSION 的结果

清单 7 还有另一个需要注意的有趣地方。该清单演示了 Ruby 符号(本例中为 :bind_value)的使用,还显示了使用 DBI::Handle(本例中名为 sth_db)函数方法调用特定于该 Ruby DBI 数据库驱动程序的功能。

清单 8 中的代码演示了使用 Ruby DBI 运行内置的存储函数 DBMS_METADATA.GET_DDL。由于多方面的原因,这个内置函数很有用,下面有关如何获取 Ruby DBI 中某个函数的返回值的示例就是其中一个原因。该函数需要将对象类型和对象名与几个可选参数一起传入。在这种情况下,您只传入两个必需的参数,并使用名称批注传递它们。

清单8:builtInGetDDL.rb

require 'dbi'

db_read_str = 'BEGIN :out1 := DBMS_METADATA.GET_DDL(object_type=>:in1, '

db_read_str += 'name=>:in2); END;'

puts db_read_str

dbh = DBI.connect('DBI:OCI8:ORCL', 'hr', 'hr')

sth_db = dbh.prepare(db_read_str)

sth_db.bind_param("out1", ' ' * 20000 )

sth_db.bind_param("in1", "TABLE")

sth_db.bind_param("in2", "STATES")

sth_db.execute

puts sth_db.func("bind_value", "out1")

dbh.disconnect

DBMS_METADATA.GET_DDL 函数可返回创建我们指定的表所需的 DDL。注意,这是有用的信息,因为它为我们提供了我们重新创建表时将需要的 DDL。返回的 DDL 明显比我们的 CREATE TABLE 语句更具体,因为它显式说明了我们假定的设置。查看这些结果可以更深入地了解 Oracle 数据库的工作,帮助数据库专业人员决定要更改和调整的参数。

除了显示如何访问 Oracle 存储函数的返回值之外,清单 8 还显示了与我们先前使用的不同的绑定变量的方法。在之前具有绑定变量的清单(清单 7)中,我们使用的是位置绑定,这意味着您将问号 (?) 放在数据库执行字符串中,并使用从 1 开始的连续整数来引用值。在清单 8 中,您使用的是名称绑定,这意味着我们放入的是 Ruby 符号(如本例中的 :out1、:in1 和 :in2),稍后通过名称引用这些绑定变量以访问其值。Ruby 对位置绑定与名称绑定的支持与 PL/SQL 对位置参数批注和命名参数批注的支持类似。图 9 显示了运行清单 8(用于创建我们的 STATES 表的 DDL)的结果。

图9:DBMS_METADATA.GET_DDL 中的 DDL create 语句

Ruby 与 Oracle:并非所有一切都包括在数据库中

Oracle 专业人员的兴趣并不仅限于 Oracle 数据库;值得关注的还包括配置文件、环境设置,甚至其他 Oracle 产品(如 Oracle 应用服务器)。我们来看几个将 Ruby 用于这些领域的示例。

阅读(584) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~