Perl脚本中的Oracle DBD错误

时间:2015-03-20 07:20:30

标签: sql oracle perl

我正在尝试运行perl脚本但是我得到了一个oracle错误。

DBD::Oracle::db prepare failed: ORA-01756: quoted string not properly terminated (DBD ERROR: OCIStmtPrepare) 

但是这个SQL QUERY在TOAD中完美地工作

MY perl连接详情:

my $dbh = DBI->connect($dsn, $dbuser, $dbpass, { RaiseError => 1, AutoCommit => 0 });
    my $sth=$dbh->prepare($SQL);
    $sth->execute or die "EXEC ERROR $sth->errstr";

sql查询:

SELECT name FROM employee WHERE
            event IN ('IPO', 'RIGHTS')
        AND (NOT market_code = 'ID' OR NOT event = 'RIGHTS')
        AND NOT market_code = 'IN'
        AND NOT market_code = 'NZ'
        AND name NOT LIKE '%stat%'
          AND NOT REGEXP_LIKE (name, 'S.K(Q|S)$')
          AND name NOT LIKE '.%'
          AND name NOT LIKE '%ol.SI'
          AND name NOT LIKE '%bi.SI' 

1 个答案:

答案 0 :(得分:0)

Perl将插入双引号字符串文字,例如

 my $SQL = "REGEXP_LIKE (name, 'S.K(Q|S)$')";

在此处,您的“变量”$'将替换为其值。

如果您不想这样,请使用非插值版本:

 my $SQL = q{REGEXP_LIKE (name, 'S.K(Q|S)$')};

单引号字符串也可以,但由于你的内部有单引号,q{}很方便。您可以选择所需的任何终结符(例如q[]),也可以使用qq{}进行插值。