如何创建PLSQL表?附ins_company_master表创建代码示例
如何在PL/SQL中创建表
嘿,关于在PL/SQL里创建表的问题,我来给你详细捋一捋,顺便把你提供的示例代码里的小问题修正一下~
先搞清楚核心逻辑
PL/SQL是Oracle的过程化扩展语言,而创建表属于DDL(数据定义语言)操作。如果是直接在SQL工具(比如SQL*Plus、PL/SQL Developer)里执行,直接写CREATE TABLE语句就行;但如果要把创建表的逻辑放到PL/SQL块(BEGIN...END)里执行,必须用EXECUTE IMMEDIATE来执行动态SQL——因为PL/SQL块默认不支持直接写DDL命令,这是很多新手容易踩的坑。
修正你的示例代码
你给的代码里有两个关键问题:
- 约束里引用的列名不对:主键约束写的是
id,但你的列实际叫ins_company_id;唯一约束写的code,对应列是ins_Company_code - 没有用
EXECUTE IMMEDIATE包裹DDL语句,直接放在PL/SQL块里会编译报错
下面是修正后的完整代码:
BEGIN EXECUTE IMMEDIATE 'CREATE OR REPLACE TABLE ins_company_master ( ins_company_id NUMBER(2), ins_Company_code VARCHAR(15), ins_company_name VARCHAR(15), ins_company_contact VARCHAR(15), ins_company_address VARCHAR(15), ins_company_location VARCHAR(15), ins_company_status CHAR(1), CONSTRAINT ins_company_id_pk PRIMARY KEY(ins_company_id), CONSTRAINT ins_company_code_unique UNIQUE(ins_Company_code) )'; END; /
额外的小建议
- 约束命名更清晰:我把主键约束命名为
ins_company_id_pk,唯一约束命名为ins_company_code_unique,避免和列名重名,后续维护时更容易识别 - 推荐用VARCHAR2代替VARCHAR:在Oracle里,
VARCHAR和VARCHAR2目前行为一致,但VARCHAR2是Oracle的扩展类型,也是官方推荐使用的,如果你需要更长的字符串长度,可以把VARCHAR(15)改成VARCHAR2(50)这类更符合业务需求的长度 - 如果不需要PL/SQL逻辑,直接执行DDL更简单:如果你只是单纯创建表,不需要嵌入到过程、函数里,直接用下面的SQL就行,不用套PL/SQL块:
CREATE OR REPLACE TABLE ins_company_master ( ins_company_id NUMBER(2), ins_Company_code VARCHAR(15), ins_company_name VARCHAR(15), ins_company_contact VARCHAR(15), ins_company_address VARCHAR(15), ins_company_location VARCHAR(15), ins_company_status CHAR(1), CONSTRAINT ins_company_id_pk PRIMARY KEY(ins_company_id), CONSTRAINT ins_company_code_unique UNIQUE(ins_Company_code) );
内容的提问来源于stack exchange,提问作者NITTIN
相关产品推荐
相关产品推荐

