当前位置: 首页 > news >正文

oracle常用sql

获取主键

1. 查询主键的两种常用方法

Oracle 的主键信息存储在以下两个视图中:

  • USER_CONSTRAINTS:存储当前用户下所有表的约束信息(如主键、外键等)。

  • USER_CONS_COLUMNS:存储约束对应的列信息。

方法 1:直接查询主键列

 

SELECT 
    cols.column_name
FROM 
    user_constraints cons
JOIN 
    user_cons_columns cols 
ON 
    cons.constraint_name = cols.constraint_name
WHERE 
    cons.table_name = 'AI_TOOLS'  -- 替换为你的表名
    AND cons.constraint_type = 'P';      -- 'P' 表示主键

 

 方法 2:分步查询

先查询主键约束名

SELECT 
    constraint_name 
FROM 
    user_constraints 
WHERE 
    table_name = 'YOUR_TABLE_NAME' 
    AND constraint_type = 'P';

 再根据约束名查询列名

SELECT 
    column_name 
FROM 
    user_cons_columns 
WHERE 
    constraint_name = 'YOUR_PK_CONSTRAINT_NAME';  -- 替换为第一步查到的约束名

 

2. 复合主键的情况

 如果主键由多列组成(复合主键),查询结果会返回多行,按列在键中的顺序排序

SELECT 
    cols.column_name,
    cols.position  -- 列在键中的位置(从1开始)
FROM 
    user_constraints cons
JOIN 
    user_cons_columns cols 
ON 
    cons.constraint_name = cols.constraint_name
WHERE 
    cons.table_name = 'YOUR_TABLE_NAME'
    AND cons.constraint_type = 'P'
ORDER BY 
    cols.position;

 

 3. 查看其他用户/所有主键(需要权限)

 使用 ALL_CONSTRAINTS 和 ALL_CONS_COLUMNS

SELECT 
    cols.column_name
FROM 
    all_constraints cons
JOIN 
    all_cons_columns cols 
ON 
    cons.constraint_name = cols.constraint_name
WHERE 
    cons.table_name = 'YOUR_TABLE_NAME'
    AND cons.owner = 'AI_TOOLS'  -- 表所属的用户
    AND cons.constraint_type = 'P';

 

4. 注意事项

  • 表名大小写:Oracle 默认以大写存储对象名,查询时建议使用大写表名(除非创建时用了引号强制小写)。

  • 权限问题:访问 DBA_ 或 ALL_ 视图需要相应权限。

 获取字段名称

 1. 查询表的基本字段信息

使用 USER_TAB_COLUMNS 视图(当前用户下的表字段信息): 

SELECT 
    column_name,      -- 列名
    data_type,        -- 数据类型(如VARCHAR2、NUMBER等)
    data_length,      -- 数据长度
    data_precision,   -- 数字类型的精度
    data_scale,       -- 数字类型的小数位数
    nullable          -- 是否允许NULL('Y'允许,'N'不允许)
FROM 
    user_tab_columns 
WHERE 
    table_name = 'AI_TOOLS';  -- 替换为你的表名(需大写)

 

 

2. 查询其他用户或所有表的字段信息         

 ALL_TAB_COLUMNS:查询你有权限访问的所有表的字段信息。

SELECT 
    column_name, 
    data_type, 
    data_length 
FROM 
    all_tab_columns 
WHERE 
    table_name = 'YOUR_TABLE_NAME' 
    AND owner = 'TABLE_OWNER';  -- 表所属的用户名(需大写)

 DBA_TAB_COLUMNS(需 DBA 权限):

 

SELECT 
    column_name, 
    data_type 
FROM 
    dba_tab_columns 
WHERE 
    table_name = 'YOUR_TABLE_NAME';

 3. 查询字段的注释

 使用 USER_COL_COMMENTS 视图(当前用户下的字段注释):

SELECT 
    column_name, 
    comments  -- 字段注释
FROM 
    user_col_comments 
WHERE 
    table_name = 'YOUR_TABLE_NAME';

 4. 生成建表语句(包含字段定义)

 使用 Oracle 提供的 DBMS_METADATA 包生成完整的表定义(包括字段、主键、约束等):

 

SELECT 
    dbms_metadata.get_ddl('TABLE', 'YOUR_TABLE_NAME') 
FROM 
    dual;

 5. 快速查看表结构(类似DESCRIBE命令)

 在 SQL*Plus 或 SQLcl 中可以直接使用 DESC 命令:

DESC YOUR_TABLE_NAME;

 6. 导出字段信息到文件

 在 SQL*Plus 中可以使用 SPOOL 命令导出结果到文件:

 SPOOL /path/to/output.txt
SELECT column_name, data_type, data_length FROM user_tab_columns WHERE table_name = 'YOUR_TABLE_NAME';
SPOOL OFF

 

注意事项

  1. 表名大小写:Oracle 默认以大写存储对象名,查询时需用大写表名(除非建表时用了引号强制小写)。

  2. 权限问题

    • 访问 ALL_TAB_COLUMNS 需要访问其他用户表的权限。

    • 访问 DBA_TAB_COLUMNS 需要 DBA 权限。

  3. 扩展需求:若需要字段的默认值、虚拟列等高级信息,可查询 DATA_DEFAULT 和 VIRTUAL_COLUMN 列。

相关文章:

  • 2025年渗透测试面试题总结-某 欧科云链-安全开发(题目+回答)
  • 使用 Sales_data 类实现交易合并(三十)
  • Clion刷题攻略-配置Cmake
  • TypeError: __init__() got an unexpected keyword argument ‘device_type‘
  • 模型部署与调用
  • OrbStack 作为 Mac 用户的 Docker 替代方案
  • 数据结构每日一题day9(顺序表)★★★★★
  • Thrust库中,host_vector和device_vector数据之间如何高效传输,有异步传输方式吗?
  • Linux 企业项目服务器组建(附脚本)
  • C++学习笔记(三十二)——priority_queue
  • Java基础 4.1
  • OpenLayers:海量图形渲染之矢量切片
  • 07-01-自考数据结构(20331)- 排序-内部排序知识点
  • 【14】Selenium的基本使用
  • 一道积分_4
  • DJI上云API使用与配置
  • spring打包,打包错误
  • 供应链管理-经济指数:GDP、GNP、NNP、NDP、PPI、CPI、DPI...
  • WordPress汉主题
  • 二、基本应用工具
  • 制造四十余年血腥冲突后,库尔德工人党为何自行解散?
  • 上海团队在医学顶刊连发两文,率先提出“证据污染”循证概念
  • 乌方:泽连斯基只接受与普京会谈,拒见其他俄代表
  • 上海国际电影节特设“今日亚洲”单元
  • 马上评丨未成年人“擦边”短视频岂能成流量密码
  • 打击网络谣言、共建清朗家园,中国互联网联合辟谣平台2025年4月辟谣榜