You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取数据库中当前用户创建的所有PL/SQL确定性函数列表?

获取当前用户的PL/SQL确定性函数列表

嘿,这事儿不难,我给你几个实用的查询语句,帮你快速找出当前用户名下所有的PL/SQL确定性函数:

基础查询:独立确定性函数

如果你只需要独立函数(不属于任何包的函数)的基本信息,用这个查询就够了:

SELECT object_name AS function_name,
       created,
       last_ddl_time,
       status
FROM user_functions
WHERE deterministic = 'YES';
  • user_functions视图专门存储当前用户拥有的独立函数信息
  • deterministic = 'YES'过滤出标记为确定性的函数
  • 结果会返回函数名、创建时间、最后修改时间以及函数状态(有效/无效)

进阶查询:包含参数信息的函数列表

要是你还想查看函数的参数、返回类型等细节,可以结合user_arguments视图:

SELECT f.object_name AS function_name,
       a.argument_name,
       a.data_type,
       a.in_out,
       f.deterministic,
       f.status
FROM user_functions f
JOIN user_arguments a ON f.object_name = a.object_name
WHERE f.deterministic = 'YES'
ORDER BY f.object_name, a.position;

这个查询会把每个函数的输入/输出参数、参数类型都列出来,按函数名和参数顺序排序,方便你查看完整的函数签名。

完整查询:包含包内的确定性函数

上面的查询只覆盖了独立函数,如果你的函数是定义在PL/SQL包里的,得用user_procedures视图来补充:

-- 合并独立函数和包内函数的完整列表
SELECT object_name AS function_name,
       NULL AS package_name,
       created,
       last_ddl_time,
       status
FROM user_functions
WHERE deterministic = 'YES'
UNION ALL
SELECT procedure_name AS function_name,
       object_name AS package_name,
       created,
       last_ddl_time,
       status
FROM user_procedures
WHERE object_type = 'FUNCTION'
  AND deterministic = 'YES';
  • UNION ALL把两个查询的结果合并,没有去重(因为独立函数和包内函数不会重名冲突)
  • package_name列会显示函数所属的包名,独立函数这一列是NULL,方便你区分两种类型的函数

小提示

  • 普通用户默认都能访问user_*开头的数据字典视图,因为这些视图只展示当前用户拥有的对象,不需要额外权限
  • 记住:Oracle里的DETERMINISTIC是一个优化提示,标记为YES的函数应该保证相同输入永远返回相同输出,且不依赖外部状态(比如当前时间、表数据变化等),不然优化器可能会产生错误的执行计划

内容的提问来源于stack exchange,提问作者nnenthusiast

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 15:17:50