标签: dbi

如何使用 Perl 在 Sqlite 中准备 pragma 语句?

我试图准备一个 pragma 语句:

$sth = $dbh->prepare (q{pragma table_info(?)})
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

DBD::SQLite::db prepare failed: near "?"
Run Code Online (Sandbox Code Playgroud)

准备字符串有什么问题?

sqlite perl prepared-statement dbi

0
推荐指数
1
解决办法
845
查看次数

当我尝试使用外键约束创建 SQLite 表时,为什么会出现“DBD::SQLite::db do failed: near "transaction": syntax error”?

我正在尝试创建一个包含两个表的数据库:客户和交易(一个客户可以做很多交易,一个交易只能由一个客户完成)。我正在使用以下 Perl 代码:

my $dbh = DBI->connect("dbi:SQLite:dbname=$RealBin/active.db","","")
    or die $DBI::errstr;

my @ddl = (
    "CREATE TABLE IF NOT EXISTS customer (
      id INTEGER PRIMARY KEY UNIQUE,
      id_1 INTEGER,
      id_2 INTEGER,
      name TEXT
    )",
    "CREATE TABLE IF NOT EXISTS transaction (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      customer_id INTEGER REFERENCES customer(id),
    )"
);

for my $sql (@ddl){
  $dbh->do($sql);
}
Run Code Online (Sandbox Code Playgroud)

当我运行我的脚本时,我收到以下错误:

DBD::SQLite::db do failed: near "transaction": syntax error at
    t/oneToMany.t line 28 (#1)
DBD::SQLite::db do failed: near "transaction": syntax error at t/oneToMany.t line …
Run Code Online (Sandbox Code Playgroud)

sqlite perl dbi create-table

0
推荐指数
1
解决办法
1320
查看次数

序列化和反序列化perl DBI连接对象

我需要使用DBI连接对象序列化一个数组,以使用共享内存与其他进程共享.但反序列化不起作用.

使用可存储的qw /冻融/;

my @connections;

for(my $c = 0;$c < 5;$c++) {
  my $conn = DBI->connect($dsn,$user,$password,{'AutoCommit' => 1, 'RaiseError' => 1, 'PrintError' => 0});
  push(@connections,$conn);
}

my $shm = freeze(@connections);
my $obj = thaw($shm);
Run Code Online (Sandbox Code Playgroud)

返回错误:全局符号

"$ drh"需要明确的包名(您是否忘记在(eval 33)第6行声明"我的$ drh"?).

perl dbi storable

0
推荐指数
1
解决办法
139
查看次数

准备命令不适用于 DBI

我正在尝试这样做,但它不起作用

 my $sql2 = "SELECT CODE_ID,NAME_CODE,SUM(INR_COL + OUT_COL) AS \"TOTAL SUM\" FROM nwsa WHERE trunc(REPORT_DATE) = to_date('?','dd-mm-yyyy')AND CODE_ID IN (?,?,?,?,?,?,?,?,?,?,?)GROUP BY CODE_ID,NAME_CODE"; 
     $sth ->prepare($sql2);
     my $t= "06-01-2017";

     $sth->execute($t,'A12A','A12B','A12C','A12D','A12E','A12EB','A12F','A12G','A12I','A12O','A12U');
Run Code Online (Sandbox Code Playgroud)

sql perl dbi

0
推荐指数
1
解决办法
128
查看次数

perl + postgresql代码会导致Pg.pm出现问题

我在尝试将数据插入表中时遇到奇怪的错误,同时处理从不同表中获取的数据:

DBI::st=HASH(0x56261b345948)->_prepare(...): attribute parameter '0' is not a hash ref at /usr/lib/x86_64-linux-gnu/perl5/5.24/DBD/Pg.pm line 277.
Run Code Online (Sandbox Code Playgroud)

似乎导致它的行是上面代码片段中的$ dbh-> do():

 my $sth = $dbh->prepare(
     "SELECT (name, model), serial, firmware, timestamp FROM devicelog 
         WHERE id = $id AND fleet = $fleet AND timestamp >  
             (SELECT timestamp FROM devicelog WHERE fleet = $fleet AND id = $id ORDER BY timestamp DESC LIMIT 1)
             - INTERVAL '50 seconds'"
 );
 $sth->execute();
 while (my @row = $sth->fetchrow_array())
 {

     if (param('savetemplate'))
     {
         $dbh->do('INSERT INTO template (fleet, id, name, model, …
Run Code Online (Sandbox Code Playgroud)

sql postgresql perl dbi

0
推荐指数
1
解决办法
61
查看次数

Perl fetchrow_array 返回一个空数组

嘿,我正在编写一个需要从数据库获取数据的 perl 脚本。但是当我得到一个返回值时,它会返回到一个数组中,所以我取消引用它。但它仍然什么也没打印出来。我在 sqlplus 中运行了该命令,它在那里工作没有问题。我不知道如何解决这个问题

代码:

my $sth = $dbh->prepare("select XMLRECORD from F_COMPANY") or
            die "Couldnt prepare statement: " . $dbh->errstr;

$sth->execute();

# loop through the returned data 
while( my ($row) = $sth->fetchrow_array()){
   print "@$row\n";
}
Run Code Online (Sandbox Code Playgroud)

输出:实际上什么都没有

也尝试过这样的

perl dbi

0
推荐指数
1
解决办法
433
查看次数

使用Perl的DBI更新行的最佳方法,并将响应打印到cmd-line?

有一些使用DBI模块的Perl代码 - (代码在工作,如果需要我可以在早上发布) - 但主要是试图了解DBI需要对行进行更新 - 以及得到错误,或确认已执行UPDATE.

(下面只是一个基本的例子,如果你愿意,可以随意提供自己的示例和示例DDL ...只需要一些我知道的代码.我通过Perl PtkDB调试器运行我的代码,并且可以"看到"它生成并执行的SQL - 甚至粘贴在MySQL consol中并执行它......但它在Perl中什么都不做,甚至认为select语句正在工作.主要是想更好地了解DBI如何处理UPDATE到MySQL,如果DBI中有任何内置功能可以使调试更加简单.谢谢!)

所以,请提供一个完整的Perl脚本:

  • 设置连接(MySQL)
  • 根据ID选择第二行并获取名字和姓氏
  • 小写名称
  • 更新表格
  • 断开

样本表

<COL01>Id <COL02>FirstName <COL03>LastName
<ROW01-COL01>1 <ROW01-COL02>John <ROW01-COL03>Smith
<ROW02-COL01>2 <ROW02-COL02>Jane <ROW02-COL03>Doe
Run Code Online (Sandbox Code Playgroud)

更新(1):有问题的代码如下.我改变的唯一的事情是删除与问题和配置信息无关的代码(例如数据库名称,用户,密码等),并使变量的值生成超级简单.此代码由其他人和遗留代码库创建.

use strict;
use warnings;
use DBI;

sub dbOpen {
    my $dsn; 
    my $dbh;
    $dsn = "DBI:mysql:database=databasename;host=localhost;port=3306";
    $dbh = DBI->connect( $dsn, "root", "password" ) ||
    print STDERR "FATAL: Could not connect to database.\n$DBI::errstr\n";
    $dbh->{ AutoCommit } = 0;
    return($dbh);
} # END sub dbOpen

my $Data;
$Data = &dbOpen();

my …
Run Code Online (Sandbox Code Playgroud)

perl dbi

-2
推荐指数
1
解决办法
4万
查看次数