Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何使用Perl将blob和时间戳插入Oracle中的表中?_Sql_Oracle_Perl_Dbi - Fatal编程技术网

Sql 如何使用Perl将blob和时间戳插入Oracle中的表中?

Sql 如何使用Perl将blob和时间戳插入Oracle中的表中?,sql,oracle,perl,dbi,Sql,Oracle,Perl,Dbi,我有一个如下所示的Oracle表。 我需要使用perl在这个表中插入一条记录。 要插入的数据包括varchar、number、blob和timestamp。 我不插入attr1,因为它默认为零。 另外,是否有办法获取插入的行数? 我想出了一些代码,但不完整。我正在寻找关于如何编写代码的帮助,并将感谢任何帮助,特别是因为我是perl的新手 table attr1 INT DEFAULT 0 NOT NULL, attr2 VARCHAR(255) NOT NULL, att

我有一个如下所示的Oracle表。 我需要使用perl在这个表中插入一条记录。 要插入的数据包括varchar、number、blob和timestamp。 我不插入attr1,因为它默认为零。 另外,是否有办法获取插入的行数?

我想出了一些代码,但不完整。我正在寻找关于如何编写代码的帮助,并将感谢任何帮助,特别是因为我是perl的新手

table
    attr1 INT DEFAULT 0 NOT NULL,
    attr2 VARCHAR(255) NOT NULL,
    attr3 NUMBER NOT NULL,
    attr4 BLOB NOT NULL,
    attr5 TIMESTAMP NOT NULL,
    CONSTRAINT table_pk PRIMARY KEY (attr1, attr2)

对于时间戳,我使用这个,它符合:

我找到了LOB,但我从来没用过

my $in_clob = "<document>\n";
$in_clob .= "  <value>$_</value>\n" for 1 .. 10_000;
$in_clob .= "</document>\n";
my $in_blob ="0101" for 1 .. 10_000;
 
$SQL='insert into test_lob3@tpgtest (id,clob1,clob2, blob1,blob2) values(?,?,?,?,?)';
$sth=$dbh->prepare($SQL );
$sth->bind_param(1,3);
$sth->bind_param(2,$in_clob,{ora_type=>SQLT_CHR});
$sth->bind_param(3,$in_clob,{ora_type=>SQLT_CHR});
$sth->bind_param(4,$in_blob,{ora_type=>SQLT_BIN});
$sth->bind_param(5,$in_blob,{ora_type=>SQLT_BIN});
$sth->execute();
my$in\u clob=“\n”;
$in\u clob.=“$\u\n”表示1。。10_000;
$in_clob.=“\n”;
我的$in_blob=“0101”兑换1。。10_000;
$SQL='insert到测试中_lob3@tpgtest(id,clob1,clob2,blob1,blob2)值(?,,,,,?);
$sth=$dbh->prepare($SQL);
$sth->bind_参数(1,3);
$sth->bind_param(2,$in_clob,{ora_type=>SQLT_CHR});
$sth->bind_param(3,$in_clob,{ora_type=>SQLT_CHR});
$sth->bind_param(4,$in_blob,{ora_type=>SQLT_BIN});
$sth->bind_param(5,$in_blob,{ora_type=>SQLT_BIN});
$sth->execute();

以下几点对我很有用:

eval{blob_and_other_data($attr2, $attr3, $attr4, $attr5)};

sub blob_and_other_data {
    my $attr2 = shift;
    my $attr3 = shift;
    my $attr4 = shift;
    my $attr5 = shift;
    my $sql_statement = "insert into table (attr2, attr3, attr4, attr5) VALUES (?, ?, ?, ?)";
    
    my $sth = $dbh->prepare($sql_statement);

    $sth->bind_param(1, $attr2);
    $sth->bind_param(2, $attr3);
    $sth->bind_param(3, $attr4, { ora_type => ORA_BLOB } );
    $sth->bind_param(4, $attr5);

    $sth->execute();
}

我不熟悉Oracle,但似乎描述了
时间戳
数据类型和
BLOB
数据类型。因此,您正在询问如何将Perl自定义格式转换为这些类型?非常感谢。让我试试这个。
my $in_clob = "<document>\n";
$in_clob .= "  <value>$_</value>\n" for 1 .. 10_000;
$in_clob .= "</document>\n";
my $in_blob ="0101" for 1 .. 10_000;
 
$SQL='insert into test_lob3@tpgtest (id,clob1,clob2, blob1,blob2) values(?,?,?,?,?)';
$sth=$dbh->prepare($SQL );
$sth->bind_param(1,3);
$sth->bind_param(2,$in_clob,{ora_type=>SQLT_CHR});
$sth->bind_param(3,$in_clob,{ora_type=>SQLT_CHR});
$sth->bind_param(4,$in_blob,{ora_type=>SQLT_BIN});
$sth->bind_param(5,$in_blob,{ora_type=>SQLT_BIN});
$sth->execute();
eval{blob_and_other_data($attr2, $attr3, $attr4, $attr5)};

sub blob_and_other_data {
    my $attr2 = shift;
    my $attr3 = shift;
    my $attr4 = shift;
    my $attr5 = shift;
    my $sql_statement = "insert into table (attr2, attr3, attr4, attr5) VALUES (?, ?, ?, ?)";
    
    my $sth = $dbh->prepare($sql_statement);

    $sth->bind_param(1, $attr2);
    $sth->bind_param(2, $attr3);
    $sth->bind_param(3, $attr4, { ora_type => ORA_BLOB } );
    $sth->bind_param(4, $attr5);

    $sth->execute();
}