我正在尝试运行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'
答案 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{}
进行插值。