【问题标题】:How to access a variable in stored procedure into a sql query如何将存储过程中的变量访问到sql查询中
【发布时间】:2015-06-16 16:30:44
【问题描述】:

我想访问存储过程中存在的变量

例如

Create or Replace package body ABC
as 

    Procedure XYZ 
    as
    var Number;
    var := 2+3

    END XYZ

END ABC

现在我想在 select 语句中访问这个变量 var。调用 body.procedure.variable 名称工作? 例如

select something as new_variable from table_name where ABC.XYZ.var > 10;

【问题讨论】:

  • 然后使用函数或者返回参数。

标签: sql oracle stored-procedures plsql


【解决方案1】:

只有在包头中声明了包变量时,您才能从外部查询访问包变量。

CREATE OR REPLACE PACKAGE TEST is

var  VARCHAR2(10);
 /*or use the function*/
FUNCTION get_var RETURN VARCHAR2;
END TEST;

您可以在 PL/SQL 中访问 yourSchema.test.var

DECLARE
my_var yourSchema.test.var%TYPE;
BEGIN
my_var := yourSchema.test.var;
END;

或者通过函数获取SQL中var的值;

select yourSchema.test.get_var from dual;

在你的包体中,你可以在加载时初始化 var 的值或使用函数返回值。

【讨论】:

    【解决方案2】:

    您可以在包中添加以下函数并使用 select from dual 调用它:

        create or replace function CHECK_FUNC
        return number
        AS
        var number;
        BEGIN
        var := 2+3;
        return var;
        END CHECK_FUNC;
        /
    Function created.     
    
    SQL> select 10 from dual where 10 > (select check_func from dual);
      -- 10 > (2+3) condition satisfied. Hence '10' is returned.                                                                                                
    
            10                                                                                                                  
    ----------                                                                                                                  
            10                                                                                                                  
    
    SQL> select 10 from dual where 10 < (select check_func from dual);                                                          
            --10 < (2+3) condition NOT satisfied. Hence no rows returned.                                                                                                                        
    no rows selected  
    

    还有几个例子:

     select 'SOMETHING' from dual where 10 > (select check_func from dual); 
    
        'SOMETHIN                                                                                                                   
        ---------                                                                                                                   
        SOMETHING     
    
    
    select 'SOMETHING' from dual where 10 < (select check_func from dual); 
    
    no rows selected 
    

    【讨论】:

    • 包已经存在,我只需要从中访问一个变量。所以我相信在标题中声明它是唯一的选择
    • 我相信你想在 select 中使用变量 value(check_func=5) 然后你可以在包中使用一个函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多