当前位置:文档之家› oracle数据库表的操作总结

oracle数据库表的操作总结

drop table tablename;
insert into tablename values();
添加列的语法是:
alter table table_name add (w number(4),y number(4));
但是你是无法控制新增的列在1,2,3,4,5前面。只能采用变通的方法;

1 如上先把列添加上。
2 然后
create table table_name1 select (A,B,C...,W,Y,1,2,3,4,5) from table_name;
3 drop table table_name;
4 alter table table_name1 rename table_name;

--新增客户信用评级流程信息表CO_com_PJ
create table CO_com_PJ
(
serno VARCHAR2(30) not null,
cus_id VARCHAR2(30),
cus_name VARCHAR2(60),
out_crd_grade VARCHAR2(3),
Apply_crd_grade VARCHAR2(3)
);
-- Create/Recreate primary, unique and foreign key constraints
alter table CO_com_PJ
add constraint CO_com_PJ primary key (serno)
using index
tablespace USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 3M
minextents 1
maxextents unlimited
);
-- Add comments to the columns
comment on column CO_com_PJ.serno
is '流水号';
comment on column CO_com_PJ.cus_id
is '客户编号';
comment on column CO_com_PJ.cus_name
is '客户名称';
comment on column CO_com_PJ.out_crd_grade
is '当前客户评级';
comment on column CO_com_PJ.Apply_crd_grade
is '新客户评级申请';

alter table cus_atrb modify cus_id varchar2(20);

alter table student drop constraint SYS_C002715;
从一张表查出数据并结合自己的数据插入到新表中
如:

我想在这张表中 MatchTemp 表中有 UserID,UserName,UserDept,UserSex,UserIP,UserSpeed 字段

现在需从人事数据表HRuser中按UserID查出UserName,UserDept,UserSex 并结合自己通过界面得到的UserIP,UserSpeed 的值插入到MatchTemp 表中

我们可以这样写

insert into MatchTemp(UserID,UserName,UserDept,UserSex,UserIP,UserSpeed) select UserID,UserName,UserDept,UserSex ,'192.168.1.1',56 from HRuser where UserID='1000'

其中'192.168.1.1' 和56这两个值对应的就是我从程序中得到的并且想插入到MatchTemp 表中UserIP,UserSpeed字段的值

开始不知怎么写,查了点资料,整理一下。以备日后查询s

记录一下MYSQL把两表查询结果插入新表
angel 发表于 2010-04-22, 3:26 AM. 发表在: 技术相关

表A
+-------------------+
|id |user |info |
|1 |u1 |991 |
|3 |u3 |113 |
+-------------------+
表B
+-------------------+
|id |user |pw |pw2 |
|1 |u1 |p1 |p12 |
|2 |u2 |p2 |p22 |
|3 |u3 |p3 |p32 |
+-------------------+

能不能通过语句创建一个新表变成以下结果.剔除在表B里有.但是表A里没有的ID.并合并同ID的数据
+-------------------------+
|id |user |pw1 |pw2 |info |
|1 |u1 |p1 |p12 |991 |
|3 |u3 |p3 |p33 |113 |
+-------------------------+

view sourceprint?
1 create table jieguo2 SELECT t1.id, https://www.doczj.com/doc/b15391059.html,er,t1.pwd,t1.pwd2,https://www.doczj.com/doc/b15391059.html,er2,https://www.doczj.com/doc/b15391059.html, FROM t1 INNER JOIN t2 ON t1.id = t2.id
在Oracle8i中,可以创建

以下两种临时表:
1。会话特有的临时表
CREATE GLOBAL TEMPORARY ( )
ON COMMIT PRESERVE ROWS;

