在RETURN PL / SQPL上为变量分配值

时间:2019-04-25 07:19:21

标签: oracle plsql plsql-package

有没有一种方法可以在PL / SQL oracle中实现?

            List<Item> items = new List<Item>();
            items = CreateData(items); // fill with dummy items
            List<Filter> filters = new List<Filter>();
            filters = CreateFilter(filters); // fill with dummy items
            string[,] target = new string[items.Count,filters.Count];

            int row = 0, col = 0;
            foreach (var item in items)
            {
                foreach (var filter in filters)
                {
                    target[row, col] = GetPropertyValue(item, filter.PropertyName);
                    row++;
                }
                row = 0;
                col++;

            }

当我尝试执行此操作时,将出现编译错误。如果无法做到这一点,请提出一个更好的替代方法,而不是

    RETURN (return_status:=1);

4 个答案:

答案 0 :(得分:2)

当我们执行RETURN时,过程在那点终止,控制流传递给调用程序。因此,此构造中将没有任何价值……

 RETURN (return_status:=1);

…,因为在返回之后,程序单元中的任何内容都无法对return_status起作用。

  

这是一个函数,return_status是一个OUT参数

这就是问题的根源:糟糕的设计。返回一个值或将其作为OUT参数,但不能同时返回。在PL / SQL中,公认的做法是一个函数返回一个值并且没有OUT参数。只有过程(没有RETURN)具有OUT参数。

所以您的选择是:

  1. return 1且没有OUT参数
  2. 设置OUT参数= 1并返回其他内容
  3. 改为使其成为程序

答案 1 :(得分:0)

我不明白问题是什么?

如果要返回值return_status,则第二个选项就很好(如果您确实在进行硬编码分配,则可以只返回1。

我想也许您实际上有一个外部变量return_status,您正试图通过调用此函数来更改其值。在这种情况下,请使用过程并将return_status设置为IN OUT变量(甚至可能是OUT)。

答案 2 :(得分:0)

AFAIK,您无法在Oracle FUNCTIONS RETURN语句中分配值。

在Oracle文档中,语法应为

  

返回[[((表达式[)]]];

有关表达式,请参见Expressions

我只能根据您的要求想到一种解决方案(使用1个条件代替2个条件)使用case expression。如下所示(如果您有任何条件)

RETURN
    CASE when return_status is not null  
         THEN 1

答案 3 :(得分:0)

允许使用带有OUT参数的功能,但有异味。