インデックス:: 8にINまたはOUTパラメータがありません

    String s1 = "create table testing " +
          "(id number NOT NULL PRIMARY KEY, " +
          "url varchar(1000) NOT NULL, " +
          "urlHash varchar(1000) NOT NULL, " +
          "contentHash varchar(1000), " +
          "modDate date, " +
          "contentLocation varchar(1000), " +
          "status integer, " +
          "lastCrawlDate date) ";
String s2 = "create sequence " +sequenceName+ " start with 1 increment by 1 nomaxvalue";

stmt=conn.createStatement();
stmt.executeUpdate(s1);
stmt.executeUpdate(s2);

What's wrong with this below merge statement I always get error as

Missing IN or OUT parameter at index:: 8

私は文字列の日付時刻を日付データ型に変換しようとしています

ps =  conn.prepareStatement(
"MERGE INTO testing " +
"USING (  SELECT ? AS url, " +     //We will maybe add this record
"                ? AS urlHash, " +
"                ? AS contentHash, "+
"        TO_DATE(?, 'YYYY-MM-DD'T'HH24:MI:SS'Z'') AS modDate, "+
"        ? AS contentLocation, "+
"        ? AS status, "+
"      TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AS lastCrawlDate "+
"           FROM dual ) maybe "+
"   ON (maybe.urlHash = testing.urlHash) "+
"       WHEN MATCHED THEN "+
// We only need update the fields that might have changed
"       UPDATE SET testing.contentHash     = maybe.contentHash, "+
"                  testing.modDate         = maybe.modDate, "+
"                  testing.contentLocation = maybe.contentLocation, "+
"                  testing.status          = maybe.status, "+
"                  testing.lastCrawlDate   = maybe.lastCrawlDate "+
// But only if the new record is more recent
"        WHERE TO_CHAR(testing.modDate, 'YYYY-MM-DD'T'HH24:MI:SS'Z'') < TO_CHAR(maybe.modDate, ''YYYY-MM-DD'T'HH24:MI:SS'Z''') "+
"       WHEN NOT MATCHED THEN "+
// Insert new URL record
"   INSERT VALUES (test_seq.nextval, maybe.url, maybe.urlHash, maybe.contentHash, maybe.modDate, maybe.contentLocation, maybe.status, maybe.lastCrawlDate)");


    ps.setString (1, "http://www.computergeeks.com");
    ps.setString (2, "ahsasoiowiewie");
    ps.setString (3, "sgasjwhwueybdbfndf");
    ps.setString (4, "2011-07-28T23:54:14Z");
    ps.setString (5, "c://");
    ps.setLong (6, 0);
    ps.setString (7, "2010-09-24 23:34:14"); 
    ps.executeUpdate();
    ps.close();
0
私は人々がストアドプロシージャと関数を利用していない理由を理解することはできません。そのような愚かなコードを使わなくてはなりません!
追加された 著者 JonH,

2 答え

あなたの最初の TO_DATE 呼び出しの日付フォーマットはうまくいきません - 一重引用符で囲まれた文字列の中で一重引用符を使用しようとしているので、正しく囲まれません。おそらく、これはパーサに適合しているので、あまり意味のないエラーメッセージになります。

Oracleの日付形式では、リテラル・ビットを単一引用符ではなく二重引用符で囲む必要があります。

select TO_DATE('2011-07-28T23:54:14Z', 'YYYY-MM-DD"T"HH24:MI:SS"Z"') from dual;

SQL文に 'YYYY-MM-DD "T" HH24:MI:SS "Z" の形式を埋め込む必要があります。二重引用符を正しくエスケープして、Java文字列を終了しないようにしてください。

2
追加された

これはあなたの問題に関係しないかもしれませんが、同じエラーが発生していました。私はSQLの始めに2行のコメント行がありました。私はそれらを底に動かし、エラーは消え去った。

1
追加された