oracle新增表字段_oracle新增表字段语句
oracle 建表字段长度加倍
用select getclob(table_name,field_id,field_name,v_id,v_) as比如dept表结构如下:
oracle新增表字段_oracle新增表字段语句
oracle新增表字段_oracle新增表字段语句
写个脚本:
select 'create table '||table_name||'('||wm_concat(column_name||' '||data_type||'('||data_length3||')')||');' from user_tab_columns where lower(table_name)='dept' group by table_name结果就是这么一串东西:
create table DCreateDataSource = FalseEPT(LOC VARCHAR2(39),DNAME VARCHAR2(42),DEPTNO NUMBER(66));不过针对date类型,number后边带小数等等类型,需要单独处理,并且有些超过长度的也需要特殊处理,自己看着弄吧
oracle中怎么更改表中字段名
使用RENAME关键字
修改字段名:alter tablv_ in number) return varchar2e 表名 rename column 原字段名 to 新字段名
另,修改表名:alter table bytesleft = LOF(fnum)表名 rename to 新表名
oracle修改字段名要清楚历史数据么
oracle中怎么更改表中字段名 首先方法是使用RENAME关键字: 修改字段名:alter table 表名 rename column 现列名 to 新列名;修改表名:alter table 表名 rename to 新表名增加字段语法:alter table tablename add (column datatype [default value][null/not null],….); 说明:alter table 表名 add (字段名 字段类型 默认值 是否为空); 例:alter table sf_users add (HeadPIC blob); 例:alter table sf_users add (userName varchar2(30) default '空' not null);修改字段的语法:alter table tablename modify (column datatype [default value][null/not null],….); 说明:alter table 表名 modify (字段名 字段类型 默认值 是否为空); 例:alter table sf_InvoApply modify (BILLCODE number(4));删除字段的语法:alter table tablename drop (column); 说明:alter table 表名 drop column 字段名; 例:alter table sf_users drop column HeadPIC;字段的重命名: 说明:alter table 表名 rename column 列名 to 新列名 (其中:string ls_path,ls_filename,ls_jhdhcolumn是关键字) 例:alter table sf_InvoApply rename column PIC to NEWPIC;表的重命名: 说明:alter table 表名 rename to 新表名 例:alter table sf_InvoApply rename to sf_New_InvoApply;。
oracle数据库如何修改字段的数据类型
用alter语句进行修改。
语法: alter table 表名 modify 字段名 字段类型(字段长度);说明:如果是date等没有长度的类型,字段长度部分可以省略。 如:目前test表属性如下 要将name列的字段类型改为date类型,可用如下语句: alter table test modify name date;此时可见name列的类型已经更新成功。
注意事项: 如果表中有数据尽量不要使用此语句,会造成数据丢失,应在备份的情况下进行修改。
oracle可否直接改表字段数据类型
好像没办法一条语句完成增加字段--update---删原来字段---改字段名只能一步步的做还有刚才先改long在改clob字段没成功,我估计是这张表现有数据不能做类型转换的原因吧。可以先创建张表备份表在原数据放到这表中,然后再修改原表字段类型,在把数据导入原表试试看吧。
取oracle一个表的所有字段名 按要求修改 删掉 并重新按要求新建字段
create table New as select from Old;--//将Old表备份到New
Alter Table Old drop COLUMN 字段名;--//删除字段
Alber TABLE Old add 字段名 varchar1 row updated2(100);--//新增字段
ALTER TABLE Old RENAME COLUMN old_name to new_name--//如果由于约束不能删除字段的话,就给他改名.
祝你好运!
创建oracle表,提示字段定义语法错误
v_ in number,创建表(Create table)语法详解
ROWID A1 A2 A3 A4 A51. ORACLE常用的字段类型
ORACLE常用的字段类型有
VARCHAR2 (size) 可变长度的字符串, 必须规定长度
CHAR(size) 固定长度的字符串, 不规定长度默认值为1
NUMBER(p,s) 数字型p是位数总长度, s是小数的长度, 可存负数
最长38位. 不够位时会四舍五入.
DATE 日期和时间类型
LOB 超长字符, 可达4G
CLOB 超长文本字符串
BLOB 超长二进制字符串
BFILE 超长二进制字符串, 保存在数据库外的文件里是只读的.
数字字段类型位数及其四舍五入的结果
原始数值1234567.89
数字字段类型位数 存储的值
Number 1234567.89
Number(8) 12345678
Number(6) 错
Number(9,1) 1234567.9
Number(9,3) 错
Number(7,2) 错
Number(5,-2) 1234600
Number(5,-4) 1230000
Number(,1) 1234567.9
2. 创建表时给字段加默认值 和约束条件
创建表时可以给字段加上默认值
例如 : 日期字段 DEFAULT SYSDATE
这样每次插入和修改时, 不用程序作这个字段都能得到动作的时间
创建表时可以给字段加上约束条件
例如: 非空 NOT NULL
不允许重复 UNIQUE
关键字 PRIMARY KEY
按条件检查 CHECK (条件)
外键 REFERENCES 表名(字段名)
3. 创建表的例子
CREATE TABLE DEPT(
EPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
DNAME VARCHAR2(14),
LOC VARCHAR2(13)) ;
CREATE TABLE region(
ID number(2) NOT NULL PRIMARY KEY,
tcode number(6) default '0' NOT NULL,
areaname varchar2(30) default ' ' NOT NULL);
4. 创建表时的命名规则和注意事项
1)表名和字段名的命名规则:必须以字母开头,可以含符号A-Z,a-z,0-9,_,$,#
2)大小写不区分
3)不用SQL里的保留字, 一定要用时可用双引号把字符串括起来.
4)用和实体或属性相关的英文符号长度有一定的限制
注意事项:
1)建表时可以用中文的字段名, 但还是用英文的字段名
2)创建表时要把较小的不为空的字段放在前面, 可能为空的字段放在后面
3)建表时如果有关键字或者的约束条件,建表时自动建了索引
4)一个表的最多字段个数也是有限制的,254个.
oracle clob字段插入问题
.ConnectionString = "Provider=OraOledb.Oracle.1;" & _在oracle中,有4个大对象(lobs)类型可用,分别是blob,clob,bfile,nclob。
下面是对lob数据类型的简单介绍。
blob:二进制lob,为二进制数据,最长可达4GB,存贮在数据库中。
clob:字符lob,字符数据,最长可以达到4GB,存贮在数据库中。
bfile:二进制文件;存贮在数据库之外的只读型二进制数据,长度由作系统限制。
nclob:支持对字节字符(nultibyte characterset)的一个clob列。
对于如何检索和作这些lob数据一直是oracle数据库开发者经常碰到的问题。下面我将在oracle对lob数据处理的一些方法和技巧,介绍给读者,希望能够对读者以后的开发有所帮助。
oracle中可以用多种方法来检索或作lob数据。通常的处理方法是通过dbms_lob包。
其他的方法包括使用api(application programminginteces)应用程序接口和oci(oracle call intece)oracle调用接口程序。
一、在oracle开发环境中我们可以用dbms_lob包来处理!dbms_lob包功能强大,简单应用。既可以用来读取内部的lob对象,也可以用来处理bfile对象。但处理两者之间,还有一点别。处理内部lob对象(blob,clob)时,可以进行读和写,但处理外部lob对象bfile时,只能进行读作,写的作可以用pl/sql处理。另外用sql也可以处理lob,但要注意sql仅可以处理整个lob,不能作lob的数据片。
在dbms_lob包中内建了read(),append,write(),erase(),copy(),getlength(),substr()等函数,可以很方便地作lob对象。这里不做深入讨论,读者可以参看相关的书籍。
对于pl/sql,下面介绍一种技巧,用动态的pl/sql语句处理clob对象来传替表名!
动态PL/SQL,对CLOB字段作可传递表名table_name,表的标志字段名field_id,clob字段名field_name记录号v_id,开始处理字符的位置v_,传入的字符串变量v_clob
修改CLOB的PL/SQL过程:updateclob
create or replace procedure updateclob(
field_id in varchar2,
field_name in varchar2,v_id in number,
v_clob in varchar2)
is
lobloc clob;
c_clob varchar2(32767);
amt binary_integer;
binary_integer;
query_str varchar2(1000);
begin
:=v_32766+1;
amt := length(v_clob);
c_clob:=v_clob;
query_str :='select '||field_name||'from '||table_name||'
where '||field_id||'= :id for update ';
--initialize buffer with data to be inserted or updated
EXECUTE IMMEDIATE query_str INTO lobloc USING v_id;
dbms_lob.write(lobloc, amt, , c_clob);
commit;
exception
rollback;
end;
l /用法说明:
在插入或修改以前,先把其它字段插入或修改,CLOB字段设置为空empty_clob(),
然后调用以上的过程插入大于2048到32766个字符。
如果需要插入大于32767个字符,编一个循环即可解决问题。
查询CLOB的PL/SQL函数:getclob
create or replace function getclob(
field_id in varchar2,
field_name in varchar2,
v_id in number,
is
lobloc clob;
buffer varchar2(32767);
amount number := 2000;
offset number := 1;
query_str varchar2(1000);
begin
query_str :='select '||field_name||' from '||table_name||'
where '||field_id||'= :id ';
--initialize buffer with data to be found
EXECUTE IMMEDIATE query_str INTO lobloc USING v_id;
offset:=offset+(v_如:目前test表属性如下-1)2000;
--read 2000 varchar2 from the buffer
dbms_lob.read(lobloc,amount,offset,buffer);
exception
when no_data_found then
end;
l 用法说明:
partstr from dual;
可以从CLOB字段中取2000个字符到partstr中,
编一个循环可以把partstr组合成dbms_lob.getlength(field_name)长度的目标字符串。
二、对于在其他不同的开发环境,例如vc,vb,pb,ja等环境下对lob的处理,处理方法不尽相同,在这里将简要举几个例子来说明不在oracle开发环境下对lob的处理。
exampler 2.
long ll_num,ll_count,rtn
blob ole_blob
ll_num=dw_lb.getrow()
if ll_num>0 then ls_jhdh=dw_lb.object.ct_njhdh[ll_num]
select count() into :ll_count from sj_jh_jhfjb where
ct_jhdlxbh='1' and ct_jhdh=:ls_jhdh and ct_jdlxbh=:is_jdlx;
if ll_count>0 then
rtn=messagebox("提示","是否要修改此附件",question!,yesno!,1)
if rtn=1 then
SELECTBLOB ct_jhfjnr INTO le_blob from sj_jh_jhfjb where
ct_jhdlxbh='1' and ct_jhdh=:ls_jhdh and ct_jdlxbh=:is_jdlx;
ole_1.objectdata =ole_blob
If ole_1.activate(offsite!) <> 0 Then
Messagebox("OLE Activate","不能激活")
Return -1
end If
end if
else
messagebox("提示","没有附件")
end if
end if
在vb中处理大对象,一般可以用OO4O(oracle objects for
ole)来处理大对象。这里介绍一种不用0040处理大对象blob的方法。
下面这段程序可以将一个文件(文本文件,doc文件,图象文件等)保存到数据库中,并可以将其从数据库读出
需要两个commandbutton
cmd1 名称 cmdse caption 保存
cmd2 名称 cmdread caption 读取
一个cmddialog控件
同时需要创建一张表t_demo(字段id 类型 number,;字段text 类型 blob;)
exmple 3.
Option Explicit
Dim rn As ADODB.Connection
Public Function CreateDataSource(DataSource As String, UserID
As String, Password As String) As Boolean
On Error GoTo DbConErr:
Set rn = New ADODB.Connection
With rn
"password=" & Password & ";" & _
"User ID =" & UserID & ";" & _
"Data Source=" & DataSource & ";" & _
"Locale Identifier=2052"
.Open
End With
CreateDataSource = True
Exit Function
DbConErr:
End Function
Private Sub cmdRead_Click()
Dim rs As New ADODB.Recordset
rs.ActiveConnection = rn
rs.LockType = adLockOptimistic
rs.CursorLocation = adUse
rs.Source = "select from t_demo"
rs.Open
ComDlgDir.DialogTitle = "保存文件"
ComDlgDir.Filter = "."
ComDlgDir.ShowSe
Call BlobToFile(rs.Fields("text"), ComDlgDir.filename)
Set rs = Nothing
Exit Sub
Set rs = Nothing
End Sub
Private Sub cmdse_Click()
Dim rs As New ADODB.Recordset
rs.ActiveConnection = rn
rs.LockType = adLockOptimistic
rs.CursorLocation = adUse
rs.Source = "select from t_demo"
rs.Open
rs.AddNew
ComDlgDir.DialogTitle = "选取文件"
ComDlgDir.ShowOpen
rs.Fields("id").Value = 1
If ComDlgDir.filename <> "" Then
Call FileToBlob(rs.Fields("text"), ComDlgDir.filename)
rs.Update
End If
Set rs = Nothing
Exit Sub
Set rs = Nothing
End Sub
Private Sub Form_Load()
If Not CreateDataSource("sid", "p", "mar") Then
MsgBox "Connection failure!"
End If
End Sub
fld As ADODB.Field, filename As String, Optional CkSize As
Long = 8192)
Dim fnum As Integer, bytesleft As Long, bytes As Long
Dim tmp() As Byte
If (fld.Attributes And adFldLong) = 0 Then
Err.Raise 1001, , "field doesn't support the GetCk mod."
End If
If Dir$(filename) = "" Then Err.Raise 53, , "File not found"
fnum = FreeFile
Open filename For Binary As fnum
Do While bytesleft
bytes = bytesleft
If bytes > CkSize Then bytes = CkSize
ReDim tmp(1 To bytes) As Byte
Get fnum, , tmp
fld.AppendCk tmp
bytesleft = bytesleft - bytes
Loop
End Sub
Sub BlobToFile(fld As ADODB.Field, filename A
oracle sql dloper建表的时候id字段的自动递增怎么设置
SQL> alter table test_part enable row movement;1、打开sql server数据库,新建一张表,然后在表建id字段,选择int类型。
2、选中id字段,在下面的列属性中找到标识规范。
3、点击标识规范,可以看到默认为否,代表不递增。
4、将标识规范调为是,增量设置为1,点击保存按钮,需要注意的是这种方法只在创建表的时候有用,如果已经创建表成功了,再来修改会出现错误,可以先删除,再重新创建添加id字段自增。
5、点击保存之后,添加数据的时候,id会自动递增了。
比如
先创建一个表
create table test
(id int primary key,
create sequence test_seq increment by 1 start with 1
minvalue 1 maxvalue 9999999999999 nocache
order;触发器实现
create or replace trigger test_trigger
before insert on test
for example 1.each
row
begin
select test_seq.Nextval into:new.id from dual;
end;然后你试试吧
insert into test (name) values ('张三');
oracle数据库如何修改字段的数据类型?
用alter语句进行修改。
语法:
alter table 表名 modify 字段名 字段类型(字段长度);说明:如果是date等没有长度的类型,字段长度部分可以省略。
要将name列的字段类型改为date类型,可用如下语句:
alter table test modify name date;此时可见AAAGLwAAGAAA+8MAAD 1111 2006-06-30 ewrqwe 2006-06-30 1111name列的类型已经更新成功。
注意事项:--from ition, write 32766 varchar2 into lobloc
如果表中有数据尽量不要使用此语句,会造成数据丢失,应在备份的情况下进行修改。
要改成date类型的,就必须删,因为原来的数据不是date型的
oracle中如何更改一个表的一个字段属性(名称,类型)
直接在PL/SQL Dloper中修改就可以了。修改字段的属性,名称方法
--修改某一个字段的类型,当该字段不为null时
ALTER TABLE 表名 ADD 字段 NUMBER(11,0) ; --新创建一列,期待的字段类型
UPDATE 表名 SET 字段_bak= 字段;COMMIT; --旧字段值到新字段,dml的都需要提交
ALTER TABLE 表名DROP COLUMN 字段;--删除掉旧字段
ALTER TABLE 表名RENAME COLUMN 字段_bakTO 字段;--修改新字段的名称
alter table 表名drop column 字段; --删除表一个字段
alter table 表名add 字段NUMBER(11,0) default 0 not null;--添加表一个字段 作过程中遇到的问题
场景:
作为一个小白,刚接触数据库作,今天在oracle中使用s好像不能直接转,要把varchar2类型先转成longSQL> desc test;Name Type Nullable Default ments ---- ------------ -------- ------- -------- COL VARCHAR2(10) Y SQL> alter table test modify col long;Table alteredSQL> desc test;Name Type Nullable Default ments ---- ---- -------- ------- -------- COL LONG Y SQL> alter table test modify col clob;Table alteredSQL> desc test;Name Type Nullable Default ments ---- ---- -------- ------- -------- COL CLOB Y --补充楼主上面那做法。ql语句执行了delete和update命令,在本地数据库中已执行成功,兴致冲冲的向老大汇报任务时,但是他那边查看并没有删除成功或更新数据库,很是尴尬,为什么会出现这种不一致的情况呢?
原来是因为我执行命令后没有commit提交,那么更新的内容只是被保存到内存中,而不是提交到数据库中,将不会被其他Session(对话)看到,其他对话看到的是更新前的数据。当用户退出对话时,Oracle才会自动commit。
SQL语言分为类:DDL(数据定义语言) - Create、Alter、Drop 这些语句自动提交,无需用Commit提交。
DQL(数据查询语言)- Select查询语句不存在提交问题。
DML(数据纵语言) - Insert、Update、Delete 这些语句需要Commit才能提交。
DTL(事务控制语言) - Commit、Rollback 事务提交与回滚语句。
执行完DML语句,若没有commit再执行DDL语句,也会自动commit未被commit的数据。
如果打开自动提交,DML作后也不需要手动提交:SET AUTOCOMMIT ON; sqlDlop导出表的方法:
需要注意的时导出的编码,如果只需要导出结构,可以取消勾选insert上面的复选框
oracle中如何更改一个表的一个字段属性(名称,类型)
标签:column而不是字段tartps自动修改字段方法内存
Oracle中触发器能否在表中添加一条记录同时对某个字段进行修改
大致可以写成这样:
create or replace trigger trigger01 after update of "type"
on a
for eClose #fnumach row -- 行触发
when (new.type = 1) -- 当修改后数据的type值为1时触发
declare
begin
-- 向b表DCL(数据控制语言) - Grant、Revoke 授予权限与回收权限语句。插入数据
insert into b (id, name, date)
select new.id, new.name, sysdate;
end trigger01;未实际测试,可能某些地方需要修改一下。
如何更新oracle表中的分区字段
A4 DATE not null,默认情况下,oracle的分区表对于分区字段是不允许进行update作的,如果有对分区字段行进update,就会报错——ORA-14402: 更新分区关键字列将导致分区的更改。但是可以通过打开表的row movement属性来允许对分区字段的update作。
例:创建分区表test_part进行实验
create table TEST_PART
(A1 NUMBERnot null,
A2 DATE not null,
A3 VARCHAR2(6) not null,
A5 NUMBER not null,
)partition by range (A1)
partition P2 values less than (2000),
partition P3 values less than (3000),
partition P4 values less than (4000),
partition P5 values less than (5000),
partition P6 values less than (MAXVALUE)
);
插入如下的数据
SQL> select fROWID A1 A2 A3 A4 A5rom test_part;
A1 A2 A3 A4 A5
---------- ----------- ------ ----------- ----------
123 2006-06-30 123456 2006-06-30 123
456 2006-06-30 asdfgh 2006-06-30 456
1 2006-06-30 234123 2006-06-30 1
2 2006-06-30 234234 2006-06-30 2
1234 2006-06-30 456789 2006-06-30 1234
1111 2006-06-30 ewrqwe 2006-06-30 1111
2222 2006-06-30 fdafda 2006-06-30 2222
3333 2006-06-30 342342 2006-06-30 3333
5678 2006-06-30 qwerty 2006-06-30 5678
9 rows selected
分区P1、P2的数据分别为:
SQL> select rowid,t. from test_part partition(p1) t;
------------------ ---------- ----------- ------ ----------- ----------
AAAGLoAAGAAAtsEAAB 456 2006-06-30 asdfgh 2006-06-30 456
AAAGLoAAGAAAtsEAAC 1 2006-06-30 234123 2006-06-30 1
AAAGLoAAGAAAtsEAAD 2 2006-06-30 234234 2006-06-30 2
AAAGLoAAGAAAtsEAAE 123 2006-06-30 123456 2006-06-30 123
SQL> select rowid,t. from test_part partition(p2) t;
------------------ ---------- ----------- ------ ----------- ----------
AAAGLwAAGAAA+8MAAC 1234 2006-06-30 456789 2006-06-30 1234
直接update提示错误
SQL> update test_part set a1=1123 where a1=123;
update test_part set a1=1123 where a1=123
ORA-14402: 更新分区关键字列将导致分区的更改
打开row movement属性
Table altered
再次执行update作
SQL> update test_part set a1=1123 where a1=123;
执行是成功的并迁移到分区P2上了,且这时候rowid也发生了变化
SQL> select rowid,t. from test_part partition(p2) t;
------------------ ---------- ----------- ------ ----------- ----------
AAAGLwAAGAAA+8MAAC 1234 2006-06-30 456789 2006-06-30 1234
AAAGLwAAGAAA+8PAAB 1123 2006-06-30 123456 2006-06-30 123
SQL>
enable row movement可以允许数据段的压缩、update分区字段的数据(跨分区的)
oracle中如何将数据从一个表到另一个表(仅其中某些字段)?
(二)在vb中的处理insert into 新表(字段1,字段2,字段3) select 字段1,字段2,字段3 from 旧表,commit;确定新表里没入的字段有默认值或者不为空,否则报错;现在在另一个表中建一个字段(null),然后在企业管理器里用数据导出,把其他字段的钩选空,就那个要的字段,这样导出就可以了,只不过源数据库和目标数据库是同一个数据库而已。
when others then拓展回答:不同的数据库语法不同(SQL 和Oracle为例),且包括目标表已存在和目标表不存在的情况;Oracle应用产品包括财务,供应链,制造,项目管理、人力资源和市场与销售等150多个模块,荣获多项世界,现已被全球近7600多家企业所采用;由于在电子商务方面的杰出表现,Oracle公司在美国Mongan Stanley公司公布的权威性全球企业1000强中,从去年的第122名一跃成为第13名,成为全球第二大软件公司和的电子商务解决方案供应商。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系 836084111@qq.com 删除。