DBの環境変数について

このQ&Aのポイント
  • OracleのユーザIDやパスワード等がかかれている環境設定専用のファイルを読み込み、環境変数にセットし、DBからデータを抽出するサブルーチンを作成しています。
  • ファイルを読み込み、環境変数にセットするところまではうまく動くが、DBからデータを抽出できない問題が発生しています。
  • ファイルを読み込まずに直接サブルーチン内に記述すると、正常にデータを抽出できますが、原因はわからず困っています。アドバイスをお願いします。
回答を見る
  • ベストアンサー

DBの環境変数について

OracleのユーザIDやパスワード等がかかれている環境設定専用のファイルを読み込み、 環境変数に読み込んだ内容をセットし、DBからデータを抽出するというサブルーチンを作っています。 ファイルを読み込み、環境変数にセットするところまでは動くのですが、 DBからデータを抽出することができません。 ただし、ファイルを読み込まずじかにサブルーチンの中に書き込んでいると正しく抽出することができます。 原因がまったくわからないので、アドバイスをお願いします。 -----以下環境ファイル読み込みプログラムの一部----- my $env_file= '○/△/■';←環境設定のファイルパス open(KAN, $env_file); while(<KAN>){ ($name, $val) = split(/=/, $_);←環境ファイルを=で分割 chomp($val); $kankyou{$name} = $val; ←取得したものをハッシュに } close(KAN); $ENV{'userid'} = $kankyou{'db_userid'}; $ENV{'passwd'} = $kankyou{'db_passwd'}; $ENV{'dbstring'} = $kankyou{'db_dbstring'}; このあとDBからのデータ抽出処理実行と続く ---------------------------------- ---ここから環境ファイルの内容--- db_userid=AAA db_passwd=BBB db_dbstring=CCC ↑この内容を下記の書き方でサブルーチンの中で直接書くと動く。 $ENV{'userid'} = 'AAA';

  • Perl
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • zebedeer
  • ベストアンサー率66% (80/121)
回答No.1

とりあえず、ファイルから読み込んだ場合と、直接設定した場合とで「use Data::Dumper;print Dumper \%ENV;」の結果を比べてみては? #ところで、環境ファイルの改行コードは、読み込むプログラムの環境と一致してますよね?

pyonsama
質問者

お礼

回答、ありがとうございます。 よくよく再確認したところ、環境ファイルの改行コードが 読み込むPerlプログラムの改行コードと違っていました。 改行コードを同じにしたところ無事に動きました。 ありがとうございました。

