【 使用环境 】 测试环境
【 OB or 其他组件 】
【 使用版本 】开源OceanBase4.5
【问题描述】根据这个文档来创建
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004478381
创建外部存储函数,执行日志如下
bclient(root@mq_t1)[test]> select version()
→ ;
±-----------------------------+
| version() |
±-----------------------------+
| 5.7.25-OceanBase_CE-v4.5.0.0 |
±-----------------------------+
1 row in set (0.001 sec)
开启Java的外部存储函数功能
client(root@sys)[oceanbase]> SHOW PARAMETERS LIKE ‘ob_enable_java_udf’;
±------±---------±-----------±---------±-------------------±----------±------±----------------------------±---------±-------±--------±------------------±--------------±----------+
| zone | svr_type | svr_ip | svr_port | name | data_type | value | info | section | scope | source | edit_level | default_value | isdefault |
±------±---------±-----------±---------±-------------------±----------±------±----------------------------±---------±-------±--------±------------------±--------------±----------+
| zone1 | observer | 10.60.0.85 | 2882 | ob_enable_java_udf | BOOL | False | Enable or disable java udf. | OBSERVER | TENANT | DEFAULT | DYNAMIC_EFFECTIVE | False | 1 |
±------±---------±-----------±---------±-------------------±----------±------±----------------------------±---------±-------±--------±------------------±--------------±----------+
1 row in set (0.008 sec)
obclient(root@sys)[oceanbase]> ALTER SYSTEM SET ob_enable_java_udf = TRUE SCOPE = BOTH;
Query OK, 0 rows affected (0.015 sec)
obclient(root@sys)[oceanbase]> SHOW PARAMETERS LIKE ‘ob_enable_java_udf’;
±------±---------±-----------±---------±-------------------±----------±------±----------------------------±---------±-------±--------±------------------±--------------±----------+
| zone | svr_type | svr_ip | svr_port | name | data_type | value | info | section | scope | source | edit_level | default_value | isdefault |
±------±---------±-----------±---------±-------------------±----------±------±----------------------------±---------±-------±--------±------------------±--------------±----------+
| zone1 | observer | 10.60.0.85 | 2882 | ob_enable_java_udf | BOOL | True | Enable or disable java udf. | OBSERVER | TENANT | DEFAULT | DYNAMIC_EFFECTIVE | False | 0 |
±------±---------±-----------±---------±-------------------±----------±------±----------------------------±---------±-------±--------±------------------±--------------±----------+
1 row in set (0.007 sec)
已经打包了对应的jar包
obclient(root@sys)[oceanbase]> CALL DBMS_JAVA.LOADJAVA(’/data/ob-lib/sm4_udf.jar’, ‘-resolve’, ‘-force’);
Query OK, 0 rows affected (0.041 sec)
obclient(root@sys)[oceanbase]> CREATE FUNCTION sm4_encrypt(plain_text VARCHAR(1024), key VARCHAR(64))
→ RETURNS VARCHAR(2048)
→ PROPERTIES (
→ type = ‘odpsjar’,
→ file = ‘sm4_udf.jar’,
→ symbol = ‘SM4UDF.evaluate_encrypt’
→ );
Query OK, 0 rows affected (0.049 sec)
obclient(root@sys)[oceanbase]> CREATE FUNCTION sm4_decrypt(cipher_text VARCHAR(2048), key VARCHAR(64))
→ RETURNS VARCHAR(1024)
→ PROPERTIES (
→ type = ‘odpsjar’,
→ file = ‘sm4_udf.jar’,
→ symbol = ‘SM4UDF.evaluate_decrypt’
→ );
Query OK, 0 rows affected (0.043 sec)
obclient(root@sys)[oceanbase]> SHOW FUNCTION STATUS;
±----------±------------±---------±-----------±---------------------------±---------------------------±--------------±--------±---------------------±---------------------±-------------------+
| Db | Name | Type | Definer | Modified | Created | Security_type | Comment | character_set_client | collation_connection | Database Collation |
±----------±------------±---------±-----------±---------------------------±---------------------------±--------------±--------±---------------------±---------------------±-------------------+
| oceanbase | sm4_decrypt | FUNCTION | ‘root’@’%’ | 2026-06-12 15:30:23.384284 | 2026-06-12 15:30:23.384284 | DEFINER | NULL | utf8mb4 | utf8mb4_general_ci | utf8mb4_general_ci |
| oceanbase | sm4_encrypt | FUNCTION | ‘root’@’%’ | 2026-06-12 15:30:19.009264 | 2026-06-12 15:30:19.009264 | DEFINER | NULL | utf8mb4 | utf8mb4_general_ci | utf8mb4_general_ci |
±----------±------------±---------±-----------±---------------------------±---------------------------±--------------±--------±---------------------±---------------------±-------------------+
2 rows in set (0.055 sec)
obclient(root@sys)[oceanbase]> SELECT sm4_encrypt(‘Hello OceanBase SM4!’, ‘1234567890123456’) AS encrypted;
ERROR 1235 (0A000): Function sm4_encrypt not supported
【复现路径】现在函数已经创建成功了,使用过程中就报错,不知道是什么问题
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!