重庆思庄Oracle、、PostgreSQL、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 160|回复: 1

达梦创建的过程函数在dba_procedures中查找

[复制链接]
发表于 2025-5-31 12:35:17 | 显示全部楼层 |阅读模式
我们通过create or replace procedure xx方式创建的函数过程,可以通过 user_procedures中查找,不过,是使用 object_name='xx'方式查找,不是使用 procedure_name like 'xx'查找

比如:


SQL> set schema sch_factory;
操作已执行
已用时间: 0.582(毫秒). 执行号:0.
SQL>
SQL>
SQL> CREATE OR REPLACE PROCEDURE P_TEST ()
2   IS
3   BEGIN
4     NULL;
5   END;
6   /
操作已执行
已用时间: 13.329(毫秒). 执行号:34302.



SQL> select object_Name,procedure_name,object_id,OBJECT_TYPE
2    from user_PROCEDURES
3    where object_name='P_TEST';

行号       OBJECT_NAME PROCEDURE_NAME OBJECT_ID   OBJECT_TYPE
---------- ----------- -------------- ----------- -----------
1          P_TEST      NULL           83887123    PROCEDURE

已用时间: 3.499(毫秒). 执行号:34305.
SQL>


22921683a86ec07732.png




回复

使用道具 举报

 楼主| 发表于 2025-5-31 12:46:58 | 显示全部楼层
看了user_procedures的定义:看来除包外,过程名字直接使用null。

SELECT
    O.NAME AS       "OBJECT_NAME",
    NULL AS         "PROCEDURE_NAME",
    O.ID AS         "OBJECT_ID",
    1 AS            "SUBPROGRAM_ID",
    NULL AS         "OVERLOAD",
    (
     CASE O.INFO1 & 0x01
         WHEN 1 THEN
             'PROCEDURE'
         WHEN 0 THEN
             'FUNCTION'
         ELSE
             'UNKNOWN'
     END) AS        "OBJECT_TYPE",
    (
     CASE O.INFO2
         WHEN 65 THEN
             'YES'
         ELSE
             'NO'
     END) AS        "AGGREGATE",
    (
     CASE O.INFO1 & 0x10
         WHEN 0 THEN
             'NO'
         ELSE
             'YES'
     END) AS        "PIPELINED",
    CLS_SCH.NAME AS "IMPLTYPEOWNER",
    CLS_O.NAME AS   "IMPLTYPENAME",
    'YES' AS        "PARALLEL",
    'NO' AS         "INTERFACE",
    (
     CASE O.INFO1 & 0x40
         WHEN 0 THEN
             'NO'
         ELSE
             'YES'
     END) AS        "DETERMINISTIC",
    (
     CASE O.INFO1 & 0x20
         WHEN 0 THEN
             'DEFINER'
         ELSE
             'CURRENT_USER'
     END) AS        "AUTHID"
FROM
    TSYSOBJECTS AS O
    LEFT JOIN TSYSOBJECTS AS CLS_O ON CLS_O.ID = CAST(O.INFO3 AS INT)
    LEFT JOIN TSYSOBJECTS AS CLS_SCH ON CLS_O.SCHID = CLS_SCH.ID
WHERE
    (O."TYPE$" = 'SCHOBJ'
         AND O."SUBTYPE$" = 'PROC'
         AND O.PID = SYS_CONTEXT('USERENV', 'CURRENT_USERID'))
UNION ALL
SELECT
    O_PKG.NAME AS  "OBJECT_NAME",
    I.NAME AS      "PROCEDURE_NAME",
    I.PKGID AS     "OBJECT_ID",
    I.MTDID + 1 AS "SUBPROGRAM_ID",
    OVERLOAD,
    'PACKAGE' AS   "OBJECT_TYPE",
    AGGREGATE,
    PIPELINED,
    IMPLTYPEOWNER,
    IMPLTYPENAME,
    PARALLEL,
    INTERFACE,
    DETERMINISTIC,
    (
     CASE O_PKG.INFO1 & 0x20
         WHEN 0 THEN
             'DEFINER'
         ELSE
             'CURRENT_USER'
     END) AS       "AUTHID"
FROM
    SYS.SYSPKGPROCINFOS AS I,
    TSYSOBJECTS AS O_PKG,
    TSYSOBJECTS AS O_SCH
WHERE
    (I.PKGID = O_PKG.ID
         AND O_SCH.ID = O_PKG.SCHID
         AND SYS_CONTEXT('USERENV', 'CURRENT_USERID') = O_SCH.PID)




回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2025-7-10 09:21 , Processed in 0.088472 second(s), 23 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表