我在一个包里面写了一个函数,用来设置当某些插入进来的字段为空值时,将他的值默认为了0或1。 create or replace package body COMMON_FUNCTION is
PRAGMA SERIALLY_REUSABLE;
/*递归域关系表所有数据移到新库中*/
PROCEDURE INSERT_DOMAINRELATION(DOMAIN DOMAIN_TYPE) IS
。。
。。
。。
END INSERT_DOMAINRELATION;
/*判断是否为数字*/
FUNCTION ISNUMERIC(NUM VARCHAR2) RETURN BOOLEAN AS
。。
。。
END ISNUMERIC;
/*非数字性字符处理*/
FUNCTION CHECKNUMBER(NUM VARCHAR2,COLUMN_NAME VARCHAR2) RETURN NUMBER AS
BEGIN
IF NUM IS NULL THEN
IF COLUMN_NAME='isalarm_account' OR COLUMN_NAME='child_num' THEN
RETURN 0;
END IF;
IF COLUMN_NAME='state' OR COLUMN_NAME='login_no' OR COLUMN_NAME='isowe' THEN
RETURN 1;
END IF;
END IF;
RETURN TO_NUMBER(NUM);
/*EXCEPTION
WHEN OTHERS THEN
RETURN 0;*/
END CHECKNUMBER;
END COMMON_FUNCTION;红色的就是报错的函数然后调用程序如下:
FOR MY_USERINFO IN USERINFO LOOP
SELECT ID INTO ACCOUNTID FROM ACCOUNT WHERE NAME=MY_USERINFO.NAME;
--SELECT USER_INFO_ID.NEXTVAL INTO NEXT_ID FROM DUAL;
INSERT INTO USER_INFO
VALUES(ACCOUNTID,
MY_USERINFO.idcard,
MY_USERINFO.cellphone,
MY_USERINFO.phone,
MY_USERINFO.address,
MY_USERINFO.main_phone,
COMMON_FUNCTION.CHECKNUMBER(MY_USERINFO.isalarm_account,'isalarm_account'),
COMMON_FUNCTION.CHECKNUMBER(MY_USERINFO.state,'state'),
COMMON_FUNCTION.CHECKNUMBER(MY_USERINFO.child_num,'child_num'),
MY_USERINFO.init_password,
COMMON_FUNCTION.CHECKNUMBER(MY_USERINFO.login_no,'login_no'),
MY_USERINFO.email,
COMMON_FUNCTION.CHECKNUMBER(MY_USERINFO.isowe,'isowe'),
MY_USERINFO.create_time,
sysdate,
MY_USERINFO.bookin,
0--用户区域
);
END LOOP;
但是执行后系统就报错:
ORA-06534: 无法访问可连续重用的程序包 "PLSQL.COMMON_FUNCTION",希望高手指点一下,为什么会报这样的错。谢谢了。
PRAGMA SERIALLY_REUSABLE;
/*递归域关系表所有数据移到新库中*/
PROCEDURE INSERT_DOMAINRELATION(DOMAIN DOMAIN_TYPE) IS
。。
。。
。。
END INSERT_DOMAINRELATION;
/*判断是否为数字*/
FUNCTION ISNUMERIC(NUM VARCHAR2) RETURN BOOLEAN AS
。。
。。
END ISNUMERIC;
/*非数字性字符处理*/
FUNCTION CHECKNUMBER(NUM VARCHAR2,COLUMN_NAME VARCHAR2) RETURN NUMBER AS
BEGIN
IF NUM IS NULL THEN
IF COLUMN_NAME='isalarm_account' OR COLUMN_NAME='child_num' THEN
RETURN 0;
END IF;
IF COLUMN_NAME='state' OR COLUMN_NAME='login_no' OR COLUMN_NAME='isowe' THEN
RETURN 1;
END IF;
END IF;
RETURN TO_NUMBER(NUM);
/*EXCEPTION
WHEN OTHERS THEN
RETURN 0;*/
END CHECKNUMBER;
END COMMON_FUNCTION;红色的就是报错的函数然后调用程序如下:
FOR MY_USERINFO IN USERINFO LOOP
SELECT ID INTO ACCOUNTID FROM ACCOUNT WHERE NAME=MY_USERINFO.NAME;
--SELECT USER_INFO_ID.NEXTVAL INTO NEXT_ID FROM DUAL;
INSERT INTO USER_INFO
VALUES(ACCOUNTID,
MY_USERINFO.idcard,
MY_USERINFO.cellphone,
MY_USERINFO.phone,
MY_USERINFO.address,
MY_USERINFO.main_phone,
COMMON_FUNCTION.CHECKNUMBER(MY_USERINFO.isalarm_account,'isalarm_account'),
COMMON_FUNCTION.CHECKNUMBER(MY_USERINFO.state,'state'),
COMMON_FUNCTION.CHECKNUMBER(MY_USERINFO.child_num,'child_num'),
MY_USERINFO.init_password,
COMMON_FUNCTION.CHECKNUMBER(MY_USERINFO.login_no,'login_no'),
MY_USERINFO.email,
COMMON_FUNCTION.CHECKNUMBER(MY_USERINFO.isowe,'isowe'),
MY_USERINFO.create_time,
sysdate,
MY_USERINFO.bookin,
0--用户区域
);
END LOOP;
但是执行后系统就报错:
ORA-06534: 无法访问可连续重用的程序包 "PLSQL.COMMON_FUNCTION",希望高手指点一下,为什么会报这样的错。谢谢了。
解决方案 »
- 求助:Oracle SQL Developer 字体 Courier New 中文显示不正常
- ORA-01280: Fatal LogMiner Error.
- Oracle数据写入的问题
- 问个基础点的问题关于>=以及>的问题?
- 比较难搞的SQL 语句
- 求助~~sql语句
- 问有关存储过程中case的用法
- [oracle 9i的使用者注意了]请留下MSN 和 QQ,谢谢。
- 在表中有一字段长度为Varchar2(20),但却只能输入10个中文字符!可输入20个英文字符!如何能该字段容纳20个中文字符!急急急!请大侠帮忙
- form 在运行过程中出现 frm-41000 错误,怎么解决?
- oracle中的数据同步
- 判断一条指定内容修改,请给个思路,谢谢
你包里面是不是有用type type_name is?你尝试去掉SERIALLY_REUSABLE pragma,再看看行不?
去掉了SERIALLY_REUSABLE pragma 就可以调用了,真是多谢搂上几位了。