Oracle Mysql Postgrsql 查询表的所有字段(字段名称、字段类型、字段长度)、主键

本文详细介绍了如何在Oracle、Mysql和Postgresql数据库中查询表的所有字段,包括字段名称、字段类型和字段长度,同时提供了查询表主键的步骤,适合数据库管理员和开发者参考。
摘要由CSDN通过智能技术生成

一、查询表字段:

1.Oracle数据库脚本:

-- 查询表字段 oracle
select UPPER(B.COLUMN_NAME) as FIELD_NAME,
       UPPER(B.DATA_TYPE) as FIELD_DATA_TYPE,
       case
         when B.DATA_SCALE is null then
          0
         else
          B.DATA_SCALE
       end as FIELD_DECIMAL,
       (case
         when B.DATA_PRECISION is null then
          B.CHAR_LENGTH
         else
          B.DATA_PRECISION
       end) as FIELD_LENGTH,
       case
         when B.NULLABLE = 'N' then
          '1'
         else
          '0'
       end as IS_NULL,
       C.COMMENTS as FIELD_COMMENT
  from (select A.TABLE_NAME,
               A.COLUMN_NAME,
               A.DATA_TYPE,
               A.DATA_SCALE,
               A.DATA_PRECISION,
               A.CHAR_LENGTH,
               A.NULLABLE
          from USER_TAB_COLUMNS A
         where A.TABLE_NAME = UPPER('表名')) B
  left join USER_COL_COMMENTS C
    on B.TABLE_NAME = C.TABLE
以下是一段Java代码,用于同步Oracle数据到MySQLMySQL中有字段保存Oracle主键,凭借主键增删改数据: ```java import java.sql.*; public class OracleToMysqlSync { public static void main(String[] args) { Connection oracleConn = null; Connection mysqlConn = null; PreparedStatement oracleStmt = null; PreparedStatement mysqlInsertStmt = null; PreparedStatement mysqlUpdateStmt = null; PreparedStatement mysqlDeleteStmt = null; ResultSet oracleRs = null; try { // 连接Oracle数据库 oracleConn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "username", "password"); // 连接MySQL数据库 mysqlConn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname", "username", "password"); // 查询Oracle中的数据 oracleStmt = oracleConn.prepareStatement("SELECT * FROM oracle_table"); oracleRs = oracleStmt.executeQuery(); // 遍历查询结果 while (oracleRs.next()) { // 获取主键值 int id = oracleRs.getInt("id"); // 查询MySQL中是否存在该主键值的记录 PreparedStatement mysqlQueryStmt = mysqlConn.prepareStatement("SELECT * FROM mysql_table WHERE id = ?"); mysqlQueryStmt.setInt(1, id); ResultSet mysqlRs = mysqlQueryStmt.executeQuery(); // 如果MySQL中不存在该主键值的记录,则插入一条新记录 if (!mysqlRs.next()) { if (mysqlInsertStmt == null) { mysqlInsertStmt = mysqlConn.prepareStatement("INSERT INTO mysql_table (id, column1, column2) VALUES (?, ?, ?)"); } mysqlInsertStmt.setInt(1, id); mysqlInsertStmt.setString(2, oracleRs.getString("column1")); mysqlInsertStmt.setString(3, oracleRs.getString("column2")); mysqlInsertStmt.executeUpdate(); } // 如果MySQL中存在该主键值的记录,则更新该记录 else { if (mysqlUpdateStmt == null) { mysqlUpdateStmt = mysqlConn.prepareStatement("UPDATE mysql_table SET column1 = ?, column2 = ? WHERE id = ?"); } mysqlUpdateStmt.setString(1, oracleRs.getString("column1")); mysqlUpdateStmt.setString(2, oracleRs.getString("column2")); mysqlUpdateStmt.setInt(3, id); mysqlUpdateStmt.executeUpdate(); } } // 删除MySQL中不存在于Oracle中的记录 if (mysqlDeleteStmt == null) { mysqlDeleteStmt = mysqlConn.prepareStatement("DELETE FROM mysql_table WHERE id = ?"); } PreparedStatement mysqlQueryAllStmt = mysqlConn.prepareStatement("SELECT id FROM mysql_table"); ResultSet mysqlAllRs = mysqlQueryAllStmt.executeQuery(); while (mysqlAllRs.next()) { int id = mysqlAllRs.getInt("id"); PreparedStatement oracleQueryStmt = oracleConn.prepareStatement("SELECT * FROM oracle_table WHERE id = ?"); oracleQueryStmt.setInt(1, id); ResultSet oracleRs2 = oracleQueryStmt.executeQuery(); if (!oracleRs2.next()) { mysqlDeleteStmt.setInt(1, id); mysqlDeleteStmt.executeUpdate(); } } } catch (SQLException e) { e.printStackTrace(); } finally { try { if (oracleRs != null) { oracleRs.close(); } if (oracleStmt != null) { oracleStmt.close(); } if (mysqlInsertStmt != null) { mysqlInsertStmt.close(); } if (mysqlUpdateStmt != null) { mysqlUpdateStmt.close(); } if (mysqlDeleteStmt != null) { mysqlDeleteStmt.close(); } if (oracleConn != null) { oracleConn.close(); } if (mysqlConn != null) { mysqlConn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值