2。事务特有的临时表
CREATE GLOBAL TEMPORARY ( )
ON COMMIT DELETE ROWS;
CREATE GLOBAL TEMPORARY TABLE MyTempTable
所建的临时表虽然是存在的,但是你试一下insert 一条记录然后用别的连接登上去select,记录是空的,明白了吧,我把下面两句话再贴一下:
--ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截断表(删除全部行)
--ON COMMIT PRESERVE ROWS 说明临时表是会话指定,当中断会话时ORACLE将截断表。
冲突的问题更本不用考虑.


临时表只是保存当前会话(session)用到的数据,数据只在事务或会话期间存在。

通过CREATE GLOBAL TEMPORARY TABLE命令创建一个临时表,对于事务类型的临时表,
数据只是在事务期间存在,对于会话类型的临时表,数据在会话期间存在。

会话的数据对于当前会话私有。每个会话只能看到并修改自己的数据。DML锁不会加到
临时表的数据上。下面的语句控制行的存在性。

● ON COMMIT DELETE ROWS 表名行只是在事务期间可见
● ON COMMIT PRESERVE ROWS 表名行在整个会话期间可见

可以对临时表创建索引,视图,出发器,可以用export和import工具导入导出表的
定义,但是不能导出数据。表的定义对所有的会话可见。

例如:
CREATE GLOBAL TEMPORARY TABLE TEMP_TAB1(
table_name VARCHAR2(20),
primary_key VARCHAR2(100),
field VARCHAR2(1000))
ON COMMIT PRESERVE ROWS;

CREATE GLOBAL TEMPORARY TABLE TEMP_TAB2(
table_name VARCHAR2(20),
primary_key VARCHAR2(100),
field VARCHAR2(1000))
ON COMMIT DELETE ROWS;
Thomas Kyte有句名言:用尽可能简单的方法解决问题,要尽量使用Oracle提供的内置功能,没事不要自己发明创造.
解决方法是使用profile,假设以用户test为例:
1.alter system set resource_limit=true;--修改系统设置
2.create profile one_session limit sessions_per_user 1;--创建名为one_session的配置文件并设定限制参数
3.alter user test profile one_session;--为用户指派配置文件
只要三步就OK了,何乐而不为呢!

zt
1简介
ORACLE数据库除了可以保存永久表外,还可以建立临时表temporary tables。这些临时表用来保存一个会话SESSION的数据,或者保存在一个事务中需要的数据。当会话退出或者用户提交commit和回滚rollback事务的时候,临时表的数据自动清空,但是临时表的结构以及元数据还存储在用户的数据字典中。
In addition to permanent tables, Orac

le can create temporary tables to hold session-private data that exists only for the duration of a transaction or session.
Temporary tables are supported by Oracle9i and Oracle8i.
2详细介绍
Oracle临时表分为 会话级临时表 和 事务级临时表。
会话级临时表是指临时表中的数据只在会话生命周期之中存在,当用户退出会话结束的时候,Oracle自动清除临时表中数据。
事务级临时表是指临时表中的数据只在事务生命周期中存在。当一个事务结束(commit or rollback),Oracle自动清除临时表中数据。
临时表中的数据只对当前Session有效,每个Session都有自己的临时数据,并且不能访问其它Session的临时表中的数据。因此,临时表不需要DML锁。
The CREATE GLOBAL TEMPORARY TABLE statement creates a temporary table that can be transaction-specific or session-specific. For transaction-specific temporary tables, data exists for the duration of the transaction. For session-specific temporary tables, data exists for the duration of the session. Data in a temporary table is private to the session. Each session can only see and modify its own data. DML locks are not acquired on the data of the temporary tables. The LOCK statement has no effect on a temporary table, because each session has its own private data.
当一个会话结束(用户正常退出 用户不正常退出 ORACLE实例崩溃)或者一个事务结束的时候,Oracle对这个会话的表执行 TRUNCATE 语句清空临时表数据.但不会清空其它会话临时表中的数据.
A TRUNCATE statement issued on a session-specific temporary table truncates data in its own session. It does not truncate the data of other sessions that are using the same table.
DML statements on temporary tables do not generate redo logs for the data changes. However, undo logs for the data and redo logs for the undo logs are generated. Data from the temporary table is automatically dropped in the case of session termination, either when the user logs off or when the session terminates abnormally such as during a session or instance failure.
你可以索引临时表和在临时表基础上建立视图.同样,建立在临时表上的索引也是临时的,也是只对当前会话或者事务有效. 临时表可以拥有触发器.
You can create indexes for temporary tables using the CREATE INDEX statement. Indexes created on temporary tables are also temporary, and the data in

