在 PL/SQL 中动态声明变量

Posted

技术标签:

【中文标题】在 PL/SQL 中动态声明变量【英文标题】:Declaring variables dynamically within PL/SQL 【发布时间】:2017-07-20 11:45:03 【问题描述】:

程序是从输入字符串中提取数字。例如:ab123cde4f。现在,如果只有输入字符串有数字,那么在检查 Begin..End 块中的数字后,我将声明一个数字数据类型的变量(以提取数字)。如果没有数字,我不会声明任何变量,而只是给出输入字符串不包含任何数字的 dbms 输出。建议一个 pl/sql 块。

【问题讨论】:

在堆栈溢出时建议您先尝试编写一些代码 @tapabrata 为什么你不想声明任何变量? 显然正确的方法是声明一个数字数据类型的变量,但如果输入不包含任何数字,则不使用它 可以在 PL/SQL 程序的 Begin End 块中声明任何变量吗?我完全同意,正确的方法是声明一个数字数据类型的变量,如果我的条件成立,就使用它。 【参考方案1】:

如果您的问题是,是否可以在BEGIN...END block 中声明变量。不,你总是需要一个 declare 块。

但是,您也可以在 BEGIN...END 块内使用声明。

BEGIN
    IF 1=1 THEN
        DECLARE
            v_chr VARCHAR2(100) := 'hello';
        BEGIN
            dbms_output.put_line(v_chr);
        END;
    ELSE
        DECLARE
            v_chr VARCHAR2(100) := 'world';
        BEGIN
            dbms_output.put_line(v_chr);
        END;
    END IF;
END;

不过我不建议这样做,只是定义一个变量更KISS

【讨论】:

以上是关于在 PL/SQL 中动态声明变量的主要内容,如果未能解决你的问题,请参考以下文章

如何像在 T-SQL 中一样在 PL/SQL 中声明和使用变量?

声明变量的 PL/SQL 编译错误

这个 PL/SQL 有啥问题?绑定变量 * 未声明

PL/SQL复合变量

PL/SQL程序设计流程控制

在 DB2 PL/SQL 匿名块中声明局部变量和声明继续处理程序会导致错误?