这是尝试使用增加列中值的函数来测试 VIRTUAL 列的使用。
我正在使用一个函数,该函数将返回当前年份的最后两位数字,并用连字符连接,后跟表列中定义为虚拟列的下一个最大值。
当我将记录插入表中时,它确实插入成功。但是,当我查询记录时,出现以下错误
ORA-00036: 超出最大递归 SQL 级别数 (50)
我的问题是,是否有可能实现增加值(使用 VIRTUAL 列的自定义增量或者这种尝试是微不足道的?
下面的函数首先通过取消注释部分来编译,在创建表时,第一个 SQL 块被注释,我使用第二个 SQL 块
功能
CREATE OR REPLACE FUNCTION test_func (
p_empl_id NUMBER,
empl_nm VARCHAR2)
RETURN VARCHAR2
DETERMINISTIC
IS
return_value VARCHAR2(32);
BEGIN
return_value := NULL;
-- SELECT TO_CHAR (SYSDATE, 'YY')
-- || '-'
-- || LPAD (
-- TO_CHAR (NVL (MAX (TO_NUMBER (SUBSTR (001, 5))), 0) + 1),
-- 5,
-- '0') into return_value
-- FROM dual;
SELECT TO_CHAR (SYSDATE, 'YY')
|| '-'
|| LPAD (
TO_CHAR (NVL (MAX (TO_NUMBER (SUBSTR (test_col, 5))), 0) + 1),
5,
'0')
INTO return_value
FROM test_table
WHERE SUBSTR (test_col, 1, 2) = TO_CHAR (SYSDATE, 'YY');
RETURN return_value;
END;
/
表结构
CREATE TABLE test_table
(
empl_id NUMBER,
empl_nm VARCHAR2 (50),
monthly_sal NUMBER (10, 2),
bonus NUMBER (10, 2),
test_col AS (test_func (empl_id, empl_nm)) VIRTUAL
);
插入语句
INSERT INTO test_table (empl_id,
empl_nm,
monthly_sal,
bonus)
WITH data
AS (SELECT 100 empl_id,
'AAA' empl_nm,
20000 monthly_sal,
3000 bonus
FROM DUAL)
SELECT *
FROM data;
我尝试使用以下 SQL 使用序列,但是,每次我从表中执行 SQL 语句时,都会插入序列值
SELECT TO_CHAR (SYSDATE, 'YY')
|| '-'
|| '000'
|| test_virtual_sequence.NEXTVAL
FROM DUAL;