带有子查询和额外列的插入语句

Insert statement with subquery and extra column

我想将插入语句与来自另一个 table 的 select 子查询一起使用。就我而言,我想添加从 PRESENTATION table 到 AVAILABILITY table 的一行。

AVAILABILITY table 结构:

availableID        (number, generated using sequence)
availableDay       (varchar)
availableStart     (varchar)
availableEnd       (varchar)
lecturerID(FK)     (varchar)
presentationID(FK) (number, generated using sequence)

PRESENTATION table 结构:

presentationID         (number, generated using sequence)
presentationDay        (varchar)
presentationStart      (varchar)
presentationEnd        (varchar)

我试着在 DAO 中构建查询,如下所示:

        String lecturerID = Abean.getLecturerID();
        String availableDay = Abean.getAvailableDay();
        String availableStart = Abean.getAvailableStart();
        String availableEnd = Abean.getAvailableEnd();
        Date availableDate = Abean.getAvailableDate();
        String presentationID = Abean.getPresentationID();

    try{  

            currentCon = JavaConnectionDB.getConnection();

            PreparedStatement ps=currentCon.prepareStatement("
            insert into availability (availableID,
                                      lecturerID,
                                      availableDay,
                                      availableStart,
                                      availableEnd,
                                      presentationid) 
           select(availabilityseq.nextval,
                  ?,
                  presentationDay,
                  presentationStart,
                  presentationEnd,
                  presentationid) 
                  from presentation where presentationid=?

            ");  
            ps.setString(1,Abean.getLecturerID());  
            ps.setString(2,Abean.getAvailableDay());  
            ps.setString(3,Abean.getAvailableStart()); 
            ps.setString(4,Abean.getAvailableEnd());  
            ps.setString(5,Abean.getPresentationID()); 
           // ps.setString(6,Abean.getAvailableID());
            ps.executeUpdate();  

            }
    catch(Exception e){
      System.out.println("add availability 2 failed: An Exception has occurred! " + e);
    }  

不出所料,return错误

错误:java.sql.SQLException: Invalid column index

那么,我该如何插入带有额外列的子查询?

更新:我的 DAO 代码

您需要将绑定变量值的设置与 SQL 文本中的绑定变量规范相匹配:

编辑 4 月 18 日: 从 select 子查询中删除括号

PreparedStatement ps=currentCon.prepareStatement("
            insert into availability (availableID,
                                      lecturerID,
                                      availableDay,
                                      availableStart,
                                      availableEnd,
                                      presentationid) 
           select availabilityseq.nextval,
                  ?,
                  presentationDay,
                  presentationStart,
                  presentationEnd,
                  presentationid
                  from presentation where presentationid=?
            ");  
            ps.setString(1,Abean.getLecturerID());  // match first "?"
            ps.setString(2,Abean.getPresentationID());    // match 2nd "?"