簡體   English   中英

在perl中執行sqlplus命令

[英]Execute sqlplus command in perl

我正在嘗試通過 perl 中的 sqlplus 命令檢查 sql 連接。 我使用以下代碼來做到這一點。

print "Befores\n";
$rc=system("sqlplus system/system @sqlfile.sql");
print "After $rc\n";
sleep(10);

這次rc中的返回值為0。 但是當我給出錯誤的憑據時。 sqlfile.sql 文件包含唯一的 sql 命令“EXIT”。

$rc=system("sqlplus systemabc/system @sqlfile.sql");

這也以返回代碼 0 結束。但是,手動執行憑據是錯誤的。 幫我解決這個問題...

提前致謝。 :)

是的,親愛的朋友,,,現在工作正常。

我只是在@sqlfile.sql 之前添加了'\\',即,我對'@' 符號進行了轉義,並在密碼后提到了數據庫名稱。 現在我得到了完美的輸出。 :)

變化如下:

$rc=system("sqlplus -L system/system@tstdb1 \@sqlfile.sql");

這里我使用的格式是: sqlplus -L Uname/Password@DBName \\@SqlFileContainingMySQLQuries

並且 -L 指定如果初始連接不成功,則不重新提示輸入用戶名或密碼。 有關更多信息,請轉到關於 SQLPLUS

我也嘗試在 sqlfile.sql 之前不轉義“@”符號,但更改也應適用於倒置昏迷,我使用了單倒置昏迷而不是雙倒置昏迷,如下面@René Nyffenegger 所述:

$rc=system('sqlplus -L system/system@tstdb1 @sqlfile.sql');

這里我使用的格式是: sqlplus Uname/Password@DBName @SqlFileContainingMySQLQuries

這也很好用。

是的... :) 我也試過這個,謝謝你的回答@user252025

我在做:

$rc=system("sqlplus -L user/user \@sql_file.sql");

Da rtrn 代碼對我來說是錯誤的 現在我已更改為

$rc=system("sqlplus -L user/user@Mydb \@sql_file.sql");

它的工作正常......再次感謝......

問題是線路

$rc=system("sqlplus system/system @sqlfile.sql");

您有一個用雙引號 ( "..." ) 引用的字符串。 此類字符串嘗試對變量進行擴展(以@$%開頭)。 由於字符串中有@sqlfile ,perl 假定這是一個數組(當然不是)。

補救:

$rc=system('sqlplus system/system @sqlfile.sql');

你為什么做這個? DBI 的存在是為了提供一種使用數據庫和明智地從它們獲取輸出/返回/錯誤的理智和安全的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM