ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

关于ORA-30625: method dispatch on NULL SELF argument is disallowed

关于ORA-30625: method dispatch on NULL SELF argument is disallowed

文章目录

  • 1. 创建type
  • 2. 创建测试表
  • 3. 创建type body
  • 4. insert 测试数据
  • 5. 引用type并执行
  • 6.原因
  • 7. 正确的方式

JOB 频繁出现ORA-30625:method dispatch on NULL SELF argument is disallowed。

这篇文章将对此错误进行重现并分析其原因

1. 创建type

CREATE OR REPLACE TYPE EMPLOYEE_TP AS OBJECT(EMPLOYEE_ID NUMBER, IN_DATE DATE, MGR_ID NUMBER(1), DEPT_NO NUMBER(1), member procedure delete_employee_id(n in number) ); 

2. 创建测试表

CREATE TABLE EMPLOYEE OF EMPLOYEE_TP(EMPLOYEE_ID PRIMARY KEY 
); 

3. 创建type body

create or replace type body EMPLOYEE_TP as member procedure delete_employee_id(n in number) is begin DELETE FROM EMPLOYEE E WHERE E.EMPLOYEE_ID = n; end; 
end; 

4. insert 测试数据

insert into EMPLOYEE values (EMPLOYEE_TP(1,TO_DATE('12/12/12','DD-MM-YY'),0,0)); 

5. 引用type并执行

declare 
x EMPLOYEE_TP; 
begin 
x.delete_employee_id('1');
end;

输出结果如下:

ORA-30625: method dispatch on NULL SELF argument is disallowed
ORA-06512: at line 4
30625. 00000 -  "method dispatch on NULL SELF argument is disallowed"
*Cause:    A member method of a type is being invoked with a NULL SELFargument.
*Action:   Change the method invocation to pass in a valid self argument.

6.原因

User-defined types, just like collections, are atomically null, until you initialize the object by calling the constructor for its object type
用户定义的type,就像集合一样,在原子上是null的,直到通过调用其对象类型的构造函数来初始化该对象

也就是说对于自定义的type,需要使用构造函数进行初始化后才能调用其方法

所以,你需要这样做:

7. 正确的方式

declare 
x employee_tp :=NEW employee_tp(null,null,null,null);  
begin 
x.delete_employee_id('1');
end;

结果输出如下:

已順利完成 PL/SQL 程序.
返回列表