[英]How to escape special character in the table line in perl
我試圖訪問一個名稱中有特殊字符的表,有人可以請幫助:(
SELECT
q.user_data.chat_event_text, q.enq_time
FROM
swapp_owner.aq'$'CHAT_EVENT_QUEUE_table q,
CHAT_EVENT_QUEUE_table p
where
q.expiration_reason = 'TIME_EXPIRATION'
and q.msg_id=p.msg_Id
and p.enq_time > (SYSDATE - 50000/(24*60))
order by
q.enq_time desc;
錯誤:
名稱“main :: CHAT_EVENT_QUEUE_table”僅使用一次:./t21行可能的拼寫錯誤30.在連接(。)中使用未初始化的值$ CHAT_EVENT_QUEUE_table或在./t21第30行使用字符串.DBD :: Oracle :: db prepare failed: ORA-01756:引用字符串未正確終止(DBD錯誤:OCIStmtPrepare)[for Statement“SELECT q.user_data.chat_event_text,q.enq_time FROM swapp_owner.aq'q,CHAT_EVENT_QUEUE_table p其中q.expiration_reason ='TIME_EXPIRATION'和q.msg_id = p.msg_Id和p.enq_time>(SYSDATE - 50000 /(24 * 60))按q.enq_time desc排序;“]在./t21第30行.DBD :: Oracle :: db准備失敗:ORA-01756:引用字符串未正確終止(DBD ERROR:OCIStmtPrepare)[for Statement“SELECT q.user_data.chat_event_text,q.enq_time FROM swapp_owner.aq'q,CHAT_EVENT_QUEUE_table p其中q.expiration_reason ='TIME_EXPIRATION'和q.msg_id = p.msg_Id和p.enq_time>(SYSDATE - 50000 /(24 * 60))按q.enq_time desc排序;“]在./t21第30行。
添加完整腳本:
!/usr/bin/perl -w
BEGIN { $ENV{ORACLE_HOME}='/u01/app/oracle/product/11.1.0/'; } use strict;
use DBI; use utf8;
my $DB='pre14msv'; my $db_user='SWAPP_OWNER'; my $password=`/usr/bin/pmo view password -u $db_user -t $DB`; chomp($password); my $db = DBI->connect( "dbi:Oracle:pre14msv", $db_user, $password )
|| die( $DBI::errstr . "\n" );
$db->{AutoCommit} = 0;
$db->{RaiseError} = 1;
$db->{ora_check_sql} = 0;
$db->{RowCacheSize} = 16;
my $sth = $db->prepare("SELECT q.user_data.chat_event_text, p.enq_time FROM swapp_owner.aq\$\CHAT_EVENT_QUEUE_table q,CHAT_EVENT_QUEUE_table p where q.expiration_reason = 'TIME_EXPIRATION' and q.msg_id=p.msg_Id and p.enq_time > (SYSDATE - 50000/(24*60)) order by q.enq_time desc; "); $sth->execute();
while ( my @row = $sth->fetchrow_array() ) {
foreach (@row) {
$_ = "\t" if !defined($_);
print "$_\t";
}
print "\n"; }
print "If you see this, execute phase succeeded without a problem.\n";
END {
$db->disconnect if defined($db); }
在Perl中, '
內部變量名與::
相同,所以$'CHAT_EVENT_QUEUE_table
變為$::CHAT_EVENT_QUEUE_table
,這是包main
的包變量: $main::CHAT_EVENT_QUEUE_table
- 除了你沒有這樣的變量。
如果您希望文字字符串$'CHAT_EVENT_QUEUE_table
存在,請將SQL放入單引號字符串中,該字符串不插入變量,例如
my $sth = $db->prepare(q(... SQL here no $'variables ...));
如果由於某種原因你需要轉義碼,請轉義$
: \\$
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.