Oracle数据库是非常众所周知的开放数据库管理系统,在使用Oracle进行操作时,若想获取表中字段名及其类型,可用sql语句查询,本文给出的方法可以实现Oracle查询之查找列名的功能。
首先,用户可以执行以下sql语句来实现:
select COLUMN_NAME,DATA_TYPE
from USER_TAB_COLS
where table_name='表名'
第一行将查询结果设置为列名以及数据类型,第二行设置查询的表为指定的表,表名可以改为需要查询的表名称,通过上述的sql语句可以返回指定表的字段名及其类型。
此外,用户也可以使用以下sql语句来实现:
select COLUMN_NAME as 字段名,DATA_TYPE as 数据类型
from USER_TAB_COLS
where table_name='表名'
与上面的sql语句类似,将结果设置成指定的字段名或数据类型时,在查询列名的同时也可以给出查询结果返回的结果为何。
最后,用户可以执行以下sql语句来实现:
select *
from (select COLUMN_NAME,DATA_TYPE
from USER_TAB_COLS
where table_name='表名')
与上面的sql语句类似,这里使用“select *”来查询指定表的所有字段信息,其中包括表中各字段的列名及其类型。
通过以上三种方法,用户可以实现Oracle查询之查找列名的功能,获取表中相关字段的相关信息,从而更好地进行查询。
Oracle数据库是非常众所周知的开放数据库管理系统,在使用Oracle进行操作时,若想获取表中字段名及其类型,可用sql语句查询,本文给出的方法可以实现Oracle查询之查找列名的功能。第一行将查询结果设置为列名以及数据类型,第二行设置查询的表为指定的表,表名可以改为需要查询的表名称,通过上述的sql语句可以返回指定表的字段名及其类型。与上面的sql语句类似,将结果设置成指定的字段名或数据类型时,在查询列名的同时也可以给出查询结果返回的结果为何。where table_name='表名')
1.查询表名: 代码如下:select table_name,tablespace_name,temporary from user_tables [where table_name=表名] 其中:table_name:表名(varchar2(30)); tablespace_name:存储表名的表空间(varchar2(30)); temporary:是否为临时表(varchar2(1))。 eg: select table_name,tablespace_name,temporary from user_tables where table_name=’TEST_TEMP’; 结果: —
想用insert into将一个表的数据导入另一个表,但两个表的列并不一样,后一个表比前者少几个,相同部分的名称是一样的,所以想直接获得目标表的所有列名,然后再从源表中导出这些列的数据insert。要获得一个表的所有列名,Oracle有几个SYS下的视图可以做到:
all_tab_comments
user_tab_comments
all_col_comments
user_col_comments
all_tab_columns
user_tab_columns
all开头的是全部用户,user
1.查询当前数据库中所有表名及表的备注:
1) select * from user_tab_comments;----查询所有表
2)select * from user_tab_comments where Table_Name='表名';----查询某一个表的名称及备注
2.查询某一个表的所有列及列的备注:
select * f
今天在工程中遇到“ORA-01747: user.table.column, table.column 或列说明无效”的报错情况,查了一下是由于数据库列名起的不好引起的,名字用到了数据库的关键字。
select *
from v$reserved_words
where keyword
select COLUMN_NAME
from all_tab_columns
where table_name = '表名大写' and owner='\u7528\u6237\u540d\u5927\u5199'
ID可以忽略
您可能感兴趣的文章:Access数据库中“所有记录中均未找到搜索关
1.查询表名:
select table_name,tablespace_name,temporary from user_tables //在所有非管理员创建的表中查询
select table_name,tablespace_name,temporary from dba_ta
查询某个数据库中某个表的所有列:
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'db_name' AND TABLE_NAME = 'tb_name';
查询某个数据库中某个表的所有列名,并用逗号连接:
SELECT GROUP_CONCAT(COLUMN_NAME SEPARATOR ",") FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'd
import cx_Oracle
#建立conn连接
conn = cx_Oracle.connect('BI/123@123@10.110.11.11:1521/orcl')
#建立光标
curs = conn.cursor()
#获取返回的行数
numline=int(input("输入希望返回的行数:"))
#执行对应SQL
sql = f"select * from SY2_CJBZGX_CPT where rownum<='{numline}'"#当带有参数需在s.
本软件是一款 Oracle 客户端工具 - 专用于 Oracle 数据库操作:
多线程、多连接、智能/彩色SQL编辑器、中英文双语界面并能切换、支持 PL/SQL、批量SQL运行、高效的块操作、方便的表格操作,不需要安装 Oracle 客户端,能运行于所有的主流平台包括 Windows、Linux 、Unix 及 Mac OS,界面简洁、操作简便、功能实用且全面!
主要功能如下:
用表格显示 SELECT 语句的查询结果,可以直接对查询结果进行再操作,如 修改、插入行、删除行、提交(将表格中的数据改变写入相应的数据库表中)、多功能拷贝、导出为 INSERT 语句、单条记录操作、方便的查找及替换功能、数字统计、行列移动、列排序、选择模式切换等;能方便地查看、编辑大型的文本字段(如 CLOB、 LONG)
智能的SQL编辑器:自动弹出提示窗口,列出关键字、函数名、列名、对象名、对象类型、参数、包内的过程和函数,提高SQL编辑效率。例如:
(1)输入字串“se”,两秒钟后列出以“se”开头的所有关键字及函数;
(2)输入字串“abc”+“.”,如果“abc”是一表名/视图,或其别名,则列出表/视图的所有列名及数据类型;如果“abc”是一用户名,则列出该用户的所有对象;如果“abc”是一包名,则列出包内的过程和函数;
(3)输入字串“grant”+空格,列出所有权限和角色,再输入“on”+空格,列出所有对象,再输入“to”+空格,列出所有用户名;
(4)输入字串“drop”+空格,列出“drop”支持的所有对象类型,例如,选择“table”项再输入一空格,则又列出当前用户的所有表名;
(5)当提示窗口出现时,只需输入部分字串,窗口能自动查找全串,比如,输入子串“name”,显示“first_name”项,按Ctrl+PdDn键则向下查找“last_name”项,按Ctrl+PdUp键则向上查找“first_name”项
彩色的SQL编辑器,增强可读性:
(1)关键字、注释块、引号内字符串、操作符、特殊字符等,用不同的彩色字体加以区别;
(2)如果光标前面是一个括号,高亮度显示配对的括号
支持批量SQL语句的运行:用监控器监控每条语句的运行,在运行过程中可以中断/暂停/继续正在运行的语句,甚至可以更正出错误的语句
方便高效的块操作,以满足特殊需求:
(1)“Format SQL” 按钮能将语句块中杂乱语句以缩进的格式进行重新编排,即格式美化;
(2)“Explain Plan” 按钮能快速地显示语句的执行计划;
(3)“Export” 按钮能将 SELECT 语句块直接导出为 INSERT 语句,方便于数据移植、备份等;
(4)支持列块操作;
(5)加上/去掉注释标记、加上/去掉引号、增加/减少缩进、大小写转换等
运行语句 “desc [user.]objectName[@dbLink]” 或 Ctrl+鼠标点击字串“[user.]objectName[@dbLink]”,如果是一表名,则能清楚地显示表的列信息(包括列名称、数据类型及长度、默认值、非空)、索引、约束条件(主键、唯一键、检查键、子表、触发器、外键、甚至外键的外键)
运行语句 “schema [user.]objectName[@dbLink]”,如果是一表名或视图名,则显示表或视图的脚本/语句,即表或视图是如何创建的(包括索引及约束条件)
支持 PL/SQL 语句(包括 Procedure、 Function、Trigger、 Package),能够显示 DBMS_OUPTPUT.PUT_LINE 的输出;能够给出错误信息,甚至光标能够精确定位错误所在的行列位置,方便于调试
多线程、多连接:可以创建多个会话/连接,多个会话可以同时运行,在运行过程中可以掌控其运行状态、可以随时中断之,在运行过程中可以继续从事编辑等工作,不必等待运行完毕才能编辑
提供对常用数据字典(如 表、视图、索引、同义词、约束、过程、触发器等)的常用操作。例如,输入 “%NAME” 或 “NAME%” 或 “%NAME%”,能查找包含子串 “NAME” 的所有对象名,通过弹出菜单可以对每一个对象进行操作,如修改、删除、查看等
(1) 了解Oracle的工作环境和基本使用方法。
(2) 练习标准SQL的数据操作,查询命令及其查询优化。
(3) 学会使用高级SQL命令,排序、分组、自连接查询等。
(4) 学会使用SQL*PLUS命令显示报表,存储到文件等。
【实验内容】
一、 准备使用SQL*PLUS
1. 进入SQL*PLUS
2. 退出SQL*PLUS
3. 显示表结构命令DESCRIBE
SQL>DESCRIBE emp
使用DESCRIBE(缩写DESC)可以列出指定表的基本结构,包括各字段的字段名以及类型、长度、是否非空等信息。
4. 使用SQL*PLUS显示数据库中EMP表的内容
输入下面的查询语句:
SQL>SELECT * FROM emp;
按下回车键执行查询
5. 执行命令文件
START或@命令将指定文件调入SQL缓冲区中,并执行文件内容。
SQL>@ 文件名(文件后缀缺省为.SQL)或
SQL>START 文件名
文件中每条SQL语句顺序装入缓冲区并执行。
二、 数据库命令——有关表、视图等的操作
1. 创建表employee
例1 定义一个人事信息管理系统中存放职工基本信息的一张表。可输入如下命令:
SQL>CREATE TABLE employee
(empno number(6) PRIMARY KEY, /* 职工编号
name varchar2(10) NOT NULL, /* 姓名
deptno number(2) DEFAULT 10, /* 部门号
salary number(7,2) CHECK(salarycreate table emp2 as
select * from emp
where 1=2;
在命令的where子句中给出1=2,表示条件不可能成立,因而只能复制表结构,而不能复制任何数据到新表中去。另外,还可以复制一个表的部分列定义或部分列定义及其数据。
三、 Oracle数据库数据查询
1、单表查询
2、多表查询
四、 SQL*PLUS常用命令
表1 常用报表格式化名命令
命令 定义
Btitle 为报表的每一页设置底端标题
Column 设置列的标题和格式
Compute 让SQL*PLUS计算各种值
Remark 将某些字标记为注释
Set linesize 设置报表的行宽字符数
Set newpage 设置报表各页之间的行数
Spool 使SQL*PLUS将输出写入文件中
Start 使SQL*PLUS执行一个sql文件
Ttitle 设置报表每页的头标题
Break 让SQL*PLUS进行分组操作
例3 建立一个批命令文件对查询到的数据以报表的形式输出并将其保存到指定的文件中。
处理方法:利用SQL*PLUS语言工具(也可以使用其他文本编辑器)建立批命令的.SQL文件。在“SQL>”提示符下,使用EDIT命令在”E:\”中建立SCGB.SQL文件。
SCGB.SQL文件中的命令组如下:
SQL>EDIT E:\ SCGB.SQL
SET echo off
SET pagesize 30
SET linesize 75
TTITLE’2008年4月10号’CE’公司职员基本情况登记表’R’Page:’ FORMAT 99-
>SQL.PNO SKIP 1 CE’===========================’
BTITLE COL 60 ’制标单位’ TAB 3 ‘人事部’
COLUMN empno heading ‘职工|编号’
COLUMN ename format a10 heading ‘姓 名’
COLUMN job heading ‘工 种’
COLUMN sal format $99,990 heading 工 资’
COLUMN comm Like sal heading ‘奖 金’
COLUMN deptno format 9999 heading ‘部门|编号’
COLUMN hiredate heading ‘参加工作时间’
SPOOL e:\sjbb /*在E盘中建立格式报表输出文件,默认属性为LST BREAK on deptno skip 1
COMPUTE sum of sal comm on deptno
SELECT empno,ename,job,hiredate,sal,comm,deptno from emp
ORDER BY deptno,sal;
SPOOL off /*终止SPOOL功能,关闭其文件。注意,此命令不可省,否则将建立空文件。
五、 实验内容
1、以cs+学号为用户名创建用户,并授予用户创建数据对象的权限。
2、复制emp表,复制表名为emp_学号,然后将emp表中工资低于$2000
的职工插入到复制的表中。
3、对复制的emp表插入一行只包含有职工号,职工名,工资与部门号四个数据
项值的记录。
4、在复制的emp表中将雇员ALLEN提升为经理,工资增至$2500,
奖(佣 )金增加40%。
5、删除复制的emp表中工资低于500的记录行。
6、列出10号部门中既不是经理,也不是秘书的职工的所有信息。
7、查找出部门所在地是CHICAGO的部门的职工姓名、工资和工种。
8、统计各部门中各工种的人数、工资总和及奖金总和。
9、查找出工资比其所在部门平均工资高的职工姓名、工种与工资情况。
实验3 Oracle数据库开发环境下PL/SQL编程
【实验目的】
(1)掌握 PL/SQL 的基本使用方法。
(2)在SQL*PLUS环境下运行PL/SQL的简单程序。
(3)应用 PL/SQL 解决实际问题
【实验内容与步骤】
PL/SQL块中的可执行部分是由一系列语句组成的(包括对数据库进行操作的SQL语句,PL/SQL语言的各种流程控制语句等)。在块中对数据库查询,增、删、改等对数据的操作是由SQL命令完成的。在PL/SQL块中,可以使用SQL的数据查询命令,数据操纵命令和事务控制命令。可使用全部SQL函数。PL/SQL中的SQL语句,可使用SQL的比较操作等运算符。但不能使用数据定义语句。
在PL/SQL块中使用SELECT语句时注意几点:
(1)SELECT语句必须含有INTO子句。
(2)INTO子句后的变量个数和位置及数据类型必须和SELECT命令后的字段名表相同。
(3)INTO子句后可以是简单类型变量或组合类型变量。
(4)SELECT语句中的WHERE条件可以包含PL/SQL块中定义的变量及表达式,但变量名不要同数据库表列名相同。
(5)在未使用显式游标的情况下,使用SELECT语句必须保证只有一条记录返回,否则会产生异常情况。
[例3-1] 问题:编写一个过程,求和运算。
SET SERVEROUTPUT ON;
DECLARE
a number:=1;
BEGIN
a:=a+5;
DBMS_OUTPUT.PUT_LINE('和为:'||TO_CHAR(a));
【例3-2】:使用%TYPE声明变量,输出制定表中的相关信息。
DECLARE
my_name student.sname%TYPE;
BEGIN
SELECT sname INTO my_name FROM student
WHERE no=’01203001’;
DBMS_OUTPUT.PUT_LINE(my_name);
【例3-3】问题:编写一个过程,可以输入一个雇员名,如果该雇员的工资低于2000,就给该员工工资增加10%。
declare
v_sal emp.sal%type;
begin
select sal into v_sal from emp where ename=spName;
if v_sal :NEW.sal THEN
DBMS_OUTPUT.PUT_LINE('工资减少');
ELSIF :OLD.sal < :NEW.sal THEN
DBMS_OUTPUT.PUT_LINE('工资增加');
DBMS_OUTPUT.PUT_LINE('工资未作任何变动');
END IF;
DBMS_OUTPUT.PUT_LINE('更新前工资 :' || :OLD.sal);
DBMS_OUTPUT.PUT_LINE('更新后工资 :' || :NEW.sal);
--执行UPDATE查看效果
UPDATE emp SET sal = 3000 WHERE empno = '7788';
6、需要对在表上进行DML操作的用户进行安全检查,看是否具有合适的特权。
Create table foo(a number);
Create trigger biud_foo
Before insert or update or delete
On foo
Begin
If user not in (‘DONNY’) then
Raise_application_error(-20001, ‘You don’t have access to modify this table.’);
End if;
即使SYS,SYSTEM用户也不能修改foo表。
2、 利用PL/SQL编写程序实现下列触发器
1)、编写一个数据库触发器,当任何时候某个部门从dept表中删除时,该触发器将从emp表中删除该部门的所有雇员。(要求:emp表、dept表均为复制后的表)
2)、创建一个触发器,当客户下完订单后,自动统计该订单的所有图书的价格总额。
3)、创建一个触发器,禁止客户在非工作时间(早上8:00前,晚上17:00后)下订单。
五、实验心得
上述查询将返回指定列(`column_name`)中第一个出现数字 '1' 的位置。如果要查找其他数字,只需将 `'1'` 替换为您想要查找的数字即可。
如果您希望查找所有出现的数字位置,而不仅仅是第一个,可以使用 `INSTR` 函数的 `occurrence` 参数:
```sql
SELECT INSTR(column_name, '1', 1, LEVEL) AS position
FROM table_name
CONNECT BY INSTR(column_name, '1', 1, LEVEL) > 0;
上述查询将返回指定列(`column_name`)中所有出现数字 '1' 的位置。
请注意,`column_name` 是您要在其中搜索的列名,`table_name` 是包含该列的表名。确保将它们替换为您实际使用的列和表的名称。
希望对您有所帮助!如果您有任何其他问题,请随时提问。