当前位置: 首页 > 知识库问答 >
问题:

如何使用jdbc Oracle插入和选择全局临时表?[副本]

周涵畅
2023-03-14
 String query = "INSERT INTO St (id) values ('Admin'); "  + 
            "select * from Student where id in (select id from St);";

如果尝试执行上述查询,则会出现错误

Exception in thread "main" java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended

at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:494)
at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:446)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1054)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:623)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:252)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:612)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:226)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:59)
at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:910)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1119)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3780)
at oracle.jdbc.driver.T4CPreparedStatement.executeInternal(T4CPreparedStatement.java:1343)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3822)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1165)
at com.prototype.service.DBConnection.main(DBConnection.java:167)

原因:错误:933,位置:36,Sql=插入St(id)值('ADMIN');select*from Student where id in(select id from St);,OriginalSql=INSERT INTO St(id)values(“admin”);select*from Student where id in(select id from St);,错误消息=ORA-00933:SQL命令未正确结束

共有1个答案

诸葛阳成
2023-03-14

您可以使用insert select语句,这样就可以避免多个statemenst查询

String query = "INSERT INTO St (id) 
            select your_col_for_id  from Student where id in (select id from St);";

并且必须确保在into子句和select子句中有相应的列号和列类型

 类似资料:
  • 问题内容: 如何在PostgreSQL中使用select into创建临时表。例如在SQL中 问题答案: 您可以尝试使用“将 表另存为” 命令,如下所示: 从文档中: 该命令在功能上类似于SELECT INTO ,但是它是首选的,因为它不太可能与SELECT INTO语法的其他用法混淆。此外,CREATE TABLE AS提供了SELECT INTO提供的功能的超集。 CREATE TABLE A

  • 我们正在尝试将select查询中的记录插入临时表,临时表中缺少一些记录。select语句有多个连接和联合,所有这些都有点复杂。简单地说,该脚本包含两部分:第一部分插入临时表,第二部分选择查询,包含多个联接、内联子查询、联合和按类和条件分组 例如。如果我们单独执行select语句,它会返回一些计数,例如= 此外,我们还有其他一些观察结果。它只发生在第二次执行中,而不是第一次运行。希望可能存在一些缓存

  • 问题内容: 这似乎很简单,但我坚持使用简单的insert语句。请参见以下内容: 在临时表行中,实际列表是从其他位置动态拉出的(这是出于演示目的)。我收到以下错误消息: 错误代码:1054。“字段列表”中的未知列“ insert_table.resource_id” 现在,我可以在整个temp表上运行一次select,它返回正常值,只是在update语句中失败。我正在MySQL工作台上运行它。完全不

  • 问题内容: 我一直在尝试找到一种使用Golang尤其是库gorm插入和检索几何类型的方法。我还尝试使用库orb,它为几何定义了不同的类型,并提供了不同格式之间的编码/解码。 Orb 已经为每种类型实现了和方法。这使得go’s 和函数可以使用除基本类型以外的其他类型。但是,Orb期望使用以众所周知的二进制(WKB)格式表示的几何。 orb文档显示,要实现此目的,您只需将字段包装在PostGIS函数中

  • 我创建了一个Lambda函数,它从DynamoDB检索一些数据,并输出一些JSON。我要做的是在中运行这个函数lambda@edge并生成一个我可以使用Cloudfront缓存的响应。 我面临的问题是,使用全局表和lambda@edge显然,这在许多地区都存在。 这使我无法从lambda环境中使用AWS_REGION。例如,如果一个请求在us-west-1中运行,环境变量将反映这一点,并且它将尝试

  • 在创建了临时表并声明了数据类型之后; 然后如何插入数据库中物理表中已保存的相关数据?