sql - 第 7 行错误:PLS-00103:遇到符号“/” - Oracle Live 教程
问题描述
我在遵循以下链接中的 Oracle Live Apex 教程时遇到问题:
具体来说,它适用于我尝试在我的表中创建触发器作为该教程的一部分。我复制并粘贴到我的 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)
);
员工表
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 刚刚更新了它的版本,并且一些教程的代码不再有效,但情况可能并非如此。
任何帮助表示赞赏,谢谢!
解决方案
使用 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 命令窗口中)。这可能非常有用,例如它可以为您节省大量打字等。
推荐阅读
- excel - 如何从 URL 保存 xlsm 文件
- postgresql - 使用 api-platform graphql 查询读取空间点类型
- c++ - std::vector 和移动语义
- vscode-settings - 在 vim vscode 扩展中是否有特定的键可以输入一个字符并退出插入模式?
- sql - Sequelize:如何查询至少一个关联在 ids 数组中的行
- typescript - Webpack 模块加载与常量冲突
- python - 如何将此 python 函数转换为 c++?
- firebase - firebase登录方法无法在firebase控制台中保存提供者
- node.js - 节点/反应:我无法使用 multer 上传带有帖子的图像
- python - 比较孪生网络的嵌入