PL / SQL语法问题

问题描述 投票:0回答:2

我正在使用在线平台制作ERD并获取它的PL / SQL代码,但我得到以下代码(见下文),但我不确定它是否是PL / SQL。我需要验证此代码是否是PL / SQL:

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中发声?

oracle plsql
2个回答
1
投票

那么这就是PL / SQL,如果你删除你在创建触发器上的双分号,它将在Oracle中工作。 https://dba.stackexchange.com/questions/1121/how-to-differentiate-between-sql-and-pl-sql


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.