oracle建表语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle建表语句相关的知识,希望对你有一定的参考价值。

create table usptotest
(
pn varchar(10) not null,
isd varchar(20) not null default '',
title varchar(150) not null default '',
abst varchar(2000) not null default '',
appno varchar(20) not null default '',
appdate varchar(20) not null default '',
inventor varchar(200) not null default '',
assignee_name varchar(50) not null default '',
assignee_country varchar(20) not null default '',
assignee_city varchar(20) not null default '',
assignee_state varchar(10) not null default '',
primary key (pn)
)
以上的sql在执行后提示:
17:30:12 [CREATE - 0 row(s), 0.020 secs] [Error Code: 907, SQL State: 42000] ORA-00907: 缺失右括号
... 1 statement(s) executed, 0 row(s) affected, database exec time 0.020 sec [0 successful, 0 warnings, 1 errors]

好像没有少括号,请问哪里有问题呢?谢谢!
照一楼的说法做了,但现在我输入一条仅包括主键pn的数据到表中,他提示:无法将 NULL 插入,其它的字段禁止为空了,我的意思是除第一个字段主键外,其它字段可以不输入,而是直接赋值为空,请问这该怎么修改呢?谢谢!

create table usptotest
(
pn varchar(10) not null,
isd varchar(20) default '' not null ,
title varchar(150) default '' not null ,
abst varchar(2000) default '' not null ,
appno varchar(20) default '' not null ,
appdate varchar(20) default '' not null ,
inventor varchar(200) default '' not null ,
assignee_name varchar(50) default '' not null ,
assignee_country varchar(20) default '' not null ,
assignee_city varchar(20) default '' not null ,
assignee_state varchar(10) default '' not null,
primary key (pn)
)
这样就OK了
你写反了
除第一个字段主键外,其它字段可以不输入,而是直接赋值为空
create table usptotest
(
pn varchar(10) not null,
isd varchar(20) default '' ,
title varchar(150) default '' ,
abst varchar(2000) default '' ,
appno varchar(20) default '',
appdate varchar(20) default '' ,
inventor varchar(200) default '' ,
assignee_name varchar(50) default '',
assignee_country varchar(20) default '' ,
assignee_city varchar(20) default '' ,
assignee_state varchar(10) default '' ,
primary key (pn)
)
参考技术A

把default关键字去掉,Oracle不支持 not null 和 default 同时使用,你这是mysql的语法了,双引号也去掉就可以了,亲测成功。

参考技术B

CREATE SEQUENCE add_emp

increment by 1   -- 每次递增1

start with 1     -- 从1开始

nomaxvalue       -- 没有最大值

minvalue 1       -- 最小值=1

NOCYCLE;         -- 不循环

Sequence created.SQL> CREATE TABLE test_create_tab2 (
2    id   INT,
3    val  VARCHAR(10),
4    PRIMARY KEY (id)
5  );

Table created.SQL> CREATE OR REPLACE TRIGGER BeforeTestCreate2Insert

Trigger created.SQL> INSERT INTO test_create_tab2(val) VALUES ('NO id');

1 row created.SQL> INSERT INTO test_create_tab2(id, val) VALUES (1, 'id no use');

1 row created.
SQL> SELECT * FROM test_create_tab2;

参考技术C 就在引号中间加个空格吧!这样就可以了,其实没必要手动加个 default '',它和系统默认的null是一样的——在没加空格的时候!

oracle 查看建表语句

dbms_metadata.get_ddl(object_type => 'TABLE',name => table_name)

这个语句我会用,但是这个查询出来的create语句有些问题,一是不包含约束,二十多了什么附件信息,比如storage compress等。例子如下:
CREATE TABLE "abc"."AR_TMP"
( "COD_FN_ENT" CHAR(4 CHAR),
"NUM_SEQ_AR" CHAR(17 CHAR) ,
"ID_SP" CHAR(3 CHAR) ,
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS NOLOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "CRS_DATA"

我在aqua data studio里在表上右击可以查询到如下的sql,
CREATE TABLE BDPDCUSER.AR_TMP (
COD_FN_ENT CHAR(4 CHAR) NOT NULL,
NUM_SEQ_AR CHAR(17 CHAR) NOT NULL,
ID_SP CHAR(3 CHAR) NOT NULL,
)
这个包含了null等约束,而且没有附件信息,如果过想获取这个sql,该怎么用sql语句来实现呢?谢谢。
not null 确实显示,但是null不显示。我现在想着用shell脚本加工,但是也有个小问题。
dbms_metadata.get_ddl
本来直接执行输出是这样的
CREATE TABLE "abc"."AR_TMP"
( "COD_FN_ENT" CHAR(4 CHAR),
"NUM_SEQ_AR" CHAR(17 CHAR) ,
"ID_SP" CHAR(3 CHAR) ,
)
但是在shell执行是输出这样的
CREATE TABLE "abc"."AR_TMP"
( "COD_FN_ENT" CHAR(4 CHAR),
"NUM_SEQ_AR" CHAR(17
CHAR) ,
"ID_SP" CHAR(3 CHAR) ,
)
您知道怎么回事吗?谢谢。

参考技术A 在sqlplus中执行以下命令:

set line 200 pages 50000 wrap on long 999999 serveroutput on

EXECUTEDBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false);---去除storage等多余参数

select dbms_metadata.get_ddl('TABLE', 表名) from dual;追问

谢谢,不过也没有加上 NULL NOT NULL等限制,AQ右键菜单应该也是执行某条或某些命令吧?您知道吗?

追答

我在本地试过,会显示not null的喔。没有用过AQ,但是这些IDE应该都是调用数据库的命令或函数的。

追问

您知道怎么回事吗?谢谢。这里写了超长,所以补充问题。

追答

您是指“AQ右键菜单应该也是执行某条或某些命令吧?”吗?这个就不太清楚啦。

本回答被提问者采纳

以上是关于oracle建表语句的主要内容,如果未能解决你的问题,请参考以下文章

怎样用oracle查建表语句

oracle建表语句

oracle 查看建表语句

oracle 建表语句

MYSQL建表语句转换成oracle建表语句

在oracle数据库中创建表语句如何写?