You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PL/SQL中使用NEW关键字与不使用创建对象的差异

在Oracle PL/SQL中创建对象时,使用NEW和不使用NEW的处理差异?

在Oracle PL/SQL中,使用NEW关键字和直接调用对象类型名来创建对象,Oracle的处理逻辑完全一致,没有功能差异——两种写法最终都会调用对应的构造函数(默认构造函数或自定义构造函数)完成对象实例化。

示例说明

首先定义自定义对象类型及类型体(修正了原示例中的语法错误):

CREATE TYPE emp_object AS OBJECT(
    emp_no NUMBER,
    emp_name VARCHAR2(50),
    salary NUMBER,
    manager NUMBER,
    CONSTRUCTOR FUNCTION emp_object(p_emp_no NUMBER, p_emp_name VARCHAR2,
        p_salary NUMBER) RETURN SELF AS RESULT,
    MEMBER PROCEDURE insert_records,
    MEMBER PROCEDURE display_records);
/

CREATE OR REPLACE TYPE BODY emp_object AS
    CONSTRUCTOR FUNCTION emp_object(p_emp_no NUMBER,p_emp_name VARCHAR2,
        p_salary NUMBER)
    RETURN SELF AS RESULT
    IS
    BEGIN
        Dbms_output.put_line('Constructor fired..');
        SELF.emp_no:=p_emp_no;
        SELF.emp_name:=p_emp_name;
        SELF.salary:=p_salary;
        SELF.manager:=1001;
        RETURN;
    END;
    MEMBER PROCEDURE insert_records
    IS
    BEGIN
        INSERT INTO emp VALUES(emp_no, emp_name, salary, manager);
    END;
    MEMBER PROCEDURE display_records
    IS
    BEGIN
        Dbms_output.put_line('Employee Name:'||emp_name);
        Dbms_output.put_line('Employee Number:'||emp_no);
        Dbms_output.put_line('Salary:'||salary);
        Dbms_output.put_line('Manager:'||manager);
    END;
END;
/

不使用NEW创建对象

DECLARE
    guru_emp_det emp_object;
BEGIN
    guru_emp_det:=emp_object(1005,'RRR',20000,1000);
    guru_emp_det.display_records;
    guru_emp_det.insert_records;
    COMMIT;
END;
/

使用NEW创建对象

DECLARE
    guru_emp_det emp_object;
BEGIN
    guru_emp_det:= new emp_object(1005,'RRR',20000,1000);
    guru_emp_det.display_records;
    guru_emp_det.insert_records;
    COMMIT;
END;
/

关键结论

  1. 两种写法都会触发构造函数的执行:运行上述两段PL/SQL代码,控制台都会输出Constructor fired..,说明自定义构造函数被成功调用。
  2. 功能完全等价:无论是否使用NEW,最终生成的对象实例、执行的逻辑、对数据库的操作(如示例中的插入数据)都完全一致。
  3. 语法来源差异:NEW是SQL标准规定的对象实例化语法,Oracle提供该写法以兼容标准;而省略NEW是Oracle PL/SQL的简化语法,为开发提供便捷。

内容的提问来源于stack exchange,提问作者nightfox79

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 20:45:30