[英]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.