the index has the same session or transaction scope as the data in the temporary table.
You can create views that access both temporary and permanent tables. You can also create triggers on temporary tables.
3建立临时表
临时表的定义对所有会话SESSION都是可见的,但是表中的数据只对当前的会话或者事务有效.
建立方法:
1) ON COMMIT DELETE ROWS 定义了建立事务级临时表的方法.
CREATE GLOBAL TEMPORARY TABLE admin_work_area
(startdate DATE,
enddate DATE,
class CHAR(20))
ON COMMIT DELETE ROWS;
EXAMPLE:
SQL> CREATE GLOBAL TEMPORARY TABLE admin_work_area
2 (startdate DATE,
3 enddate DATE,
4 class CHAR(20))
5 ON COMMIT DELETE ROWS;
SQL> create table permernate( a number);
SQL> insert into admin_work_area values(sysdate,sysdate, 'temperary table ');
SQL> insert into permernate values(1);
SQL> commit;
SQL> select * from admin_work_area;
SQL> select * from permernate;
A
1
2)ON COMMIT PRESERVE ROWS 定义了创建会话级临时表的方法.
CREATE GLOBAL TEMPORARY TABLE admin_work_area
(startdate DATE,
enddate DATE,
class CHAR(20))
ON COMMIT PRESERVE ROWS;
EXAMPLE:

会话1:
SQL> drop table admin_work_area;
SQL> CREATE GLOBAL TEMPORARY TABLE admin_work_area
2 (startdate DATE,
3 enddate DATE,
4 class CHAR(20))
5 ON COMMIT PRESERVE ROWS;
SQL> insert into permernate values(2);
SQL> insert into admin_work_area values(sysdate,sysdate, 'session temperary ');
SQL> commit;
SQL> select * from permernate;

A
----------
1
2

SQL> select * from admin_work_area;

STARTDATE ENDDATE CLASS
---------- ---------- --------------------
17-1ÔÂ -03 17-1ÔÂ -03 session temperary

会话2:

SQL> select * from permernate;

A
----------
1
2

SQL> select * from admin_work_area;

未选择行.

会话2看不见会话1中临时表的数据.


4 ORACLE临时表和SQLSERVER临时表异同

SQL SERVER临时表
也可以创建临时表。临时表与永久表相似,但临时表存储在 tempdb 中,当不再使用时会自动删除。
有本地和全局两种类型的临时表,二者在名称、可见性和可用性上均不相同。本地临

