create table t_test(
a number(5) default 0 NOT NULL,
b varchar2(20),
c char(6) default f_setc not null);
其中:f_setc是自定议函数,执行时ORQCLE报:ORA-00984: 列在此处不允许,但如果我将f_setc换成系统函数如:to_char(123456)由可成功,但没足不了我的设计要求,请问如何才能用自定议函数作为表列的默认值?
函数要有返回值,f_setc返回值是什么?
楼主把f_setc 代码贴
这个函数的返回值是固定的吗,
to_char(123456)可以是因为这是个定值吧
f_setc函数是根据登录用户返回一个用户的数值代码,大致内容如下:
CREATE OR REPLACE FUNCTION f_setc RETURN VARCHAR2 IS
RESULT VARCHAR2(6);
v_user VARCHAR2(30);
BEGIN
v_user := sys_context('USERENV', 'SESSION_USER');
IF v_user = 'GYDS_TCTB' THEN
RESULT := sys_context('XXXXX', 'XXXX');
ELSE
SELECT substr(paramvalue, 1, 6)
INTO RESULT
FROM sys_param
WHERE paramname = 'v_sbh';
END IF;
RETURN(RESULT);
END f_setc;
如我将C列的默认值改为sys_context('SUPER', 'DWID')也没有问题,即可知使用系统函数是没有问题的,但我的应用只能用自定议函数实现,但是ORACLE不支持,图书管理系统论文 不知还有什么好办法。
用触发器吧
create or replace trigger tg_test
before insert on t_test
for each row
begin
if :new.c is null then
:new.c:=f_setc;
end if;
end tg_test;