Oracleで ORA-01745: ホスト/バインド変数名が無効です。
たまにやるので、メモ。
ORA-01745: ホスト/バインド変数名が無効です。
なんて言われて、INSERTが失敗する。
何のことはない、VALUES句の後で、カンマを入れ忘れてた。
こんな感じ。
VALUES (?,?,? ?)
正しくは、こう。
VALUES (?,?,?,?)
実際は、バインド変数の数はもっと沢山あって、改行とか入っているから
間違えに気づくのがちょっと遅かった。
たまにやるので、メモ。
ORA-01745: ホスト/バインド変数名が無効です。
なんて言われて、INSERTが失敗する。
何のことはない、VALUES句の後で、カンマを入れ忘れてた。
こんな感じ。
VALUES (?,?,? ?)
正しくは、こう。
VALUES (?,?,?,?)
実際は、バインド変数の数はもっと沢山あって、改行とか入っているから
間違えに気づくのがちょっと遅かった。
Spring Framework の JdbcTemplate を使ってて、こんなんでました。
java.sql.SQLException: 列索引が無効です。
[commons-dbutils] エラー:列索引が無効です。 – メモ!メモ! – Yahoo!ブログ
によると、
PreparedStatementのプレースホルダの数と、設定しているパラメータの数が合っていない。
らしい。
が、数は有っている。
散々悩んだ挙句、ResultSetのgetXX の引数が、途中で間違ってた。
こんな感じ。
bean.setValue1(rs.getString(1)); bean.setValue2(rs.getString(2)); bean.setValue8(rs.getString(8)); bean.setValue4(rs.getString(4)); bean.setValue5(rs.getString(5)); bean.setValue6(rs.getString(6));
実際は、列の数が200以上ある様なケースだったので、なかなか判らなかったのだ。
自戒の意味を込めて、書いておこう。
一連のRDBMSインスタンス間のデータ移動関係シリーズ
今回はOracle版メモ。
exp "db_username/db_password@from_server file=dump.dmp tables=(table_a, table_b)"
imp "db_username/db_password@distination file=dump.dmp tables=(table_a, table_b)"
rman target sys/pass@hoge
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘/path_to_backup/ctl_%F’
set dbid = 682122420;
set CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘/path_to_backup/ctl_%F’
restore controlfile from autobackup;
すぐに忘れるのでメモ。
Oracle 9iで実行
ALTER TABLESPACE USERS offline;
ここで表領域のデータファイルをコピーまたは移動する
mv /PATH_TO_CURRENT/USERS01.DBF /PATH_TO_MOVE/USERS01.DBF
ALTER TABLESPACE USERS RENAME DATAFILE ‘/PATH_TO_CURRENT/USERS01.DBF’ to ‘/PATH_TO_MOVE/USERS01.DBF’;
ALTER TABLESPACE USERS online;