H2 为什么我的别名不显示在信息\u SCHEMA.FUNCTION\u别名中?

H2 为什么我的别名不显示在信息\u SCHEMA.FUNCTION\u别名中?,h2,H2,我使用H2DBV1.4.182作为我的测试环境。它是生产供应商Oracle的替代品。我在测试环境中使用脚本创建了几个别名: CREATE ALIAS IF NOT EXISTS REGEXP_LIKE as $$ boolean regexpLike(String s, String p) { return java.util.regex.Pattern.compile(p).matcher(s).find(); } $$; CREATE ALIAS IF NOT EXISTS TO_NUMB

我使用H2DBV1.4.182作为我的测试环境。它是生产供应商Oracle的替代品。我在测试环境中使用脚本创建了几个别名:

CREATE ALIAS IF NOT EXISTS REGEXP_LIKE as $$ boolean regexpLike(String s, String p) { return java.util.regex.Pattern.compile(p).matcher(s).find(); } $$;

CREATE ALIAS IF NOT EXISTS TO_NUMBER as $$ long toNumber(String s) { return Long.valueOf(s); } $$;

CREATE ALIAS if NOT EXISTS fn_val_check3 for "fakedata.testutil.TestUtil.fn_val_check";
前两个别名显示在信息\u SCHEMA.FUNCTION\u别名表中,最后一个fn\u val\u check3不显示

SELECT ALIAS_NAME FROM INFORMATION_SCHEMA.FUNCTION_ALIASES;
给我两排

ALIAS_NAME  
TO_NUMBER
REGEXP_LIKE
我通过运行CREATE alias验证了H2在某处有另一个别名。。。直接在控制台中显示

CREATE ALIAS fn_val_check3 for "fakedata.testutil.TestUtil.fn_val_check";
Function alias "FN_VAL_CHECK3" already exists; SQL statement: CREATE ALIAS fn_val_check3 for "fakedata.testutil.TestUtil.fn_val_check" [90076-182] 90076/90076 (Help)

我正在使用一个验证组件来验证数据库中是否存在函数,这就是为什么我想知道。我是否遗漏了某些内容或这是已知的内容?

如果调用fn_val_check 3是类路径中的类,并且s处于启用状态,那么它是否有效?如果您的意思是在代码运行时调用函数,那么是的。一切都很好。我只是在函数的别名表中看不到别名。@ThomasMueller我目前的解决办法是在测试sql中使用select 1 from dual来验证函数是否存在,这就解决了我的问题。我无法重现这个问题。我尝试了这个方法,结果发现有两种方法。你能试试这个吗?如果不存在别名,则为java.lang.Long.parseLong创建test_2;是的,它也出现了。我能想到的唯一一件事是,别名所指的类在控制台中不可用。我试图用正确的类路径启动控制台,但似乎无法使该类始终获得CNF。查询名称在运行时有效。