时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户连接是可见的;当用户从 Microsoft® SQL Server™ 2000 实例断开连接时被删除。全局临时表的名称以数学符号 (##) 打头,创建后对任何用户都是可见的,当所有引用该表的用户从 SQL Server 断开连接时被删除。
例如,如果创建名为 employees 的表,则任何人只要在数据库中有使用该表的安全权限就可以使用该表,除非它已删除。如果创建名为 #employees 的本地临时表,只有您能对该表执行操作且在断开连接时该表删除。如果创建名为 ##employees 的全局临时表,数据表中的任何用户均可对该表执行操作。如果该表在您创建后没有其他用户使用,则当您断开连接时该表删除。如果该表在您创建后有其他用户使用,则 SQL Server在所有用户断开连接后删除该表
不同:
1. SQL SERVER临时表是一种”内存表”,表是存储在内存中的.ORACLE临时表除非执行DROP TABLE,否则表定义会保留在数据字典中.
2. SQL SERVER临时表不存在类似ORACLE临时表 事务级别 上的功能.
3 SQL SERVER本地临时表(#) 与 ORACLE的会话级别临时表类似,但是在会话退出的时候,ORACLE不会删除表.
4 SQL SERVER的全局临时表(##) 是指多个连接共享同一片内存.当没有指针引用该内存区域时,SQL SERVER自动释放全局临时表.
5 由于ORACLE不是一种 内存中的数据库. 所以如果ORACLE类似SQL SERVER 频繁的对临时表进行建立和删除,必定会影响性能.所以ORACLE会保留临时表的定义直到用户DROP TABLE.
6 在ORACLE中,如果需要多个用户共享一个表(类似SQL SERVER的全局临时表##).则可以利用永久表,并且在表中添加一些可以唯一标识用户的列.利用触发器和视图.当用户退出的时候,根据该登陆用户的唯一信息删除相应的表中的数据. 这种方法给ORACLE带来了一定量的负载.

模糊查询
房地产开发
是否提示
数据更新

delete 表名 where 1=1 ---保留这个表的结构,但是删除所有数据
更新表 update test set endda=a.endda-1
Oracle增加删除主键 2010-09-26 11:13:30| 分类: 数据库 | 标签:table constraint studentid int alter |字号大中小 订阅 .

1、创建表的同时创建主键约束
(1)无命名
create table student (
studentid int primary key not null,
studentname varchar(8),
age int);
(2)有命名
create table students (
studentid int ,
studentname varchar(8),
age int,
constraint yy primary key(studentid));


2、删除表中已有的主键约束
(1)无命名
可用 SELECT * from user_cons_columns;
查找表中主键名称得student表中的主键名为SYS_C002715
alter table student drop constraint SYS_C002715;
(2)有命名
alter table stude

nts drop constraint yy;


3、向表中添加主键约束
alter table student add constraint pk_student primary key(studentid);

摘自:https://www.doczj.com/doc/b15391059.html,/blog/748007

删除数据delete from users where userid='001'通过主外键约束吧,用on delete cascade选项删除的时候就可以捎带删除

oracle 批量更新数据问题
UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing'
WHERE LastName = 'Wilson'
想更新一张表的某个字段。比如表testtable,有a、b、c、d字段,我想更新这张表的d字段
update testtable a
set a.d =
(select b.d from testtable b
where a.a = b.a
and a.b = b.b
and a.c = b.c
and b.d is not null
and rownum = 1 --为了防止有多行非空的相同的行
)
where a.d is null

Update testtable set d=‘更新内容’where (a, b, c) in ( select a, b, c from testtable A1, testtable A2 where A1.a = A2.a and A1.b = A2.b and A1.c = A2.c and A1.rowid <> A2.rowid);

update 表 set 字段 = rand((DATEPART(mm, GETDATE()) * 100000 )
+ (DATEPART(ss, GETDATE()) * 1000 )
+ DATEPART(ms, GETDATE())) //随机数
update testtable a
set a.d =
(select b.d from testtable b
where a.a = b.a
and a.b = b.b
and a.c = b.c
and b.d is not null
and rownum = 1 --为了防止有多行非空的相同的行
)
where a.d is null


如现在有这样的一个表,
table name: test
id name
1 aaatom
2 bbbtom
3 ccctom

现在我需要将这个表中的name字段值中的tom改为lee但是其他的数据不变


aaalee
bbblee
ccclee

update table set name = replace(name,'tom','lee')
where name like '%tom%



随机数的生成
 1、从表中随机取记录
select * from (select * from staff order by dbms_random.random)
表示从STAFF表中随机取3条记录
2、产生随机数
SELECT DBMS_RANDOM.RANDOM FROM DUAL;
产生一个任意大小的随机数
SELECT ABS(MOD(DBMS_RANDOM.RANDOM,100)) FROM DUAL;
产生一个100以内的随机数
SELECT TRUNC(100+900*dbms_random.value) FROM dual;
产生一个100~1000之间的随机数
SELECT dbms_random.value FROM dual;
产生一个0~1之间的随机数
SELECT dbms_random.value(10,20) FROM dual;
产生一个10~20之间的随机数
SELECT dbms_random.normal FROM dual;
NORMAL函数返回服从正态分布的一组数。此正态分布标准偏差为1,期望值为0。这个函数返回的数值中有68%是介于-1与+1之间,95%介于-2与+2之间,99%介于-3与+3之间。
3、产生随机字符串
SELECT dbms_random.string FROM dual;
返回一个长度达60个字符的随机字符串。 (未试验成功)
select dbms_random.string(’P’,20) from dual;
第一个参数 P 表示 printable,即字符串由任意可打印字符构成
第二个参数表示

返回字符串长度
where rownum < 4
4、长度为20的随机数字串
select substr(cast(dbms_random.value as varchar2(38)),3,20) from dual
5、正态分布的随机数
select dbms_random.normal from dual
6、随机字符串
select dbms_random.string(opt, length) from dual
opt可取值如下:
’u’,’U’ : 大写字母
’l’,’L’ : 小写字母
’a’,’A’ : 大、小写字母
’x’,’X’ : 数字、大写字母
’p’,’P’ : 可打印字符
7、随机日期
select to_date(2454084+TRUNC(DBMS_RANDOM.VALUE(0,365)),’J’) from dual
通过下面的语句获得指定日期的基数
select to_char(sysdate,’J’) from dual
8、生成GUID
select sys_guid() from dual
--生成带分隔符(-)的GUID的自定义函数
create or replace function my_guid
return varchar2
is
guid varchar(36);
temp varchar(32);
begin考试大论坛
temp:=sys_guid();
guid:= substr(temp,1,8) || ’-’
||substr(temp,9,4) || ’-’
||substr(temp,13,4)|| ’-’
||substr(temp,17,4)|| ’-’
||substr(temp,21,12);
return guid;




约束
ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID
ALTER TABLE Persons
ADD CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName
ALTER TABLE Persons
DROP CONSTRAINT pk_PersonID
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
)
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
OrderDate date DEFAULT GETDATE()
)
如果我们仅仅需要除去表内的数据,但并不删除表本身,那么我们该如何做呢?

请使用 TRUNCATE TABLE 命令(仅仅删除表格中的数据):

TRUNCATE TABLE 表名称

现在,我们希望在表 "Persons" 中添加一个名为 "Birthday" 的新列。

我们使用下列 SQL 语句:

ALTER TABLE Persons
ADD Birthday date
现在我们希望改变 "Persons" 表中 "Birthday" 列的数据类型。

我们使用下列 SQL 语句:

ALTER TABLE Persons
ALTER COLUMN Birthday year
DROP COLUMN 实例
接下来,我们删除 "Person" 表中的 "Birthday" 列:

ALTER TABLE Person
DROP COLUMN Birthday

用于 Oracle 的语法
在 Oracle 中,代码稍微复杂一点。

您必须通过 sequence 对创建 auto-increment 字段(该对象生成数字序列)。

请使用下面的 CREATE SEQUENCE 语

法:

CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10
上面的代码创建名为 seq_person 的序列对象,它以 1 起始且以 1 递增。该对象缓存 10 个值以提高性能。CACHE 选项规定了为了提高访问速度要存储多少个序列值。

要在 "Persons" 表中插入新记录,我们必须使用 nextval 函数(该函数从 seq_person 序列中取回下一个值):

INSERT INTO Persons (P_Id,FirstName,LastName)
VALUES (seq_person.nextval,'Lars','Monsen')




相关主题
文本预览
相关文档 最新文档