• ベストアンサー

perlのプレースフォルダでData型にデータをセットしたい

perlのプレースフォルダを使ってOracle10のData型にデータをセットしたのですが、以下のエラーメッセージが表示されます。 Cannot execute. DBD::Oracle::st execute failed: ORA-01830: 日付書式の変換で不要なデータが含まれています データは、"2007/04/30 17:39:55"という文字列をbind_paramしているのですが、オラクルでは、DATE型をエラーなしでセットするにはどうしたらよいのでしょうか?

  • bazax
  • お礼率5% (12/228)
  • Oracle
  • 回答数1
  • ありがとう数0

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

  • ベストアンサー
回答No.1

SQL文を、to_date(:?,'yyyymmdd hh24miss')と書けば良いんじゃないですか? もしくは、暗黙の型変換に期待して、日付デフォルト書式を変更するか。 ただ、デフォルト書式の変更だと、複数個の日付をバインドするときに困るし、 暗黙の型変換が正しく動作しない場合もあるので、最初に書いた方法(to_date)がお勧めかと。

関連するQ&A

  • オラクル10で、perlのプレースフォルダーで日付型のデータを入れようとしていますがどのようにすればよいのでしょうか

    オラクル10で、perlのプレースフォルダーで日付型のデータを入れようとしていますがどのようにすればよいのでしょうか? オラクルのSYSDATE値と名前をインサートしたいのですが 以下の、[]の2つの部分がかわりません。 REGはDATE型です。 [オラクルのSYSDATE値の取得する] my $datetime = [オラクルのSYSDATE値をセットする]; my $sql = qq{insert into TEST (REG, NAMAE) VALUES (?, ?)}; my $sth = $dbh1->prepare( $sql ); $sth->bind_param(1, $datetime ); $sth->bind_param(2, "山田" ); $sth->execute(); よろしくお願いいたします。

  • PerlからOracleに接続

    ご存知の方おられましたら、ご教示お願い致します。 昨日より、Perlのプログラムを始め、Oracleに接続するものを作成しておりまが以下のエラーがでてきて困っております。 接続部分ソース--------------------------- #!C:\パス use DBI; $dbh = DBI->connect("dbd:Oracle:データベース名", "ユーザ","パスワード"); エラー----------------------------------- install_driver(Oracle) failed: Can't locate loadable object for module DBD::Orac le in @INC (@INC contains: C:/Program Files/Perl/lib C:/Program Files/Perl/site/ lib .) at (eval 1) line 3 Compilation failed in require at (eval 1) line 3. Perhaps a module that DBD::Oracle requires hasn't been fully installed at database.pl line 5 環境--------------- OS WindowsXP pro perl ActivePerl-5.8.6.811 DBI,DBDはPPMでインストールしました。 接続先 OS Windows2003 DB oracle9 後、 use DBI; @ary = DBI->available_drivers; foreach (@ary){ print $_,"\n"; } でDBI使用できるDBDドライバを出した結果、Oracleが表示されておりました。 どうか、ご存知の方お願い致します。

  • PostgreSql & Perl でのインサート処理失敗について

    前回はありがとうございました。 今回はpostgresqlをPerl(DBD::pg)でアクセスし、インサート しようとした場合なのですが、 DBD::Pg::st execute failed: ERROR: parser: parse error at or near "re" at character 3576 とメッセージが表示され処理がうまくいきません。 過去に同様のエラーで落ちたことがあって、何パターンかは このメッセージが表示される原因は知っているつもりなんですが、 今回は過去の経験に当てはまらないように見えます。 ヒントになることなど、なんでも構いませんのでお助け願います。

  • Perl<->Oracle間での文字化けについて

    初投稿になります。過去ログを検索したのですが、似た質問はあるものの根本的な解決につながらなかったので、新規の投稿をさせていただきました。 乱文ご容赦ください。 今現在Oracleサーバ上でPerlのプログラムを組んでいます。とは言えPerlも既存の物を改変できる程度の知識ですし、DBに関しての知識はほぼ皆無です。 それでもNet等を参照しながら、どうにかDB内を参照できるようにはなってきました。が、ここで日本語の取り扱いについて突き当たってしまいました。 まずは以下のPerlファイルをご覧ください。 #ソースの前後は割愛 #DBに接続した後のソース # 読み込みcharセットの宣言 $dbh->do("set names 'ujis'"); # 動的SQL文の発行 $hSt = $dbh->prepare(" SELECT * FROM DDD WHERE EEE='100001' "); # 実行 $nRes = $hSt->execute; # データ取得 while($raRes = $hSt->fetchrow_arrayref) { print join(",", @$raRes), "\n"; #","区切りで出力 } #実行すると DBD::Oracle::db do failed: ORA-00922: ??????????????????????? (DBD ERROR: error possibly near <*> indicator at char 4 in 'set <*>names 'ujis'') [for statement ``set names 'ujis''']) at ./test.pl line 18. ,???????,ABC,??? ??152 ,???? ,??????????123,03-xxxx-xxxx ... #表示された内容部分はもっと多くのデータでしたが省略してあります と、散々な結果でした・・・(;^_^ A どなたか解決方法を教えていただけますか? あ、最後になりますが環境です。 サーバ: Oracle9 Perl5.8.0 ソース全体は以下のtxtファイルを参照してください。 ttp://briefcase.yahoo.co.jp/bc/urd_apple/

    • ベストアンサー
    • Perl
  • Oracleのデータベースに接続できない。

    OS : WindowsXP SP2 Perl : ActivePerl 5.8.8 DBD : DBD-Oracle1.17 DB : Oracle9i PerlでOracleのDBサーバに接続ができません。 ソースは以下の通りです。 ================================================================================ #!perl -w use DBI; $dbh = DBI->connect('dbi:Oracle:test', 'scott/tiger') or die "An error occured : $@"; $dbh->disconnect; exit 0; ================================================================================ 上記コードを実行すると、connectの行でdieします。 ================================================================================ D:\test>perl ttoracle.pl DBI connect('test','scott/tiger',...) failed: ORA-12705: Cannot access NLS data files or invalid environment specified (DBD ERROR: OCISessionBegin) at ttoracle.pl line 5 An error occured : at ttoracle.pl line 5. ================================================================================ Oracleのサーバーはローカルにあり、ポートもデフォルトの設定です。 試しに、 $dbh = DBI->connect('dbi:Oracle:test@localhost:1521', 'scott/tiger') or die "An error occured : $@"; としましたが、結果は同じでした。 また、エラーの内容的に環境変数かと思いORACLE_HOMEを環境変数にセットしてみましたが、これもまた、結果は同じでした。 DBの接続については、sqlplusコマンドからであれば問題なく接続できます。 (コマンド:sqlplus scott/tiger@test) やはり、環境変数まわりの設定が問題でしょうか? よろしくお願いします。

  • Perl+DBD::Oracleのエラーがわからず困っています

    jboss と申します。お世話になります。 Solaris 上で動作させていた cgi プログラムを Linux へ移行しています。 下記の動作環境にて、ブラウザより該当プログラムを実行すると、 下記のようなエラーが発生します。 ■ 動作環境 OS RedHatLinux EL4.0 Apache 1.3.37 Perl 5.8.5 DBI 1.52 DBD::Oracle 1.18 DB Oracle 8i (8.1.7) ■ Apache のエラーログ install_driver(Oracle) failed: Can't load '/usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/auto/DBD/Oracle/Oracle .so' for module DBD::Oracle: libclntsh.so.8.0: cannot open shared object file: No such file or directory at /usr/lib/per l5/5.8.5/i386-linux-thread-multi/DynaLoader.pm line 230, <DATA> line 855. at (eval 7) line 3 Compilation failed in require at (eval 7) line 3, <DATA> line 855. Perhaps a required shared library or dll isn't installed where expected at /export/home/orasql.pl line 30 エラーログから解決方法を検索して、下記の方法は試したのですが解決しません。 ・LD_LIBRARY_PATH の追加 ・libclntsh.so.8.0 のパーミッション変更 ご存知であればご教授の程、お願い致します。

  • perl >> DBI >> DBD >> oracle8でエラー

    perlからDBI経由でoracleに接続したいのですが、 なぜか DBI->connectのところで失敗して下記のようなエラーが出ます。 `CONNECT ERROR ORA-1034: ORACLE not available oas userでtelnetで入り、直接perl scriptを起動すると問題なく動作するの ですが、なぜかOAS経由でブラウザーからCGIとしてcallすると 失敗するのです。 もう2日も悩んでます。 どなたか原因がわかりましたらご教授ください。 ---- 環境 --- perl 5.005_03 OAS 4.0.8.1 DBI 1.30 DBD-Oracle 1.12 OS solaris2.6 接続先DBは別のsolarisマシンに入ってる。 ----------------ソース----------------------------- #!/usr/local/bin/perl use DBI; $dsn = 'DBI:Oracle:orcl'; $user = 'testuser'; $password = 'testuserpass'; $dbh = DBI->connect($dsn, $user, $password) or die "接続できません"; my $sth = $dbh->prepare("select * from munec"); $sth->execute; while(@row = $sth->fetchrow_array) { print "@row\n"; } ---------------

  • CGI でDBI->connectするとエラー発生

    お世話になります。 CGIでORACLEに接続しようとしたところ、Internal Server Errorが発生し 困っております。 環境: ORACLE:10.2.0 DBI:1.48 DBD:DBD-Oracle1.16 PERL:5.8.0 APACHE:2.2.0 OS:RED HAT LINUX ES 3.0 プログラム上落ちる場所: DBI->connectのところ エラーの発生する傾向: APACHEでCGIを実行した時だけ コマンドライン上で実行するとエラーは発生しない また、CGIでもDBI->connectを外すとエラーは起きない APACHEのエラーログ: install_driver(Oracle) failed: Can't load '/usr/lib/perl5/site_perl/5.8.0/i386-linux-thread- multi/auto/DBD/Oracle/Oracle.so' for module DBD:: Oracle: libnnz10.so: cannot open shared object file: No such file or directory at /usr/lib/perl5/5.8.0/i386-linux-thread- multi/DynaLoader.pm line 229 今までに試した事: ・環境変数の定義確認(LD_LIBRARY_PATH等、cgiに記述) ・環境変数の取得確認(cgi実行時に画面に表示) ・/etc/ld.so.confに$ORACLE_HOME/libを追記&ldconfig実行 ・httpd.confに環境変数のセットを記述(SetEnv) ・libclntsh.so.10.0が$ORACLE_HOME/lib以下にある事を確認 ・DBDをSTATICオプションをつけてインストール ・/usr/libや/libにOracle.soをコピー ・環境変数LD_RUN_PATH(Oracle.soのパス)を追加 一体どこが悪くて動かないのか、途方にくれております。 原因として何が考えられるか、その場合どう対処すれば良いか、 ご教示いただければ幸いです。 他にも必要な情報や、試すべき事がありましたら遠慮なくどうぞ。 よろしくお願い致します。

    • ベストアンサー
    • CGI
  • perlでdb(mysql)に接続

    perlでdb(mysql)に接続し、取得したデータを 表示させるというようなことをしたいのですが、うまく いきません。 ファイル名test.cgi mysqlのバージョンは 5.0.45で 記述は以下です。 #!/usr/bin/perl use DBI; my $dbh = DBI->connect("DBI:mysql:database, "userid", "password"); my $sth = $dbh->prepare('SELECT * FROM tablename'); $sth->execute; print "Content-Type: text/plain\n\n"; print "\n"; while(my @row = $sth->fetchrow_array) { print "$row[0]:$row[1]\n"; } $sth->finish(); $dbh->disconnect(); exit; ブラウザで確認すると何も表示されず、ログとして 以下のエラーが確認できます。 DBD::mysql::st execute failed: Table 'database.tablename' doesn't exist at test.cgi line 8. DBD::mysql::st fetchrow_array failed: fetch() without execute() at test.cgi line 11. my $sth = $dbh->prepare('SELECT * FROM tablename'); で指定したテーブルは存在しておりますし、SQL文の記述も 問題ないと思われます。 また、ファイルのパーミッションは705(755でも同様の結果)です。 perl初心者のため、どこが問題なのか検討がつきません。 ご助言いただきたく存じます。 よろしくお願いいたします!

    • ベストアンサー
    • Perl
  • Perlでの文字コード変換

    Windowsのフォルダに入っているファイル名をFedora Coreに入ってるpostgresのtableに入れたいのですが(perlで実行)文字の変換の仕方がわからず以下のメッセージが出て止まってしまいます。 DBD::PgPP::st execute failed: ERROR: invalid byte sequence for encoding "EUC_JP": 0x96d8 良い方法があれば教えてください。 **************************************** $query0 = 'insert into aaatbl (filename) values("$aaa"); $sth = $dbh->prepare("$query0"); $sth->execute; $sth->finish; ($query0 が S-JISでaaatblはECU-JP)

    • ベストアンサー
    • Perl