関連するQ&A

  • Apacheのhttpd.confのCustomLogに、環境変数を複数指定したい

    初めて質問させていただきます。至らない点もあるかと思いますが宜しくお願いいたします。 似たような質問を探している人がいるかもしれませんので、まず一般的な質問をさせていただきます。Apache2の設定ファイルのhttpd.confに、CustomLogという設定項目がありますが、このCustomLogの書式は CustomLog [ログファイルパス] [書式] [env=***] という3つの引数を取るということでいいと思うのですが、この[env=***]のところに、不一致の判定と一致の判定を指定したいのです。 例えばこんな状況です 1) SetEnvIf [判定の条件式1] [環境変数A] [環境変数X] 2) SetEnvIf [判定の条件式2] [環境変数B] [環境変数X] 3) SetEnvIf [判定の条件式3] [環境変数B] [環境変数X] と、SetEnvIfで環境変数を2個ずつ指定した後、 CustomLog logs/[ログファイルA] combined env=[環境変数A] ←1) に一致で書き込み CustomLog logs/[ログファイルB] combined env=[環境変数B] ←2,3) に一致で書き込み CustomLog logs/[ログファイルX] combined env=![環境変数X] ←1,2,3) に不一致で書き込み となることは分かるのですが、上の例だと不一致と一致を同時に指定することはできません。そのような場合はSetEnvIfの判定条件を工夫するのでしょうか? 私の場合の具体的な質問はこうです。 「WMVファイルだけのアクセスログファイルを作りたい」 「かつ、家庭内LANからのアクセスログは排除したい」 と思い、下のように設定したのですが、 #家庭内LANからのログを排除するための環境変数 SetEnvIf Remote_Addr 192.168.0. nolog #WMVファイルのログを取るための環境変数 SetEnvIf Request_URI \.wmv$ wmv-files このように設定すると、最初の例のように、不一致と一致のログをうまく作れません。 長くなってしまってまとまりがありませんが、何分素人なのでこれが限界です。。どうか回答のほど宜しくお願いいたします。

  • PowerShellと環境変数pathについて、

    PowerShellと環境変数pathについて、 Windowsの環境変数pathには、アプリケーションをインストールしたら自動的に追加されたりします。 これらの中には%systemroot%のようにdos系の環境変数を使った物もあります。 PowerShell から$env:pathを参照した場合も dosから%path%を参照した場合も pathの内容自体は同じですが、 PowerShellから実行する場合は、%systemroot%のようなdos系の環境変数は機能せず、pathが通っていない状態になります。 そんなものなのでしょうか? PowerShellを同じように使うためには、 なんとなく気持ちが悪いですが、 %systemroot%をc:\windowsで登録しなおすか、もしくは二重登録する必要があるのでしょうか? 何かスマートな方法はありますでしょうか?

  • CreateProcessでの環境変数の設定の仕方

    PATHを設定してCommand.comを実行したいのですが、 CreateProcessでの環境変数の設定の仕方がわかりません char* env = "PATH=c:\\data"; CreateProcess(NULL,"command.com /k path ", NULL, NULL, FALSE, 0, env, NULL, &si, &pi); このようにしてみたところDos窓が起動しますが、 表示されるPATHはデフォルトのままです。 環境は VC++6.0 MFC です。 どうか宜しくお願いします。

  • [bash]ファイル内の変数名を値に変換したい

    bashです。 環境変数に例えば以下の変数が設定されているとします。 VAL1="aaa" VAL2="bbb" aというファイルに以下が記載されているとします。 ${VAL1} ${VAL2} aというファイルを読み込んだ際に、 ${VAL1}を"aaa"、${VAL2}を"bbb"と読み替えて読み込む方法はありますか。 変数のパターンは事前に分からないので、 '${VAL1}'を"aaa"に置換する、とかの方法はなしです。 evalを使えばうまくいきそうな気がするのですが、うまくいきませんでした。 > cat a | eval ⇒何も出力されない。 何か分かる方教えてください。

  • mac OSXの環境変数

    基本的な質問で申し訳ありませんが、macの環境変数について教えてください。 windowsでは、マイコンピューターのプロパティで設定した環境変数がパソコンのログイン時に読まれると思うのですが、mac(OSX Leopard)では、インストール後の初期段階では、どこのディレクトリにある、どのファイルの内容を読み込んでいるのでしょうか? /etcのbashrcファイルの内容を読み込むと思っていたのですが、何の環境変数も設定されていないようです。 気になったので、ご質問させていただきました。 どなたかご教示ください。 よろしくお願いします。

    • ベストアンサー
    • Mac
  • フォームからDBへの接続

    フォームからDBへのデータ挿入なんですが、どうしてもうまくいきません・・・。 MYSQLへの接続はうまくいくのですが・・・ <? $link=mysql_connect("localhost","****","::::"); mysql_select_db("@@@@@",$link); $sql=" insert into users( passwd, name, name_kana, seibetu, birthday, email, postal_code, xmpf, address1, address2 ) values( '$passwd', '$name', '$name_kana', '$seibetu', '$year-$month-$day', '$email', '$postal1', '$xmpf', '$address1', '$address2' )"; mysql_query($sql,$link); mysql_close($link); ?> 上記がソースです。 bithdayのフォールドはdatetimeで、年はyear月はmonth日はdayとしています なにかおかしいところありますか?

    • ベストアンサー
    • MySQL
  • 変数について

    プロパティファイルから読み取った値をほかのクラスから使いたいと考えて以下のような2つのクラスを作成しました。 [プロパティ読み取り] public class Admin{ public static String HOST; public static String ACCOUNT_NAME; public static String ACCOUNT_PASSWD; /** * * @throws java.io.IOException */ public Admin() throws IOException{ try{ // read from properties file.      Properties pro = new Properties(); pro.load(new FileInputStream("プロパティファイル")); HOST = pro.getProperty("host"); ACCOUNT_NAME = pro.getProperty("account.name"); ACCOUNT_PASSWD = pro.getProperty("account.password"); }catch(Exception e){ System.out.println(e); } System.out.println("Host: "+ HOST); System.out.println("User: "+ ACCOUNT_NAME); System.out.println("Password: "+ ACCOUNT_PASSWD); } } [変数使用] public class Update { public static void main(String[] args) { System.out.println("Host: "+ Admin.HOST); System.out.println("User: "+ Admin.ACCOUNT_NAME); System.out.println("Password: "+ Admin.ACCOUNT_PASSWD); } } Adminクラスの出力では、変数に正しい値がセットされていますが、Updateクラスではnullが返ります。 スコープの問題かと思うのですが、どこをどのように改良したらよいかわかりません。 nullではなく、正しい値を取得するにはどのようにすればよいでしょうか

    • ベストアンサー
    • Java
  • perl+mysqlで変数が使えなくて困ってます。

    use DBI; $id=1; $nm="gootarou"; $mm="friend"; $user = '***'; $passwd = '***'; $db = 'DBI:mysql:***'; $dbh = DBI->connect($db, $user, $passwd); $sth = $dbh->prepare("INSERT INTO list (id,name,memo) VALUES ($id,$nm,$mm)"); $sth -> execute; $sth -> finish; $dbh -> disconnect; exit; mysqlの勉強を始めたところでいきなり壁にぶちあたってしまいました^^; googleその他で検索かけてみましたが解決に至りませんでしたので 質問させてください。 >$sth = $dbh->prepare("INSERT INTO list (id,name,memo) VALUES ($id,$nm,$mm)"); ↑ここの部分を >$sth = $dbh->prepare("INSERT INTO list (id,name,memo) VALUES ('1','gootarou','friend')"); と直接入力してやれば問題なく登録されるのですが、変数を使うと正常に処理がされません。 数字を変数に代入したものは大丈夫なのですが 英字や二バイト文字を変数に代入したものが問題あるようです。 それぞれのフォームの型はvarchar(100)で設定しています。 ループで一括処理したいのですが変数が使えないことには・・と困ってます。 よろしくお願いします。

  • register_globalや$$という変数について・・・

    PHPの勉強を始めて2週間足らずの初学者です。 質問させていただきます。 環境はwindowsXP+xampp+PHP5.2です。 現在、やや古めのPHP書籍のサンプルを試しています。 register_globals=Onの状態では、問題なく動作しました。 しかし、Offにすると反応しない部分があります。 test.phpにてsupport.phpをincludeしているのですが、 以下の箇所をそれぞれregister_globals=Off用に書き換える知恵が ありません。ほんの一部のみの抜粋にて恐縮ですがご査収願います。 ---「test.phpの一部」----------------------------------------- echo '<INPUT TYPE="radio" NAME="',$name,'"VALUE="',$kaitoubango,'">',"$val\n<br />";} ---「support.phpの一部」-------------------------------------- $kaitoubango++; $name = $kaitoubango; $val = $$name; -------------------------------------------------------------- 繰り返しになりますが、register_globals=Onの状態では、問題なく動作しましたが、Offでこの状態でフォームアクションしても$val = $$name;に値がありません。 「support.php」の$$nameを$_POST['name']に変更すれば、可能かと思いましたが、ダメでした。 なお、部分的な質問になりますが、 (1)「test.php」のNAME="',$name,'"VALUE="',$kaitoubango,'"ですが、 何故、NAME="$name" VALUE="$kaitoubango"でないのでしょうか? 「',」は何を意味しているのでしょうか? (2)「support.php」の$$nameという変数ですが、$が2つ連続した変数は今のところ、初めて見ました。これはどういう意味なのでしょうか? お詳しい方がおられましたら、何卒アドバイスのを頂戴できればと思います。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • QUERY_STRING が、SSIを使用すると取得できません

    以下の2ファイルを使用して、 環境変数QUERY_STRINGの取得のテストをしています。 ------------------------------------------------ ファイル名:test_env.cgi ------------------------------------------------ 内容: print <<"HERE"; $ENV{'QUERY_STRING'}<br> $ENV{'REMOTE_ADDR'} HERE ------------------------------------------------ ------------------------------------------------ ファイル名:test_env.shtml ------------------------------------------------ 内容: <html> <head> <title> 環境変数のテスト </title> </head> <body> <!--#include virtual="/cgi-esp/test_env.cgi"--> </body> </html> ------------------------------------------------ ブラウザのアドレスバーに test_env.cgi?name=aaa と入力して実行すると、 QUERY_STRING、REMOTE_ADDR の両方が出力されますが、 test_env.shtml?name=aaa だと、 ローカルでは両方出力できたのに、 サーバにアップするとQUERY_STRINGが出力されません。 SSIを使用してCGIファイルを実行した場合、 QUERY_STRINGは取得できなくなるものなんでしょうか? それとも、取得できる書き方があるのでしょうか? どなたか、ご教示ください。

    • ベストアンサー
    • Perl

専門家に質問してみよう