如何在SQL脚本中使用Perl变量(使用反引号)

时间:2014-06-27 19:52:17

标签: sql oracle perl sqlplus

我见过各种例子,但我无法使用DBI。我如何在外部sql脚本中使用perl变量?例如,我想要的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 tutorial http://www.w3schools.com/SQl/trysql.asp?filename=trysql_select_distinct

我通过搜索找到的一个例子是:

@/pathtofile/test.sql $text;

但是当我用我的代码尝试它时,它不起作用。这是将perl变量合并到外部sql脚本中的正确方法吗?

2 个答案:

答案 0 :(得分:0)

  1. 定义替换变量
  2. 根据test.sql
  3. 的内容在此处使用doc
  4. 将其保存到test.sql
  5. 执行反引号命令
  6. OR

    • 如果您想学习基本的SQL:使用允许交互式/即席查询的GUI安装DBMS(例如SQLite / SQliteman / SQLite浏览器插件,MySQL / MySQLWorkbench,Access,OO / LO Base,...)< / LI>
    • 如果您想与Oracle合作:专注于完整/有效的安装(如果您的脚本语言是Perl,则包括DBD:Oracle)

答案 1 :(得分:0)

这个工作,基本上流程如下

  1. 打开SQL文件
  2. 将$ text替换为变量值
  3. 将其写入临时文件
  4. 在临时文件上执行SQL plus(每次重新运行时都会替换文件)
  5. 试试让我知道。

    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'