首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PL/SQL语法问题

PL/SQL语法问题
EN

Stack Overflow用户
提问于 2016-07-05 15:57:01
回答 4查看 227关注 0票数 1

我正在做一个在线平台上的ERD,并得到它的PL/SQL代码,但我得到了以下代码(见下文),但我不确定它是否是PL/SQL。我需要验证这段代码是否是PL/SQL:

代码语言:javascript
复制
CREATE TABLE "CATEGORY" (
  "ID" NUMBER(10) PRIMARY KEY,
  "THLEVEL" NUMBER(10) NOT NULL
);

CREATE SEQUENCE "CATEGORY_SEQ" NOCACHE;

CREATE TRIGGER "CATEGORY_BI"
  BEFORE INSERT ON "CATEGORY"
  FOR EACH ROW
BEGIN
  IF :NEW."ID" IS NULL THEN
    SELECT "CATEGORY_SEQ".NEXTVAL INTO :NEW."ID" FROM DUAL;
  END IF;
END;;

CREATE TABLE "REPORT" (
  "ID" NUMBER(10) PRIMARY KEY,
  "CLIENT" CLOB NOT NULL,
  "VERSION" NUMBER(10) NOT NULL
);

CREATE SEQUENCE "REPORT_SEQ" NOCACHE;

CREATE TRIGGER "REPORT_BI"
  BEFORE INSERT ON "REPORT"
  FOR EACH ROW
BEGIN
  IF :NEW."ID" IS NULL THEN
    SELECT "REPORT_SEQ".NEXTVAL INTO :NEW."ID" FROM DUAL;
  END IF;
END;;

CREATE TABLE "ASSET" (
  "ID" NUMBER(10) PRIMARY KEY,
  "REPORT" NUMBER(10) NOT NULL,
  "IP" VARCHAR2(1000 CHAR) NOT NULL,
  "NAME" VARCHAR2(1000 CHAR)
);

CREATE INDEX "IDX_ASSET__REPORT" ON "ASSET" ("REPORT");

ALTER TABLE "ASSET" ADD CONSTRAINT "FK_ASSET__REPORT" FOREIGN KEY ("REPORT") REFERENCES "REPORT" ("ID");

CREATE SEQUENCE "ASSET_SEQ" NOCACHE;

CREATE TRIGGER "ASSET_BI"
  BEFORE INSERT ON "ASSET"
  FOR EACH ROW
BEGIN
  IF :NEW."ID" IS NULL THEN
    SELECT "ASSET_SEQ".NEXTVAL INTO :NEW."ID" FROM DUAL;
  END IF;
END;;

CREATE TABLE "SOLUTION" (
  "ID" NUMBER(10) PRIMARY KEY,
  "IMPLEVEL" VARCHAR2(1000 CHAR) NOT NULL,
  "DIFFICULTY" VARCHAR2(1000 CHAR) NOT NULL,
  "DESCRIPTION" CLOB NOT NULL
);

CREATE SEQUENCE "SOLUTION_SEQ" NOCACHE;

CREATE TRIGGER "SOLUTION_BI"
  BEFORE INSERT ON "SOLUTION"
  FOR EACH ROW
BEGIN
  IF :NEW."ID" IS NULL THEN
    SELECT "SOLUTION_SEQ".NEXTVAL INTO :NEW."ID" FROM DUAL;
  END IF;
END;;

CREATE TABLE "VULNERABILITY" (
  "ID" VARCHAR2(1000 CHAR) PRIMARY KEY,
  "ASSET" NUMBER(10) NOT NULL,
  "SOLUTION" NUMBER(10) NOT NULL,
  "CATEGORY" NUMBER(10) NOT NULL,
  "CVE" VARCHAR2(1000 CHAR),
  "DATE" TIMESTAMP NOT NULL,
  "LOCATION" CLOB NOT NULL
);

CREATE INDEX "IDX_VULNERABILITY__ASSET" ON "VULNERABILITY" ("ASSET");

CREATE INDEX "IDX_VULNERABILITY__CATEGORY" ON "VULNERABILITY" ("CATEGORY");

CREATE INDEX "IDX_VULNERABILITY__SOLUTION" ON "VULNERABILITY" ("SOLUTION");

ALTER TABLE "VULNERABILITY" ADD CONSTRAINT "FK_VULNERABILITY__ASSET" FOREIGN KEY ("ASSET") REFERENCES "ASSET" ("ID");

ALTER TABLE "VULNERABILITY" ADD CONSTRAINT "FK_VULNERABILITY__CATEGORY" FOREIGN KEY ("CATEGORY") REFERENCES "CATEGORY" ("ID");

ALTER TABLE "VULNERABILITY" ADD CONSTRAINT "FK_VULNERABILITY__SOLUTION" FOREIGN KEY ("SOLUTION") REFERENCES "SOLUTION" ("ID");

CREATE TABLE "EXPLOIT" (
  "ID" NUMBER(10) PRIMARY KEY,
  "VULNERABILITY" VARCHAR2(1000 CHAR) NOT NULL,
  "NAME" VARCHAR2(1000 CHAR) NOT NULL,
  "TYPE" CLOB NOT NULL,
  "DESCRIPTION" CLOB NOT NULL
);

CREATE INDEX "IDX_EXPLOIT__VULNERABILITY" ON "EXPLOIT" ("VULNERABILITY");

ALTER TABLE "EXPLOIT" ADD CONSTRAINT "FK_EXPLOIT__VULNERABILITY" FOREIGN KEY ("VULNERABILITY") REFERENCES "VULNERABILITY" ("ID");

CREATE SEQUENCE "EXPLOIT_SEQ" NOCACHE;

CREATE TRIGGER "EXPLOIT_BI"
  BEFORE INSERT ON "EXPLOIT"
  FOR EACH ROW
BEGIN
  IF :NEW."ID" IS NULL THEN
    SELECT "EXPLOIT_SEQ".NEXTVAL INTO :NEW."ID" FROM DUAL;
  END IF;
END;

那么,这是PL/SQL还是来自Oracle的其他东西?这在PL/SQL中听起来怎么样?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-07-05 16:10:12

这就是PL/SQL,如果您删除create trigger上的双分号,它将在Oracle中工作。https://dba.stackexchange.com/questions/1121/how-to-differentiate-between-sql-and-pl-sql

票数 1
EN

Stack Overflow用户

发布于 2018-09-15 00:46:46

这不是PL/SQL。这就是DDL (数据定义语言)。具体地说,它就是Oracle DDL。

票数 0
EN

Stack Overflow用户

发布于 2021-08-01 07:11:13

这些是DDL语句,我们可以在其中创建和更改表,PL/SQL是一种过程化语言SQL,在其中我们可以对任何进程使用DML语句。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38198092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档