oracle - 我无法执行我在 oracle 中使用 sql developer 创建的这个过程,可能是语法错误?还是可以在程序内部使用更新?
问题描述
我要做的是......
“编写一个程序来修改部门的位置。该程序将作为 IN 参数获取
- 要更改到位置的部门编号 (department_id)
- 该部门的新位置(更改 location_id,但将城市名称作为参数)“
重要说明(我在 ORACLE 的 HR 默认模式中工作)
我有这个 Pl/SQL 代码
SET SERVEROUTPUT ON
BEGIN
MOD_LOCALI(&n_dep, &nueva_local);
END;
我正在尝试创建这个存储过程
create or replace PROCEDURE MOD_LOCALI
(
N_DEP IN NUMBER
, NUEVA_LOCAL IN VARCHAR2
) AS
BEGIN
UPDATE departments d
SET d.location_id = (SELECT d.location_id
FROM departments d
INNER JOIN locations l
ON d.location_id = l.location_id
WHERE l.city = NUEVA_LOCAL;
)
WHERE d.department_id = N_DEP;
DBMS_OUTPUT.PUT_LINE( 'El departmento con número ' || N_DEP || ', se ha mudado a ' || NUEVA_LOCAL);
END MOD_LOCALI;
但是当我执行保存它的过程时(我在 oracle sql developer 中按下编译按钮),我得到了这些错误
就是这样,提前谢谢
解决方案
从子查询中删除分号并在“end mod_locali;”之后添加“/”
https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=b6b8371c5ed33b733681c5a436f44982
推荐阅读
- php - 插入多行记录 Codeignite
- c++ - 通过 const 引用传递向量时出现 Intellisense 错误(但项目构建)
- java - 如何停止触发警报的响铃?
- r - r计算数据框中多列的综合得分和可靠性
- c++ - 使用 reinterpret_cast 以外的方法从地址以十六进制格式获取整数
- r - 如果列包含特定值,则将列名分配为单元格值
- c++ - 为什么运算符重载需要引用?
- javascript - 当我删除或拼接数组上的元素时,有什么方法可以停止触发深度监视?
- python - TypeError:“模块”对象不可下标(Python)
- java - 从列表中删除几乎相同的字符串(名词复数形式)