gpt4 book ai didi

oracle - 获取具有默认值的参数列表

转载 作者:行者123 更新时间:2023-12-01 06:37:06 26 4
gpt4 key购买 nike

我使用 ALL_ARGUMENTS 来获取 oracle 10g 中的参数列表,但我找不到参数的默认值。我怎么办?

最佳答案

您可能需要按照下面的代码示例在 10g 中使用 plsql 编程。这个解决方案在某种意义上肯定是蛮力的,因为您基本上使用非常低级的原语编写函数/过程声明解析器的一部分。但是,正则表达式函数在 10g 中也不可用......

代码的要点是:

  • 迭代过程/函数声明的源代码行
  • 注意最近声明的例程的名称
  • 分析包含关键字“DEFAULT”的所有行,获取参数名称和默认值规范(代码示例中没有详细说明)。

  • 谨防陷阱:
  • 多行声明
  • 包含 C 风格注释开头字符串的 C 风格注释
    ( 啦/ * 等等/ 等等 **/)
  • 包含关键字的字符串文字

  • 希望无论如何都有帮助,最好的问候。

    编码:
    DECLARE
    l_arg_and_more VARCHAR2(400);
    l_current_unit VARCHAR2(400);
    l_default_spec VARCHAR2(400);
    l_offset_default BINARY_INTEGER;
    l_offset_eoname BINARY_INTEGER;
    BEGIN
    FOR i IN (
    select text
    from all_source
    where owner = '<name of owner>'
    and name = '<object name>'
    and type in ( 'PACKAGE', 'PROCEDURE', 'FUNCTION')
    and text not like '--%'
    order by line
    ) LOOP
    IF i.text LIKE '%FUNCTION%' OR i.text LIKE '%PROCEDURE%' THEN
    IF i.text LIKE '%FUNCTION%' THEN
    l_current_unit := LTRIM(SUBSTR(i.text, INSTR(i.text, 'FUNCTION') + LENGTH('FUNCTION')), ' ');
    l_offset_eoname := INSTR(l_current_unit, ' ');
    IF l_offset_eoname = 0 OR l_offset_eoname > INSTR(l_current_unit, '(') THEN
    l_offset_eoname := INSTR(l_current_unit, '(');
    END IF;
    IF l_offset_eoname <> 0 THEN
    l_current_unit := SUBSTR(l_current_unit, 1, l_offset_eoname-1);
    ELSE
    l_current_unit := 'unidentified';
    END IF;
    END IF;
    END IF;
    --
    IF i.text LIKE '%DEFAULT%' THEN
    l_offset_default := INSTR (i.text, 'DEFAULT');
    l_arg_and_more := SUBSTR(i.text, 1, l_offset_default - 1);
    l_default_spec := SUBSTR(i.text, l_offset_default + LENGTH('DEFAULT') + 1);
    --
    -- process l_arg_and_more to get the arg name, l_default_spec for the default value
    --
    END IF;
    END LOOP;
    END;

    关于oracle - 获取具有默认值的参数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13803099/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com