【问题标题】:Error in Oracle insert stored procedureOracle插入存储过程中的错误
【发布时间】:2016-08-27 03:12:29
【问题描述】:

使用 SQL Developer 在 Oracle 中插入存储过程语句:

CREATE OR REPLACE PROCEDURE T_Department_INSERT 
AS 
BEGIN 
    insert INTO T_Department(dept_id, dept_name, dept_location, manager_id)
    values(select case count(*) when 0 then 1 else max(dept_id) + 1 (end.from T_Department),
           par_dept_id, par_dept_name, par_dept_location, par_manager_id);
      NULL;
END T_Department_INSERT;

【问题讨论】:

  • 1) 不要混用INSERT INTO VALUES/SELECT 语法,2) 避免MAX(...) + 1,它不能很好地扩展,考虑使用SEQUENCE
  • 感谢您的回复,您可以在编辑后发布代码吗?提前致谢
  • 请发布数据示例,说明您的程序应该做什么
  • 好吧,我使用 sql developer,我创建了名为 'T_Department' 的新表有 'dept_id,dept_name,dept_location,manager_id' 我想创建一个存储过程以使用此代码插入新行“CREATE OR替换过程 T_Department_INSERT 作为开始插入 T_Department(dept_id,dept_name,dept_location,manager_id)值(选择案例计数(*)当 0 然后 1 否则最大(dept_id)+1(end.from T_Department),par_dept_id,par_dept_name,par_dept_location,par_manager_id ); NULL; END T_Department_INSERT;"并显示错误

标签: oracle stored-procedures insert


【解决方案1】:

您使用的工具 (SQL Developer) 对正确答案没有影响。这是一种可能性:

    CREATE TABLE t_department
    (
       dept_id         INTEGER
     , dept_name       VARCHAR2 (20)
     , dept_location   VARCHAR2 (100)
     , manager_id      INTEGER
    );

    CREATE SEQUENCE t_department_seq;

    CREATE OR REPLACE TRIGGER t_department_trg
       BEFORE INSERT
       ON t_department
       REFERENCING NEW AS new OLD AS old
       FOR EACH ROW
    BEGIN
       :new.dept_id   := t_department_seq.NEXTVAL;
    END t_department_trg;

    CREATE OR REPLACE PROCEDURE t_department_insert (
       p_dept_name       IN t_department.name%TYPE
     , p_dept_location   IN t_department.location%TYPE
     , p_manager_id      IN t_department.manager_id%TYPE
    )
    AS
    BEGIN
       INSERT INTO t_department (
                 dept_name, dept_location, manager_id
                   )
            VALUES (p_dept_name, p_dept_location, p_manager_id);
    END t_department_insert;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    相关资源
    最近更新 更多