2014-06-27 36 views
0

我已經看到了各種示例,但我無法使用DBI。如何在外部SQL腳本中使用perl變量?例如,在Perl腳本代碼中,我想應該是:如何在SQL腳本中使用Perl變量(使用反引號)

$text = 'Germany'; 
@sql_output = `sqlplus -s user/pass\@databasename <<! 
@/pathtofile/test.sql; 
    QUIT; 
    !`; 
print @sql_output; 

SQL腳本是:

SELECT DISTINCT City FROM Customers 
Where Country = '$text' 

(只是作爲一個例子,我使用的代碼來自W3Schools的。 COM SQL教程http://www.w3schools.com/SQl/trysql.asp?filename=trysql_select_distinct

,我通過搜索找到了一個例子:

@/pathtofile/test.sql $text; 

但是,當我用我的代碼嘗試它時,它沒有工作。這是將perl變量合併到外部sql腳本中的正確方法嗎?

+1

你爲什麼不能使用DBI? – friedo

+1

+1,儘可能使用DBI。 – jcaron

+0

http://stackoverflow.com/questions/8966577/sqlplus-saving-to-file http://stackoverflow.com/questions/15253440/how-to-output-oracle-sql-result-into-a-file- in-windows –

回答

0
  1. 定義你的替換變量(一個或多個)
  2. 使用它們在這裏DOC根據您TEST.SQL的內容
  3. 將其保存到TEST.SQL
  4. 執行你的命令反引號

OR

  • 如果您想了解基本的SQL:安裝有一個DBMS允許交互/即席查詢的GUI(例如SQLite/SQliteman/SQLite瀏覽器插件,MySQL/MySQLWorkbench,Access,OO/LO Base,...)
  • 如果您想與Oracle合作:專注於完整/安裝(包括DBD:甲骨文,如果你的腳本語言的Perl)
0

這一個工程,基本流程如下

  1. 打開SQL文件
  2. 與變量替換$文本值
  3. 寫它的臨時文件
  4. 執行SQL再加上臨時文件(當你每次重新運行該它將替換該文件)

試用,讓我知道。

test.pl

#!/usr/bin/perl 

$text = 'Germany1'; 
open(HEADER,"SQLQuery.sql"); 
while(<HEADER>) { $_ =~ s/\$text/$text/g; $output .= $_; } 
close(HEADER); 

print "$output"; 


open (MYFILE, '>SQLQueryTemp.sql'); 

print MYFILE $output; 

close(MYFILE); 

#SQLQueryTemp.sql contains the $text replaced with 'Germany' 

#@sql_output = `sqlplus -s user/pass\@databasename <<! 
#@/pathtofile/SQLQueryTemp.sql; 
    #QUIT; 
    #!`; 
#print @sql_output; 

SQLQuery.sql

SELECT DISTINCT City FROM Customers 
Where Country = '$text' 
+1

你好,感謝您的建議!我能夠通過使用&符號而不是$的sql文件來解決這個問題。 – Brittany

+0

很好,如果你已經想通了。 –

相關問題