【问题标题】:Error at line 7: PLS-00103: Encountered the symbol "/" - Oracle Live Tutorial第 7 行错误:PLS-00103:遇到符号“/” - Oracle Live 教程
【发布时间】:2021-08-21 15:41:44
【问题描述】:

我在遵循以下链接中的 Oracle Live Apex 教程时遇到问题:

https://livesql.oracle.com/apex/f?p=590:1:13286540921559:CLEAR::1:TUTORIAL_ID,P1_SHOW_LEARN_SIDEBAR:66403703756642340425947956952870068,Y

具体来说,它适用于我尝试在我的表中创建触发器作为该教程的一部分。我复制并粘贴到我的 Oracle Apex 编辑器中的代码如下:

create or replace trigger  DEPARTMENTS_BIU
    before insert or update on DEPARTMENTS
    for each row
begin
    if inserting and :new.deptno is null then
        :new.deptno := to_number(sys_guid(), 
          'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
    end if;
end;
/

create or replace trigger EMPLOYEES_BIU
    before insert or update on EMPLOYEES
    for each row
begin
    if inserting and :new.empno is null then
        :new.empno := to_number(sys_guid(), 
            'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
    end if;
end;
/

但是,当我尝试在 Oracle Apex 工作区中运行上述代码时,出现以下错误:

第 7 行错误:PLS-00103:遇到符号“/”

但是,当我在 Oracle Live SQL 空间(教程所在的位置)中运行相同的代码时,代码运行良好。那么我在 Oracle APEX 工作区中为什么会出现这样的错误?这很奇怪,因为我很确定语法是正确的,因为我从 Oracle Live 教程中复制并粘贴了上面的代码。

为方便起见,这里是上面链接中教程提供的代码,用于创建必要的表:

部门表

create table DEPARTMENTS (  
  deptno        number,  
  name          varchar2(50) not null,  
  location      varchar2(50),  
  constraint pk_departments primary key (deptno)  
);

EMPLOYEES 表

create table EMPLOYEES (  
  empno             number,  
  name              varchar2(50) not null,  
  job               varchar2(50),  
  manager           number,  
  hiredate          date,  
  salary            number(7,2),  
  commission        number(7,2),  
  deptno           number,  
  constraint pk_employees primary key (empno),  
  constraint fk_employees_deptno foreign key (deptno) 
      references DEPARTMENTS (deptno)  
);

我还深入学习了教程,只是在 Oracle Apex Workspace 中遇到了类似的错误,即 ORA-00933:运行以下代码时 SQL 命令未正确结束:

insert into departments (name, location) values
   ('Finance','New York');

insert into departments (name, location) values
   ('Development','San Jose');

我认为上面链接中的教程已经过时,因为 Oracle Apex Workspace 刚刚更新了它的版本并且教程的某些代码不再有效,但事实可能并非如此。

感谢任何帮助,谢谢!

【问题讨论】:

  • 见这里 -docs.oracle.com/cd/B19306_01/server.102/b14357/ch12004.htm IDK 关于 apex 的任何信息,但我猜是 apex 工作区执行单个语句?分别运行每个语句,并查看
  • @OldProgrammer 我试过了,效果很好,谢谢!显然 SQL 研讨会的工作区的 SQL 命令部分一次只能处理一条语句,这真的很糟糕,因为一次执行一条语句可能很乏味。
  • 很高兴它成功了。

标签: sql oracle oracle-apex-5


【解决方案1】:

使用 Apex,如果您想创建多个表(或触发器、函数、过程、视图等),请使用 SQL 脚本 - 请参阅下面的屏幕截图。

{1} 脚本编辑器(使用您的 CREATE TABLE 和 CREATE TRIGGER 语句)

输入所有代码,然后“运行”脚本。检查输出,并根据需要修改脚本。

{2} 输出

如果您更改表的 DDL 代码(然后再次运行脚本),您可能会收到错误消息 - 因为表已经存在。在这种情况下,您可以添加一行 DROP TABLE ... CASCADE CONSTRAINTS;对于脚本开头的每个表。 (但请谨慎使用,因为这将删除表,即使它们包含数据!)

对于 INSERT,您可以创建另一个 SQL 脚本(或者确实将所有 INSERTS 添加到包含 CREATE TABLE 语句的脚本中),或者您可以使用 SQL 命令并运行单个 INSERT(通过突出显示它们,然后单击运行按钮)。您还可以使用 SQL 命令并编写 BEGIN 和 END 来运行多个 INSERT;分别在 INSERT 之前和之后 - 请参阅下面的示例。

{SQL 命令,单个 INSERT:高亮并运行}

{SQL 命令,多个 INSERTS}

请注意,有一个“历史记录”选项卡(在 SQL 命令窗口中)。这可能非常有用,例如它可以为您节省大量打字等。

【讨论】:

    猜你喜欢
    • 2020-09-10
    • 2018-06-06
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多