在AnySQL.net中搜索标签(Tags) 'DBI' 的结果:
让Perl DBI返回的记录按列存贮
最新版本的Perl DBI接口定义了Array DML接口, 指将一个数组作为一个绑定变量, 这个在数据库的接口层上是早已经支持的了, 象Oracle Pro*C中早就支持命名用数组了. 但在实际使用中, 去发现一点不方便的地方. 通常Perl中返回结果集是按行排列的, 如下所示: { ROW1 {col1, col2, col3, col4}, ROW2 {col1, col2, col3, col4}, ..... ROWn {col1, col2, col3, col4} } 但实际上在绑定时, 是这样的: $sth->bind_param_array( COL1={row1, row2, ... rown}); $sth->bind_param_array( COL2={row1, row2,...
学习Perl DBI -- 以SYSDBA或SYSOPER连接到Oracle
在连接9i或以上版本的Oracle数据库时, 必须指定SYSDBA或SYSOPER选项, 当你的Perl角本需要以SYS用户连接时, 如何指定呢? #!/usr/bin/perl -w # use DBI; # Get a database connection Handle. my $dbconn = DBI->connect("dbi:Oracle:", '/','/', {ora_session_mode=>2}); ...... 当ora_session_mode的值指定为2时表示以SYSDBA连接, 指定值为4时表示以SYSOPER来连接. 最近越来越发现Perl的好处, 以后将改用Perl来写些小角本, 并将源代码共享给大家....
学习Perl DBI -- 真正的Array DML支持
在早期的DBD Oracle (1.18)以前, Array DML的接口是假的, 其实是一条一条地执行的, 而DBD Oracle的主要编写人员也受到了很多开发人员的质问. 在DBD-Oracle v1.19的更改列表中, 我看到了下面的几行: =head1 Changes in DBD-Oracle 1.18 (svn rev 6697) Added support for native Oracle Array interface thanks Kristian Nielsen Added suppot for LOB Locators from Jeffrey Klein. Updated...
学习Perl DBI -- Array Insert/Update/Delete
在DBI的较新版本和DBD的最新版本(如: DBD Oracle V1.19)中就支持了Array DML操作, 这样可以大幅提高应用程序的性能, 在Perl中我们可以通过bind_param_array和execute_array来实现, 如下代码所示: my (@rowstats, $rv); $dbh->{AutoCommit} = 0; my @col1 = (.....); my @col2 = (.....); my $sth = $dbconn->prepare( "INSERT INTO T_PERLARRAY VALUES (?, ?)"); $sth->bind_param_array(1, \@col1); $sth->bind_param_array(2, \@col2); $rv =...
学习Perl DBI -- 语句的高级属性
1, NUM_OF_FIELDS -- 查询返回的字段个数 在执行之后, 就可以用这个属性获得SELECT语句返回的字段数了, 如下所示: $sth->execute(); print("Number of fields: $sth->{NUM_OF_FIELDS}\n"); 2, NAME, NAME_UC, NAME_LC -- 取得字段名 这些属性是一个数组, NAME返回的是大小写混合的列名, NAME_UC是大写, NAME_LC是小写. 使用方法如下所示: $sth = $dbh->prepare( "SELECT * FROM megaliths" ); $sth->execute();...
学习Perl DBI -- 数据库连接的高级属性
1, AutoCommit -- 是否自动提交 一般来说自动提交不利于应用程序的性能. $dbh->{AutoCommit} = 1; print "AutoCommit: $dbh->{AutoCommit}\n"; 2, ChopBlanks -- 取舍CHAR类型后面的空格 当你从数据库中取CHAR类型的值时, 你可以指定要不要带后面的空格, 在数据库中CHAR是定长的, 长足不足时, 后面以空格补充, 但你在写应用程序时, 可能并不想要后面的空格, 这时你可以将这个选项设为1. $dbh->{ChopBlanks} = 1; print "ChopBlanks: $dbh->{ChopBlanks}\n"; 3,...
学习Perl DBI -- 处理返回记录(Fetch)
在Perl中, 如果你的记录确保只有一条记录被返回, 则可以用以下的更简单的方法, 而不需要经过Prepare-Bind-Execute-Fetch四个阶段, 如下所示: my ($iniext, $nxtext) = $dbh->selectrow_array ( "SELECT INITITAL_EXTENT, NEXT_EXTENT FROM DBA_TABLESPACES WHERE TABLESPACE_NAME='USERS'"); my ($iniext, $nxtext) = $dbh->selectrow_array ( "SELECT INITITAL_EXTENT, NEXT_EXTENT FROM DBA_TABLESPACES WHERE TABLESPACE_NAME=?", undef, "USERS"); my...
学习Perl DBI -- 绑定(Bind)变量
给SQL语句动态地传入值的方法叫绑定(Bind), 在写数据库有关的角本时, 这是很重要的一点, 在Perl中你可以在SQL中写一个问号表示不确定的值, 不管是在SELECT还是在Insert/Update/Delete语句中, 都一样. 如下所示: my $sth = $dbh->prepare( "select tname from tab where tname like ?"); ...... my $sth = $dbh->prepare("Delete from test where col1=?"); 接下来在执行之前要传入真实的值和类型, bind_param就是用来传入值的, 第一个参数为问题的位置, 从1开始数; 第二个参数为变量的值; 第三个参数是可选的, 为参数的类型. 如下所示:...
学习Perl DBI -- 处理查询语句
在建立连接后, 就可以进行查询了. 可以用prepare函数来准备一个SQL语句, 获得一个Cursor的句柄(Handle)后就可以执行了, 如下所示: my $sth = $dbh->prepare("select ....."); if (!defined($sth)) { ...... } if ($sth->execute()) { ...... } 在调用execute函数(如果成功返回True, 否则False)后, 接下来需要进行Fetch操作才能将查询的结果取出来, 取出记录有很多种方法: my ($col1, $col2, ....); while ( ($col1, $col2, ...) = $sth->fetchrow_array() )...
学习Perl DBI -- 连接到数据库
从data_sources函数知道了连接信息的格式后, 我们就可以连接了, 只要调用DBI的connect函数, 根据连接信息的格式, 可以自动区别数据库类型, 选择合适的数据库驱动进行连接. 一般写法如下: my $dbh = DBI->connect("data source", "username", "password"); my $dbh = DBI->connect("data source", "username", "password", properties); connect函数如果连接失败会返回undef值, 因此很容易判断连接是否成功: my $dbh = DBI->connect("dbi:Oracle:test8i","anysql", "anysql") || die("Cannot connect...
学习Perl DBI -- Database Driver
从今天开始起从头学习Perl的DBI编程, 先接触到的是DBI中的数据库驱动(Driver)对象, 有三个函数可以调用: avaialable_drivers, data_sources和connect. connect是用来连接到数据库的, avaialable_drivers是用来看你所安装的Perl支持那几种数据库. 如下面的代码: #!/usr/bin/perl -w # use DBI; my @drvlist = DBI->available_drivers(); foreach my $drvname (@drvlist) { print ("$drvname\n"); } 在运行后输出的结果是: ExampleP Oracle Proxy data_sources函数是用来列出有那些数据库可以连接的,如下面的代码: #!/usr/bin/perl -w #...
为Windows上的ActivePerl编译和安装DBD-Oracle模块
Perl角本的确管用, 应当推荐使用, Windows平台可以用ActivePerl, 它可以免费下载. 为了和Unix一保持一致(/usr/bin/perl), 我是安装到"c:\usr"目录的, 接下来我们就来安装DBD-Oracle模块吧! 首先要安装DBI, ActivePerl默认安装是没有DBI的, 先让机器能连上互联网, 然后运行PERL_HOME的bin子目录下的Perl Package Manager(ppm.bat)程序, 会出现一个命令行, 输入"install DBI"就可以了, 这一步不会很久的. 如下所示: ppm> install DBI ==================== Install 'DBI' version 1.53 in ActivePerl 5.8.0.806. ==================== Downloaded 597997 bytes. Extracting 82/82: blib/arch/auto/DBI/Driver_xst.h...
偶学Perl过程中写的第二个程序
对于管理Unix/Linux上面数据库的DBA来说, 学点Perl是很有用的技术. 来到这个公司后, 所有的数据库都在Unix上, 因此也就有了学习Perl的压力, 可到现在也没有学好, 没有为公司写过一个用Perl语言的小工具. 下面是我学习过程中的第二个程序, 其中用到了DBI来查询数据库的记录. 程序如下: #!/usr/bin/perl -w # use DBI; # Get a database connection Handle. my $dbconn = DBI->connect("dbi:Oracle:tnsname","username","password"); my $row; # Fetch record row by row into an array $row=$dbconn->selectall_arrayref("SELECT TNAME,TABTYPE...
如何编译Perl的Oracle模块?
发现我们用的Perl在数据库版本变化后(如8i到9i, 9i到10g)时, DBD-Oracle模块都需要重新编译Perl才能工作. 在多种数据库版本混合使用的环境下, 就需要安装几个Perl(或只使用一个版本的客户端)才能解决问题, 其中的原因是因为编译出来的Oracle.so会去找特定版本的Oracle客户端库文件, 如下所示: $ldd ./lib/site_perl/5.8.5/sun4-solaris-64/auto/DBD/Oracle/Oracle.so libclntsh.so.9.0 => /export/home/oracle/products/9201/lib/libclntsh.so.9.0 libnsl.so.1 => /usr/lib/64/libnsl.so.1 libsocket.so.1 => /usr/lib/64/libsocket.so.1 ...... 其实在每一个Oracle的客户端库目录下都会有一个"libclntsh.so"的链接指向"libclntsh.so.ver", 如果在ldd的输出中只去查找"libclntsh.so"的话, 就可以解决在8i/9i/10g下的重新编译的问题了. 我在编译OCI程序时, 就没有不同版本的客户端的问题. $ldd ociuldr.bin libm.so.1 => /usr/lib/libm.so.1 libclntsh.so => /export/home/oracle/products/9201/lib32/libclntsh.so ...... 今天就将这个方法用在Perl的DBD-Oracle模块中试试吧, 首先下载DBD-Oracle源程序, 然后就可以开始了. 如果你只想替换Oracle.so文件,...
站内搜索 | Search
总数: 526 | 留言: 1642
- Name: Fangxin Lou
- MSN: anysql©live.com
- Mail:anysql©yahoo.com
anysql©gmail.com - Skype: anysql
- AIM: loufangxin
- Mobile:008615925611590
分类 | Categories
软件下载:
MSN: loufangxin(a)msn.com, Mail: anysql(at)126.com/support(at)iamdba.com, Skype ID:anysql